auth模塊是django自帶的一個用戶驗證模塊html
settings.py文件中默認註冊的中間件 django.contrib.auth.middleware.AuthenticationMiddleware 就是用來實現用戶認證功能的python
利用auth模塊實現自定義用戶驗證數據庫
1、繼承方式django
先在app的models寫用戶類,必定要繼承AbstractUser類session
這裏只寫一個字段phone。由於username,password字段已經被AbstractUser類定義過了,具體能夠參考AbstractUser類的源碼app
from django.contrib.auth.models import AbstractUser class User(AbstractUser): phone = models.CharField(max_length=11)
在settings.py文件中設置驗證的用戶類函數
AUTH_USER_MODEL = 'app01.User'
執行數據庫遷移命令就能夠建立數據庫了網站
能夠看到本來默認的用戶表auth_user沒有了,取而代之的是app01_user表 ui
能夠看到自定義用戶類相比原始的auth_user表只多了一個phone字段,就是models.py裏自定義User類手動定義的phone字段,到這裏就完成了對auth用戶表的擴展加密
2、定義一個表模型,跟User一對一管理
from django.contrib.auth.models import User class UserDetail(models.Model): phone=models.CharField(max_length=32) # 一對一跟auth_user表作關聯 # 若是是從外部引入的表模型,是不能加引號的 # 若是加引號,只是在當前model找 user=models.OneToOneField(to=User)
使用自帶auth的功能
1 先建立超級用戶
-python3 manage.py createsuperuser -輸入用戶名,郵箱(能夠不輸入),密碼,敲回車,這樣就建立出一個超級用戶 -也就是在auth_user這個表中插入了一條數據(由於密碼是加密的,因此不能手動插入)
2 驗證用戶
-from django.contrib import auth -user = auth.authenticate(request, username=name, password=pwd) -至關於在查詢:user=models.User.objects.filter(name=name,pwd=pwd).first() -若是校驗經過,會返回一個user對象,經過判斷user對象,校驗是否驗證成功
3 登陸
-auth.login(request,user) -其實就是在session中寫了一條數據 from django.contrib import auth def my_view(request): username = request.POST['username'] password = request.POST['password'] user = auth.authenticate(username=username, password=password) if user is not None: auth.login(request, user) # Redirect to a success page. ... else: # Return an 'invalid login' error message. ...
4 login(request,user)函數
一旦登陸成功,調用這個函數login(request,user) -視圖類,函數中的request對象中,就有一個user對象,就是當前登陸的用戶對象 -若是沒有登陸,request.user=AnonymousUser,匿名用戶
5 註銷
-auth.logout(request) -內部:調用了request.session.flush(),刪除了登陸狀態
6 登陸認證裝飾器
-from django.contrib.auth.decorators import login_required -@login_required(redirect_field_name='eee',login_url='/login/') -redirect_field_name:修改?後面的key值, -login_url:若是沒有登陸,跳轉到的頁面 -能夠局部配置 -能夠全局配置(在setting中) # 全局的配置,若是沒有登陸,跳到這個路由 LOGIN_URL='/login/'
7 建立用戶
-from django.contrib.auth.models import User - 建立超級用戶和普通用戶 # 不能用create,由於密碼是加密的.increate進去的是明文 # user=User.objects.create(username=name,password=pwd) # 建立超級用戶 # user=User.objects.create_superuser(username=name,password=pwd) # 建立普通用戶 user=User.objects.create_user(username=name,password=pwd)
8 校驗密碼
-request.user.check_password(pwd) -密碼正確返回True,不然返回False。 -先拿到用戶(能夠是登陸用戶,能夠現查)
9 修改密碼
-user.set_password(pwd) -user.save() -注意:必定要調用save(),不然是不保存的
10 is_authenticated()
用來判斷當前請求是否經過了認證。若是經過驗證,是true反之false def my_view(request): if not request.user.is_authenticated(): return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
11 刪除用戶
使用orm方法刪除
12 其它方法
-is_active:禁止登陸網站(用戶還存在,封號) -is_staff:是否對網站有管理權限(能不能登陸admin)