用戶認證組件
1 from django.contrib import auth 2 3 從auth_user表中獲取對象,沒有返回None,其中密碼爲密文,使用了加密算法 4 user = auth.authenticate(username=user, password=pwd) 5 6 7 讓上邊找到的user對象賦給request.user使其成爲全局變量,方便之後調用 8 給已認證的用戶附加上seession id 等信息 9 auth.login(request, user) # request.user:當前登陸對象 10 11 12 from django.contrib.auth import logout 13 註銷用戶:刪除session表對應的記錄 14 logout(request)
User對象
用於檢查用戶是否已經登陸True/False(user/) user.is_authenticated user.is_amonymous # 是不是匿名用戶 若是沒有登陸,跳轉到登陸界面,登錄成功在跳轉回來 一、自定義 def my_view(request): if not request.user.is_authenticated: return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path)) 二、django內置 from django.contrib.auth.decorators import login_required @login_required def my_view(request): ... 咱們須要配置登陸界面路徑LOGIN_URL="/login/"
auth_user表操做
1 from django.contrib.auth.models import User 2 -------------建立新用戶------------------- 3 user = User.objects.create_user(username='',password='',email='') 4 User.objects.create_superuser() 5 ---------------------檢查密碼正誤----- 6 用戶須要修改密碼的時候 首先要讓他輸入原來的密碼 ,若是給定的字符串經過了密碼檢查,返回 True 7 print("raw_pwd", user.check_password(pwd))
8 -------------------------修改密碼--------
9 user = User.objects.get(username='')
10 user.set_password(password='')
11 user.save
1 def sign_up(request): 2 3 state = None 4 if request.method == 'POST': 5 6 password = request.POST.get('password', '') 7 repeat_password = request.POST.get('repeat_password', '') 8 email=request.POST.get('email', '') 9 username = request.POST.get('username', '') 10 if User.objects.filter(username=username): 11 state = 'user_exist' 12 else: 13 new_user = User.objects.create_user(username=username, password=password,email=email) 14 new_user.save() 15 16 return redirect('/book/') 17 content = { 18 'state': state, 19 'user': None, 20 } 21 return render(request, 'sign_up.html', content)
1 @login_required 2 def set_password(request): 3 user = request.user 4 state = None 5 if request.method == 'POST': 6 old_password = request.POST.get('old_password', '') 7 new_password = request.POST.get('new_password', '') 8 repeat_password = request.POST.get('repeat_password', '') 9 if user.check_password(old_password): 10 if not new_password: 11 state = 'empty' 12 elif new_password != repeat_password: 13 state = 'repeat_error' 14 else: 15 user.set_password(new_password) 16 user.save() 17 return redirect("/log_in/") 18 else: 19 state = 'password_error' 20 content = { 21 'user': user, 22 'state': state, 23 } 24 return render(request, 'set_password.html', content)
擴展auth表
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): tel = models.CharField(max_length=32) 在setting配置AUTH_USER_MODEL = "app01.UserInfo"
from django.contrib.auth.models import User class UserInfo(User): tel = models.CharField(max_length=32) class Meta:
super(User.Meta)
。。。。
不用再配置裏更改了