Django中的auth用法

Auth模塊:用戶認證html

 

咱們沒用auth模塊前的驗證方法:authenticate
數據庫

def auth_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()    
        # 咱們經過django的orm查詢表裏有沒有對應的數據,有的話登陸成功
    return render(request,'auth_login.html')

用auth模塊:django

def auth_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(request,username = username,password = password)
        # 至關於執行了上面的那句,獲得一個用戶對象,獲取到的明文密碼會自動轉爲密文去數據庫比較
        
    return render(request,'auth_login.html')

 

登陸成功後記錄用戶的登陸狀態:auth.loginsession

# 記錄用戶狀態
    request.session['name'] = username
    
# auth模塊記錄
    auth.login(request,user_obj)

# request.session保存的只是字符串,而auth保存的則是對象,一但記錄了,能夠在任意地方經過request.user獲取到當前登陸對象, 
未登陸狀態取request.user 後臺會返回 AnonymousUse(匿名用戶)

 

判斷當前用戶是否登陸:is_authenticatedapp

request.user.is_authenticated()
# 登陸返回Ture

 

退出登陸:logoutui

auth.logout(request)
# 至關於
    request.session.flush()

 

用auth模塊完成註冊功能時記住,用就全都用authurl

保存註冊用戶時:create_userspa

models.User.object.create(username=username,password=password)
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='123@qq.com')
# 建立超級用戶,登陸後臺管理系統,須要郵箱。

 

修改密碼:check_password、setpasswordcode

def auth_password(request):
    print(request.user.password) # 打印出來的password是密文形式

    old_password = request.POST.get('old_password') # 獲取用戶輸入的舊密碼
    new_password = request.POST.get('new_password') # 獲取用戶輸入的新密碼

    is_res = request.user.check_password(old_password) # 去數據庫比對是否正確
    if is_res:
        request.user.setpassword(new_password) # 設置新密碼
        request.user.save() # 保存密碼,這一步不能少,不然密碼不會被修改

 

登陸驗證:login_requiredorm

from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/')  # 局部配置
def home(request):
    return HttpResponse('ok')
# 全局配置須要在settings中配置參數
LOGIN_URL = '/login/'

from django.contrib.auth.decorators import login_required
@login_required    # 裝飾器後面不須要指定跳轉頁面,直接跳到全局配置的頁面
def home(request):
    return HttpResponse('ok')

 

擴展默認的auth_user表

想要加一個存儲用戶手機號的字段

咱們能夠經過繼承內置的 AbstractUser 類,來定義一個本身的Model類。

from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):#繼承AbstractUser
    """
    用戶信息表
    """
    nid = models.AutoField(primary_key=True)#這樣就至關於在本身的類中能夠派生出新的字段
    phone = models.CharField(max_length=11, null=True, unique=True)#
    
    def __str__(self):
        return self.username#字符串原樣輸出

注意:

按上面的方式擴展了內置的auth_user表以後,必定要在settings.py中告訴Django,我如今使用我新定義的UserInfo表來作用戶認證。寫法以下:

# 引用Django自帶的User表,繼承使用時須要設置,不加數據庫遷移不了
AUTH_USER_MODEL = "app名.UserInfo"

再次強調:

一旦咱們指定了新的認證系統所使用的表,咱們就須要從新在數據庫中建立該表,而不能繼續使用原來默認的auth_user表了。

相關文章
相關標籤/搜索