auth模塊筆記

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)
相關文章
相關標籤/搜索