auth認證模塊

1、auth模塊

Auth模塊是Django自帶的用戶認證模塊:

咱們在開發一個網站的時候,無可避免的須要設計實現網站的用戶系統。此時咱們須要實現包括用戶註冊、用戶登陸、用戶認證、註銷、修改密碼等功能,這還真是個麻煩的事情呢。Django內置了強大的用戶認證系統--auth,它默認使用 auth_user 表來存儲用戶數據。html

 

2、auth登陸

from app01 import models
from django.contrib import auth
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)
        if user_obj:
            # 記錄用戶狀態
            # request.session['name'] = 'jason'
            auth.login(request, user_obj)  # 一旦記錄了,能夠在任意的地方經過request.user獲取到當前登陸對象
    return render(request, 'auth_login.html')

def auth_index(request):
    print(request.user.is_authenticated())  # 判斷當前用戶是否已經登陸
    print(request.user, type(request.user))  # 獲取當前登陸用戶對象
    return HttpResponse('ok')

# 退出登陸
def auth_logout(request):
    auth.logout(request)   # request.session.flush()
    return HttpResponse('ok')

 

3、auth註冊

from app01 import models
from django.contrib import auth
from django.contrib.auth.models import User
def auth_register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(request, username=username)
        if user_obj:
            return HttpResponse('用戶已存在')
        # 把數據寫到表中。要導入表:from django.contrib.auth.models import User
        User.objects.create_user(username=username, password=password)  # 建立普通用戶
        # User.objects.create_superuser(username=username, password=password, email='123@qq.com')  # 建立超級用戶
    return render(request, 'auth_register.html')

 

4、auth修改密碼

# 修改密碼
def auth_password(request):
    is_res = request.user.check_password('jerry123')  # 校驗密碼是否一致
    if is_res:
        request.user.set_password('666')  # 設置新密碼
        request.user.save()               # 修改密碼必須save保存,否則無效
    return HttpResponse('ok')

 

5、裝飾器裝飾,登陸才能訪問其餘頁面

from django.contrib.auth.decorators import login_required

# 局部配置,指定跳轉到登陸頁面。      全局配置在settings裏配置:LOGIN_URL = '/auth_login/'
@login_required(login_url='/auth_login/')

@login_required
def auth_home(request):
    return HttpResponse('home必須登陸後才能訪問')

 

6、auth自定義表

咱們能夠經過繼承內置的 AbstractUser 類,來定義一個本身的Model類。這樣既能根據項目需求靈活的設計用戶表,又能使用Django強大的認證系統了

from django.contrib.auth.models import User, AbstractUser

class Userinfo(AbstractUser):
    phone = models.CharField(max_length=32)
    avatar = models.CharField(max_length=32)

ps:用本身建立的表,全部auth模塊的方法使用方式不變

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

# 告訴django再也不使用默認的auth_user,而使用咱們自定義的表
# AUTH_USER_MODEL = 'app名.models裏面對應的模型表名'

AUTH_USER_MODEL = 'app01.Userinfo'

相關文章
相關標籤/搜索