Django自帶Auth模塊
目錄
# 創(chuàng)建超級(jí)用戶
python manage.py createsuperuser
# 使用auth模塊,要用就全用
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
# Create your views here.
def login(request): #登錄
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = auth.authenticate(request,username=username,password=password) # 必須同時(shí)傳入用戶名和密碼,返回用戶對(duì)象或者None
if user_obj:
# 保存用戶狀態(tài)
auth.login(request,user_obj) #類似于request.session[''] = user_obj,執(zhí)行后就可以使用request.user獲取當(dāng)前登錄的用戶對(duì)象
return redirect('home')
return render(request,'login.html')
@login_required(login_url='/login/') # 局部指定登錄頁面,優(yōu)先級(jí)高于settings.py中的全局配置
def home(request):
# if request.user.is_authenticated(): # 判斷是否登錄
# return HttpResponse('你登錄了,這里是你的主頁')
return HttpResponse('這里是主頁')
@login_required
def modify_pwd(request): # 修改密碼
if request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
confirm_password = request.POST.get('confirm_password')
if new_password == confirm_password:
is_right = request.user.check_password(old_password) # 自動(dòng)加密比對(duì)數(shù)據(jù)庫
if is_right:
request.user.set_password(new_password) #修改對(duì)象屬性
request.user.save() # 操作數(shù)據(jù)庫
return render(request,'modify_pwd.html',locals())
@login_required
def logout(request): # 注銷
auth.logout(request) # 類似request.session.flush()
return redirect('/login/')
def register(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# User.objects.create(username=username,password=password) # 會(huì)明文存儲(chǔ)密碼
User.objects.create_user(username=username,password=password) # 創(chuàng)建普通
# 創(chuàng)建超級(jí)用戶create_superuser
return render(request,'register.html')
auth模塊小結(jié)
# 比對(duì)用戶名和密碼
user_obj = auth.authenticate(request,username=username,password=password) # 必須同時(shí)傳入用戶名和密碼,返回用戶對(duì)象或者None
# 保存用戶狀態(tài)
auth.login(request,user_obj) #類似于request.session[''] = user_obj,執(zhí)行后就可以使用request.user獲取當(dāng)前登錄的用戶對(duì)象
# 判斷當(dāng)前用戶是否登錄
request.user.is_authenticated() # 判斷是否登錄
# 獲取當(dāng)前登錄用戶
request.user
# 校驗(yàn)用戶是否登錄裝飾器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/') # 局部指定登錄頁面,優(yōu)先級(jí)高于settings.py中的全局配置
# settings.py LOGIN_URL = '/login/' 全局配置
# 修改密碼
is_right = request.user.check_password(old_password) # 自動(dòng)加密比對(duì)數(shù)據(jù)庫
request.user.set_password(new_password) #修改對(duì)象屬性
request.user.save() # 操作數(shù)據(jù)庫
# 注銷
auth.logout(request)
# 注冊(cè)
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password) # 創(chuàng)建普通用戶
拓展auth_user表
class UserInfo(AbstractUser):
'''
如果繼承了AbstractUser,在執(zhí)行數(shù)據(jù)庫遷移命令時(shí)就不會(huì)創(chuàng)建auth_user表,而會(huì)在userinfo表中包含所有auth_user表
的字段,并包含自己拓展的字段
但是:
1。需要在數(shù)據(jù)庫設(shè)計(jì)階段就明確不適用auth_user表,如果當(dāng)前庫已經(jīng)創(chuàng)建了auth_user表,則該庫不可執(zhí)行以上繼承
2.繼承的類不要覆蓋Abstract類中的字段名
3.需要在配置文件中聲明用userinfo替換auth_user
AUTH__USER_MODEL = 'app01.UserInfo' 應(yīng)用名.類名
'''
phone = models.CharField(max_length=16)
浙公網(wǎng)安備 33010602011771號(hào)