1、Auth模塊html
1)auth模塊是什麼。登陸後臺使用的帳號密碼,則就是使用的auth模塊建立的表前端
Auth模塊是Django自帶的用戶認證模塊: 咱們在開發一個網站的時候,無可避免的須要設計實現網站的用戶系統。 此時咱們須要實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。 Django做爲一個完美主義者的終極框架,固然也會想到用戶的這些痛點。它內置了強大的用戶認證系統--auth, 它默認使用 auth_user 表來存儲用戶數據。
2)auth模塊的功能django
2.1)導入auth模塊json
from django.contrib import auth
2.2)auth模塊下的方法。authenticate()。認證功能後端
提供了用戶認證功能,即驗證用戶名以及密碼是否正確,通常須要username 、password兩個關鍵字參數。 若是認證成功(用戶名和密碼正確有效),便會返回一個 User 對象。 authenticate()會在該 User 對象上設置一個屬性來標識後端已經認證了該用戶,且該信息在後續的登陸過程當中是須要的。 用法: user = authenticate(username='usernamer',password='password')
具體使用以下app
from django.contrib import auth def auth_test(request): username = request.POST['username'] password = request.POST['password'] user = auth.authenticate(username=username, password=password) if user: print(user.username) return HttpResponse("登陸成功") return HttpResponse("登陸失敗")
2.3)login(request,user)。登陸功能(認證成功後)框架
from django.contrib import auth def auth_test(request): user = auth.authenticate(request,username='user2',password='user123456') # 認證 print(user) if user: print(user.username) # 登陸的用戶名 auth.login(request,user) return render(request,'auth_test.html')
登陸後,前端也可獲取到登陸的用戶名ide
<body> <div>{{ request.user }}</div> </body>
在前端也可判斷請求是否經過。函數
<body> <div>{{ request.user }}</div> <div>{{ request.user.is_authenticated }}</div> </body>
2.4)auth.logout(request)。用戶退出方法網站
def auth_test_logout(request): auth.logout(request) return HttpResponse('退出成功')
2、auth模塊擴展。用於建立用戶,登陸裝飾器
1)新增字段
1.1)修改配置文件settings.py
# AUTH_USER_MODEL = "app名.用戶名錶" AUTH_USER_MODEL = "app01.UserInfo" # 指定表
1.2)建立的表,繼承AbstractUser。可重寫表結構
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=32)
2)建立用戶
def auth_test_creat_user(request): # 管理員 UserInfo.objects.create_superuser(username='usersb1',password=123,email='11111111@qq.com') # 普通用戶 UserInfo.objects.create_user(username='usersb2',password=123,email='11111121@qq.com') return HttpResponse('成功')
3.1)登陸裝飾器方法一。視圖函數前加上url
先導入裝飾模塊:from django.contrib.auth.decorators import login_required
@login_required(login_url='/auth_test_login/') # 登陸之後纔能有的操做 def auth_test_logout(request): auth.logout(request) return HttpResponse('退出成功')
login_url='/auth_test_login/',沒有登陸跳轉到的url
3.2)登陸裝飾器方法二。settings全局配置
LOGIN_URL = '/auth_test_login/'
視圖函數前就不用加url了
@login_required # 登陸之後纔能有的操做 def auth_test_logout(request): auth.logout(request) return HttpResponse('退出成功'
4) cbv模式加裝飾器
4.1) 運用於類裏面的單個函數
from django.utils.decorators import method_decorator from django.contrib.auth.decorators import login_required @method_decorator(login_required,name='get') class Host(View): def get(self, request): host_list = models.Host.objects.all() return render(request, 'host.html', {"host_list": host_list}) def delete(self,request): print('delete') response = {'status': True, 'message': None, 'data': None} body = QueryDict(request.body) try: nid = body.get('nid') print(nid) models.Host.objects.filter(id=nid).delete() response['data'] = nid except Exception as e: response['status'] = False response['message'] = '刪除錯誤' result = json.dumps(response, ensure_ascii=False) return HttpResponse(result)
4.2)運用於類裏面的全部函數
@method_decorator(login_required,name='dispatch') class Host(View): def get(self, request): host_list = models.Host.objects.all() return render(request, 'host.html', {"host_list": host_list})
5)檢查密碼。check_password(password)。
密碼正確返回True,不然返回False。
check_password(password) auth 提供的一個檢查密碼是否正確的方法,須要提供當前請求用戶的密碼。 tag = user.check_password('密碼') if tag: print("ok") else: print("錯誤")
6)修改密碼。set_password(password)
auth 提供的一個修改密碼的方法,接收 要設置的新密碼 做爲參數。 注意:設置完必定要調用用戶對象的save方法!!! 用法: user.set_password(password='') user.save()
一個簡單的修改密碼示例
@login_required def set_password(request): user = request.user err_msg = '' if request.method == 'POST': old_password = request.POST.get('old_password', '') new_password = request.POST.get('new_password', '') repeat_password = request.POST.get('repeat_password', '') # 檢查舊密碼是否正確 if user.check_password(old_password): if not new_password: err_msg = '新密碼不能爲空' elif new_password != repeat_password: err_msg = '兩次密碼不一致' else: user.set_password(new_password) user.save() return redirect("/login/") else: err_msg = '原密碼輸入錯誤' content = { 'err_msg': err_msg, } return render(request, 'set_password.html', content)
7)User對象的屬性
User對象屬性:username, password
is_staff : 用戶是否擁有網站的管理權限.
is_active : 是否容許用戶登陸, 設置爲 False,能夠在不刪除用戶的前提下禁止用戶登陸。
3、總結(auth模塊使用)
配置文件:settings.py AUTH_USER_MODEL = "app01.UserInfo" # 建立擴展用戶表 LOGIN_URL = '/auth_test_login/' # 裝飾器的跳轉登陸url 建立表:models.py from django.contrib.auth.models import AbstractUser # 繼承 AbstractUser class UserInfo(AbstractUser): nid = models.AutoField(primary_key=True) telephone = models.CharField(max_length=32) 視圖函數方法:views.py auth.authenticate(request,username='user2',password='user123456') # 認證 auth.login(request,user) # 登陸 print(request.user) # 屬性,用戶名 request.user.is_authenticated # 屬性,判斷請求是否經過 @login_required # 裝飾器 UserInfo.objects.create_superuser() # 建立超級管理員 UserInfo.objects.create_user() # 建立普通管理員 check_password(password) # 檢查密碼 set_password(password) # 修改密碼 前端文件: request請求體裏面含有user對象 後端有的屬性,前端也能獲取到 {{ request.user }} {{ request.user.is_authenticated }}
用戶權限控制:auth表註冊
is_staff控制