Auth模块
一.Auth模塊是干什么的
它是Django自帶的一個強大的用戶認證的模塊,用戶系統相關的功能,注冊登錄,用戶認證,注銷,修改密碼.
二.Auth模塊常用的有哪些方法?
介紹方法之前先寫一個功能通過功能來更好的認識Auth模塊
創建炒雞用戶,用來登陸django admin的后臺管理
createsuperuser
密碼輸入大于8位,Django中創建用戶的時候默認的密碼字節數量是大于8位的.
模塊導入
from django.contrip import auth
搭建好html文件
登錄
先放完整代碼
from django.shortcuts import render.HttpResponse,redirect
from djang.contrip import auth
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
# models.User.objects.filter(username=username,password=password).first()
# user_obj = auth.authenticate(username=username,password=password)
# user_obj = auth.authenticate(username=username)
# is_alive = User.objects.filter(username=username)
#
# print(is_alive)
# print(is_alive.first().password)
"""
該方法會有一個返回值 當條件存在的情況下 返回就是數據對象本身
條件不滿足 直接返回None
"""
# if user_obj:
# print(user_obj)
# print(user_obj.username)
# print(user_obj.password)
# # 一定要記錄用戶狀態 才算真正的用戶登錄
# # request.session['user'] = user_obj
# auth.login(request,user_obj)
# """該方法會主動幫你操作session表 并且只要執行了該方法
# 你就可以在任何位置通過request.user獲取到當前登錄的用戶對象
# """
# old_path = request.GET.get('next')
# if old_path:
# return redirect(old_path)
# else:
# return redirect('/home/')
return render(request,'login.html')
1.authenticate()認證
提供用戶認證功能,直接去數據找真實數據驗證跟用戶輸入的用戶名以及密碼是否正確,如果認證成功則返回一個數據對象,認證失敗就返回None.一般需要username,password兩個關鍵字參數
配置{% csrf_token %}即可
2.login(request,user) 保存登錄狀態
改函數接受request,以及經過認證后的存在user對象,這個函數會在后端為這個用戶生成相關的session數據. 而知執行完之后只要能拿到request的地方都能通過request.user獲取到當前登錄用戶的對象.
3.is_authenticated()
判斷當前的用戶是否通過了認證.
4.logout(request)退出登錄
該函數沒有返回值,調用這個函數,請求的session信息會全部清除,而且使用這個函數也不會報錯.
from django.contrib.auth import logout
def logout_view(request):
logout(request)
# Redirect to a success page.
5.login_required()校驗裝飾器
裝飾器工具,快捷給FBV視圖添加登錄校驗.
在用戶沒有登陸的情況下跳轉的url有全局配置和局部配置
在裝飾器括號內通過login_url參數局部指定跳轉url
全局配置的話,用戶沒有登錄的情況下,所有的視圖統一跳轉到一個url配置文件中
form django.contrip.decorators import login_required
#@login_required(login_url='/xxx/') # 局部配置
@login_required# 全局配置
def my_view(request):
...
CBV視圖添加登錄校驗
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator
class Home(views.View):
@method_decorator(login_required)
def get(self, request):
return render(request, 'home.html')
6.check_password(password) 與set_password(password='') 檢驗設置密碼
檢驗密碼是否正確的方法,返回bool值
rt = user.check_password()
修改密碼,設置完一定要保存密碼(新密碼也可以為對象)
user.set_password(password=new_password)
user.save()
7.用戶注冊
from djang.contrip.auth.models import User
使用create會密碼直接存成明文
User.objects.create(username=username,password=password)
創建普通用戶是加密的
User.objects.create_user(username=username,password=password)
創建炒雞用戶,郵箱必須填寫
User.objects.create_superuser(username=username,password=password,email='123321@qq.com')
三.User對象的屬性
username,password
is_staff : 用戶是否擁有網站的管理權限.
is_active : 是否允許用戶登錄, 設置為 False,可以在不刪除用戶的前提下禁止用戶登錄。
四.擴展默認表auth_user的字段
雖然django自帶的auth模塊很好用,但是他默認創建的auth_user表我們不能對其進行操作,那么怎么才能既可以使用auth簡便的功能又可以進行表內字段的修改,擴展呢?
這時候我們就應該想到使用繼承,類的三大特性之一.操作如下
繼承
寫一個默認類繼承原來的auth_user類(自定義的表中字段不能跟原有的字段沖突)
告訴Django使用新建的類(在settings配置文件中)替代auth_user表
總結
- 上一篇: Swagger从入门到放弃
- 下一篇: 工业炉温度计算机控制系统,热处理工业炉计