Django自帶auth_user表操作:
views.py
from django.contrib import auth#引入auth模塊
from django.contrib.auth.models import User # auth應用中引入User類
(1)用戶注冊,添加記錄(create_use普通用戶,create_superuser超級用戶)
# 注冊
def register(request):
if request.method == 'GET':
register_obj = RegisterForm()
return render(request, 'register.html', {'register_obj': register_obj})
elif request.method == 'POST':
data = request.POST
register_obj = RegisterForm(data)
if register_obj.is_valid():
user_obj = register_obj.cleaned_data
print(user_obj)
username = user_obj.get('name')
password = user_obj.get('password')
#通過auth模塊,進行新用戶注冊,使用User表創建新用戶(create_use普通用戶,create_superuser超級用戶)
if not User.objects.filter(username=username).exists():
new_obj = User.objects.create_user(username=username, password=password)
print(f'新用戶{username}注冊成功!')
return redirect('login')
else:
register_obj.add_error('name', '用戶名已存在!')
return render(request, 'register.html', {'register_obj': register_obj})
else:
return render(request, 'register.html', {'register_obj': register_obj})
(2)登錄校驗(auth.authenticate(username=username, password=password)))
# 登錄
def login(request):
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# 調用auth.authenticate()方法進行登錄校驗
user_obj = auth.authenticate(username=username, password=password)
print(user_obj)
if user_obj:
#校驗成功,調用auth.login(request, user_obj)方法:
①執行和session一樣操作(創建隨機sessionid;加密添加sesion表;寫入cookie)
②自動在request對象添加一個屬性user,在后續身份認證直接調用request.user.is_authenticated時自動判斷是否登錄
auth.login(request, user_obj)
return JsonResponse({'status': 1, 'url': reverse('index')})
else:
return JsonResponse({'status': 0, 'url': ''})
(3)訪問認證(request.user.is_authenticated)
def index(request):
if request.user.is_authenticated:#調用request.user的is_authenticated偽方法進行認證
print(request.user)#request.user就是當前用戶對象,打印結果為用戶名稱
if request.method == 'GET':
return render(request, 'index.html')
else:
return redirect('login')
(4)退出登錄(auth.logout(request))
def logout(request):
auth.logout(request)#調用 auth.logout(request)方法,類似session的request.session.flush()同時刪除session表記錄和cookie
return redirect('login')
(5)修改密碼(request.user.check_password(),request.user.set_password(),request.user.save())
def reset_psd(request):
if request.user.is_authenticated:
if request.method == 'GET':
return render(request, 'reset_psd.html')
elif request.method == 'POST':
old_password = request.POST.get('old_password')
new_password = request.POST.get('new_password')
r_new_password = request.POST.get('r_new_password')
# ret=request.user.check_password(old_password)
# print(ret)
if request.user.check_password(old_password):#調用request.user.check_password(old_password)判斷原密碼是否正確
if new_password == r_new_password:
request.user.set_password(new_password)#調用request.user.set_password(new_password)設置新密碼
request.user.save()#調用request.user.save()進行保存更新
return JsonResponse({'status': True, 'info': '操作成功!', 'url': reverse('index')})
else:
return JsonResponse({'status': False, 'info': '兩次新密碼不一致!', 'url': ''})
else:
return JsonResponse({'status': False, 'info': '操作失敗:原密碼輸入有誤!', 'url': ''})
return JsonResponse({'status': False, 'info': '操作失敗!', 'url': ''})
else:
return redirect('login')