1. 程式人生 > >Django自帶的用戶登錄 | Django

Django自帶的用戶登錄 | Django

用戶認證 The cti 表示 ren ash 當前頁 限制 superuser

1.用戶認證

  authenticate()方法;

from django.contrib.auth import authenticate
def login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        if
user: print(authenticate successed)

2.用戶登錄

  login()方法;

from django.contrib.auth import authenticate,login
def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        
if user: # 登錄 login(request,user) print(authenticate successed)

3.限制用戶登錄後才能訪問頁面

  login_required裝飾器;

from django.contrib.auth.decorators import login_required

# 在具體的每個頁面添加
@login_required
def dashboard(request):
    return render(request, crm/dashboard.html
)

  問題:未登錄用戶直接訪問被限制的頁面,報錯:http://localhost:8000/accounts/login/?next=/ 這個url找不到

  解決:當未登錄用戶直接訪問被限制的頁面時,直接跳轉至login頁面;

     在settings.py文件中添加配置:LOGIN_URL = ‘/login/‘

     此時再次訪問就會跳轉至login頁面;

4.登錄成功後跳轉至上次訪問的頁面

  默認登錄成功後跳轉至"http://localhost:8000/login/?next=/" 中next參數指定的位置;

from django.shortcut import render,redirect
from django.contrib.auth import authenticate,login
def user_login(request):
    if request.method == "POST":
        username = request.POST.get("username")
        password = request.POST.get("password")
        user = authenticate(username=username,password=password)
        if user:
        # 登錄
        login(request,user)
        print(authenticate successed)
        # 驗證成功時,user返回python,不成功返回None;
        return redirect(request.GET.get(‘next‘,‘/‘)) # 跳轉至上次訪問頁面,如果沒有next參數,就直接跳轉首頁

附1:在註冊時,通常我們會使用django自帶的user表,並且對其字段進行擴展,方式就是進行一對一的關聯;

class UserInfo(models.Model):
    user = models.OneToOneField(User, blank=True, null=True)

  這裏需要註意的是,不是所有註冊用戶都可以登錄admin後臺,所以只需要在註冊時,對默認的auth_user表中的is_superuser字段進行更改(0/1);

  另外,is_active字段表示當前用戶是否已經激活;

附2:如果當前頁面只能擁有is_superuser權限,就可以添加判斷條件:if request.is_superuser:

Django自帶的用戶登錄 | Django