說明
django通過提供User、auth方法實(shí)現(xiàn)用戶登錄認(rèn)證,權(quán)限管理等功能
一:用戶認(rèn)證
用戶登錄,判斷用戶名和密碼是否正確,判斷該賬戶是否鎖定等。
#coding=utf8
from django.shortcuts import render_to_response,redirect
from django.template import RequestContext
from django.contrib import auth
from django.contrib.auth.decorators import login_required
def Login(request):
if request.method == "GET":
return render_to_response("login.html",context_instance=RequestContext(request))
else:
username = request.POST.get('username',None)
password = request.POST.get('password',None)
userinfo = auth.authenticate(username=username,password=password)
if userinfo:
if userinfo.is_active:
auth.login(request,userinfo)
return redirect('/')
return render_to_response("login.html",{"errmsg":"用戶名或密碼錯誤"},context_instance=RequestContext(request))
@login_required
def Index(request):
return render_to_response("test.html")
@login_required
def Logout(request):
auth.logout(request)
return redirect("/login")
代碼解釋:
- render_to_respinse中使用context_instance=RequestContext(request),是因?yàn)閐jango post提交的時候會防止跨域請求csrf驗(yàn)證,解決此問題方法
- 在前端form表單中添加
<form method="post" action="/login">{% csrf_token %}
- 在視圖函數(shù)中使用RequestContext
return render_to_response("login.html",context_instance=RequestContext(request))
- auth.authenticate方法為驗(yàn)證輸入的表單的用戶和密碼是否正確,如果正確則返回用戶對象,如果不正確則返回None
- is_active 判斷用戶賬號是否被鎖定,對應(yīng)用戶創(chuàng)建時數(shù)據(jù)表字段is_active,默認(rèn)為True,True:1,F(xiàn)alse:0
- auth.login,django登錄用戶,需傳入用戶對象,默認(rèn)將用戶id寫入session
- auth.logout,django登出用戶,如果用戶沒有登錄,使用該方法不會報錯
- login_required裝飾器,判斷用戶是否登錄,如果沒有登錄則跳轉(zhuǎn)到登錄頁,django默認(rèn)登錄頁為"accounts/login/",自定義該地址:
#在setting.py中添加
LOGIN_URL = "/login"