django中級 --- 用戶認(rèn)證

說明

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)證,解決此問題方法
  1. 在前端form表單中添加
<form method="post" action="/login">{% csrf_token %}
  1. 在視圖函數(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"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容