咱們在開發一個網站的時候,無可避免的須要設計實現網站的用戶系統。此時咱們須要實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。Django內置了強大的用戶認證系統--auth,它默認使用 auth_user 表來存儲用戶數據。html
from app01 import models from django.contrib import auth def auth_login(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') # models.User.objects.filter(username=username,password=password).first() user_obj = auth.authenticate(request, username=username, password=password) if user_obj: # 記錄用戶狀態 # request.session['name'] = 'jason' auth.login(request, user_obj) # 一旦記錄了,能夠在任意的地方經過request.user獲取到當前登陸對象 return render(request, 'auth_login.html') def auth_index(request): print(request.user.is_authenticated()) # 判斷當前用戶是否已經登陸 print(request.user, type(request.user)) # 獲取當前登陸用戶對象 return HttpResponse('ok') # 退出登陸 def auth_logout(request): auth.logout(request) # request.session.flush() return HttpResponse('ok')
from app01 import models from django.contrib import auth from django.contrib.auth.models import User def auth_register(request): if request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') user_obj = auth.authenticate(request, username=username) if user_obj: return HttpResponse('用戶已存在') # 把數據寫到表中。要導入表:from django.contrib.auth.models import User User.objects.create_user(username=username, password=password) # 建立普通用戶 # User.objects.create_superuser(username=username, password=password, email='123@qq.com') # 建立超級用戶 return render(request, 'auth_register.html')
# 修改密碼 def auth_password(request): is_res = request.user.check_password('jerry123') # 校驗密碼是否一致 if is_res: request.user.set_password('666') # 設置新密碼 request.user.save() # 修改密碼必須save保存,否則無效 return HttpResponse('ok')
from django.contrib.auth.decorators import login_required # 局部配置,指定跳轉到登陸頁面。 全局配置在settings裏配置:LOGIN_URL = '/auth_login/' @login_required(login_url='/auth_login/') @login_required def auth_home(request): return HttpResponse('home必須登陸後才能訪問')
from django.contrib.auth.models import User, AbstractUser class Userinfo(AbstractUser): phone = models.CharField(max_length=32) avatar = models.CharField(max_length=32) ps:用本身建立的表,全部auth模塊的方法使用方式不變
# 告訴django再也不使用默認的auth_user,而使用咱們自定義的表 # AUTH_USER_MODEL = 'app名.models裏面對應的模型表名' AUTH_USER_MODEL = 'app01.Userinfo'