Django自帶的用戶登錄 | Django
阿新 • • 發佈:2018-07-20
用戶認證 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) ifuser: 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