1. 程式人生 > 其它 >stl list容器

stl list容器

目錄

Auth模組

Auth模組是什麼

Auth模組是Django自帶的使用者認證模組:

我們在開發一個網站的時候,無可避免的需要設計實現網站的使用者系統。此時我們需要實現包括使用者註冊、使用者登入、使用者認證、登出、修改密碼等功能,這還真是個麻煩的事情呢。

Django作為一個完美主義者的終極框架,當然也會想到使用者的這些痛點。它內建了強大的使用者認證系統--auth,它預設使用 auth_user 表來儲存使用者資料。

建立好新的Django專案之後,直接執行資料庫遷移命令就可以直接生成表

auth模組常用方法

所有的方法都要匯入模組 from django.contrib import auth

1.建立超級管理員使用者

直接在控制檯輸入
python3 manage.py createsuperuser
Email可以省略不寫

2.校驗賬號密碼是否一致

user_obj = auth.authenticate(request, username=username, password=password)  # 返回值是該使用者物件
# 如果校驗不成功  那麼返回值為None
# 因為是使用者物件 所以可以使用user_obj.username    user_obj.password(密文)...的方法
'''
1.自動查詢auth_user表
2.自動給密碼加密再比對(必須同時傳使用者名稱和密碼)
'''

3.儲存使用者狀態

auth.login(request,user_obj)  # 類似於request.session[key] = user_obj

********該方法的強大之處就是  只要執行了該方法  那麼你就可以在任何地方通過request.user獲取到當前登陸的使用者物件***********

4.獲取當前登陸使用者

request.user
如果是匿名使用者會返回AnonymousUser
正常登陸的使用者會返回該物件

5.判斷當前使用者是否登陸

request.user.is_authenticated()  # 返回的是布林值
如果是匿名使用者AnonymousUser(類似於遊客)訪問的就返回False
如果是正常的使用者登陸過的會返回True

6.校驗使用者是否登陸的裝飾器

# 需要匯入模組
from django.contrib.auth.decorators import login_required

區域性配置

@login_required(login_url='登陸介面的url')  # 不一定要跳轉登陸頁面  不要侷限
def home(request):
    return HttpResponse('哈哈')

全域性配置

1.在settings.py裡
# 全域性配置:沒有登陸就跳轉到登陸頁面
LOGIN_URL = '/登陸介面的url/'
2.在views.py裡
@login_required   # 不需要指定登陸頁面的url了
def home(request):
    return HttpResponse('哈哈')

優先順序

區域性>>>全域性

提問:  區域性和全域性哪個好呢?
  答:  全域性的好處在於無需重複寫程式碼  但是挑戰的頁面卻很單一
       區域性的好處在於不同的檢視函式在使用者沒有登陸的情況下可以跳轉到不同的頁面

7.比對與原密碼是否一致

is_right = request.user.check_password(老密碼)
# 該方法的返回值是布林值

8.修改密碼

request.user.set_password(新密碼)  # 僅僅是在修改物件的屬性
request.user.save()  # 這一步才是真正的操作資料庫  新密碼儲存到資料庫

9.登出

auth.logout(request) # 直接去session表內去找對應的資料  然後刪除資料

10.註冊使用者

建立普通使用者(常用)

User.objects.create_user(username=使用者名稱,password=密碼)

建立超級使用者(幾乎不用)

User.objects.create_superuser(username=使用者名稱,email=郵箱,password=密碼)

擴充套件auth_user表

利用面向物件的繼承,來對auth_user表進行擴充套件

前提條件

1. 在繼承之前執行過資料庫遷移命令
	auth_user沒有被建立,如果當前庫已經建立了那麼你就重新換一個庫
2. 匯入模組 from django.contrib.auth.models import User,AbstractUser
3. 繼承的類裡面不要覆蓋AbstractUser裡面的欄位名
	表裡面有的欄位都不要動,只擴充套件額外欄位即可
4. 需要在配置檔案中告訴django你要用 新表 代替 auth_user
	AUTH_USER_MODEL = '應用名.表名'
    eg: AUTH_USER_MODEL = 'app01.UserInfo'

效果

如果繼承了AbstractUser
那麼在執行資料庫遷移命令的時候auth_user表就不會再創建出來了
而新表中會出現auth_user所有的欄位外加自己擴充套件的欄位
這麼做的好處在於你能夠直接點選你自己的表更加快速的完成操作及擴充套件

# 你如果自己寫表替代了auth_user那麼
auth模組的功能還是照常使用,參考的表頁由原來的auth_user變成了 新表名  eg:UserInfo

案例:

# 先匯入模組
from django.contrib.auth.models import User,AbstractUser
# 書寫類
class UserInfo(AbstractUser):  # 要繼承AbstractUser
    phone = models.BigIntegerField()
    create_time = models.DateTimeField(auto_now_add=True)