django框架之十一 --------Auth模組
Auth模組
一、什麼是auth模組
Auth模組是django自帶的使用者認證模組
Auth模組是由django自帶的使用者認證模組,可以實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能。預設使用auth_user表來儲存使用者資料。
二、Auth模組使用
1、建立超級使用者(createsuperuser)
建立超級使用者就是在auth_user表中插入資料,密碼是加密的
在Run manage.py Task 建立
createsuperuser
2、查詢使用者(authenticate())
驗證使用者名稱以及密碼是否正確,一般需要username、password兩個關鍵字引數。如果認證成功(使用者名稱和密碼正確有效),便會返回一個User物件。
from django.contrib import auth user_obj = auth.authenticate(request、username=name,password=pwd)
不能使用filter這種查詢方法,因為User表存的密碼是加密的。
models.User.objects.filter(username=username,password=password).first()
3、登入使用者(login())
該 函式接受一個HttpResponse物件,以及一個經過查詢認證的user_obj
登入之後,會將使用者狀態記錄到session中
from django.contrib import auth auth.login(request,user_obj)
4、登入成功
只要執行了上面那句話登入成功了,你就可以在後端任意位置通過request.user獲取到當前使用者物件
user_obj = request.user
5、判斷使用者是否登入(is_authenticated)
用來判斷當前請求是否通過了認證,如果通過了就是true,反之false
request.user.is_authenticated
6、登入認證裝飾器
快捷的給某個檢視新增登入校驗
若使用者沒有登入,則會跳轉到django預設的登入URL‘/accounts/login/’,並傳遞當前訪問url的絕對路徑(登入成功後,會重定向回到該路徑)
如果自定義了登入URL則需要再settings.py檔案中通過LOGIN——URL設定登入路徑
from django.contrib.auth.decorators import login_required @login_required(login_url='/xxx/') #區域性配置 直接在裝飾器裡面寫一個登入路徑 def index(request): pass #全域性配置 settings檔案中寫 LOGIN_URL = '/xxx/' 設定完後直接寫裝飾器@login_required就可以
7.註冊超級使用者和普通使用者
錯誤方法:User.objects.create(username =username,password=password) # 建立使用者名稱的時候 千萬不要再使用create 了 User.objects.create_user(username =username,password=password) # 建立普通使用者 User.objects.create_superuser(username =username,password=password,email='[email protected]') # 建立超級使用者 郵箱必填
8.校驗密碼(check_password())
校驗密碼
request.user.check_password(old_password)
9.修改密碼(set_password())
注意:修改密碼的時候,一定要save儲存,否則不會失效
request.user.set_password(new_password)
request.user.save()
10.退出登入(logout())
當呼叫該函式時,當前請求的session資訊會全部清除,相當於request.session.flush().該使用者即使沒有登入,使用該函式也不會報錯。
auth.logout(request)
11.User物件的其他屬性
#在網站上線以前,將is_active和is_staff設定為False is_active #禁止登入網站(使用者還存在,封號) is_staff #是否對網站有管理許可權(能不能登入admin) request.user.is_active = False request.user.is_staff = False
三、自定義auth_user表
1.方法一:定義一個表模型,跟User一對一關聯(不推薦使用)
from django.contrib.auth.models import User
class UserDetail(models.Model):
phone = models.CharField(max_lenth=32)
#一對一跟auth_user表做關聯
#如果是從外部引入的表模型,是不能加引號的
#如果加引號,只是在當前models找
user=models.OneToOneField(to=User)
2.方法二:使用類的繼承,繼承(AbstractUser)
from django.contrib.auth.models import AbstractUser
class Userinfo(AbstractUser):
#千萬不要跟原來表中欄位重複 只能創新
phone = models.BigIntegerField()
avatar = models.CharField(max_length=32)
注意:
1.一旦我們通過繼承來實現擴充套件auth_user表,那麼做資料庫遷移,以後就沒有auth_user這個表了,以後認證元件用的表就是UserInfo。原來使用 auth_user 表模型的地方全部要用新的表模型——UserInfo(這個是你自定義的模型類)
2.告訴django不再使用auth預設的表,而是使用你自定義的表,需要在settings.py中設定
AUTH_USER_MODEL = 'app01.Userinfo' '應用名.類名'