詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)
Django 提供內(nèi)置的視圖(view)函數(shù)用于處理登錄和退出 (以及其他奇技淫巧),但在開(kāi)始前,我們來(lái)看看如何手工登錄和退出。 Django提供兩個(gè)函數(shù)來(lái)執(zhí)行django.contrib.auth\中的動(dòng)作 : authenticate()和login()。
認(rèn)證給出的用戶名和密碼,使用 authenticate() 函數(shù)。它接受兩個(gè)參數(shù),用戶名 username 和 密碼 password ,并在密碼對(duì)給出的用戶名合法的情況下返回一個(gè) User 對(duì)象。 如果密碼不合法,authenticate()返回None。
>>> from django.contrib import auth >>> user = auth.authenticate(username='john', password='secret') >>> if user is not None: ... print "Correct!" ... else: ... print "Invalid password."
authenticate() 只是驗(yàn)證一個(gè)用戶的證書(shū)而已。 而要登錄一個(gè)用戶,使用 login() 。該函數(shù)接受一個(gè) HttpRequest 對(duì)象和一個(gè) User 對(duì)象作為參數(shù)并使用Django的會(huì)話( session )框架把用戶的ID保存在該會(huì)話中。
下面的例子演示了如何在一個(gè)視圖中同時(shí)使用 authenticate() 和 login() 函數(shù):
from django.contrib import auth def login_view(request): username = request.POST.get('username', '') password = request.POST.get('password', '') user = auth.authenticate(username=username, password=password) if user is not None and user.is_active: # Correct password, and the user is marked "active" auth.login(request, user) # Redirect to a success page. return HttpResponseRedirect("/account/loggedin/") else: # Show an error page return HttpResponseRedirect("/account/invalid/")
注銷一個(gè)用戶,在你的視圖中使用 django.contrib.auth.logout() 。 它接受一個(gè)HttpRequest對(duì)象并且沒(méi)有返回值。
from django.contrib import auth def logout_view(request): auth.logout(request) # Redirect to a success page. return HttpResponseRedirect("/account/loggedout/")
注意,即使用戶沒(méi)有登錄, logout() 也不會(huì)拋出任何異常。
在實(shí)際中,你一般不需要自己寫(xiě)登錄/登出的函數(shù);認(rèn)證系統(tǒng)提供了一系例視圖用來(lái)處理登錄和登出。 使用認(rèn)證視圖的第一步是把它們寫(xiě)在你的URLconf中。 你需要這樣寫(xiě):
from django.contrib.auth.views import login, logout urlpatterns = patterns('', # existing patterns here... (r'^accounts/login/$', login), (r'^accounts/logout/$', logout), )
/accounts/login/ 和 /accounts/logout/ 是Django提供的視圖的默認(rèn)URL。
缺省情況下, login 視圖渲染 registragiton/login.html 模板(可以通過(guò)視圖的額外參數(shù) template_name 修改這個(gè)模板名稱)。 這個(gè)表單必須包含 username 和 password 域。如下示例: 一個(gè)簡(jiǎn)單的 template 看起來(lái)是這樣的
{% extends "base.html" %} {% block content %} {% if form.errors %} <p class="error">Sorry, that's not a valid username or password</p> {% endif %} <form action="" method="post"> <label for="username">User name:</label> <input type="text" name="username" value="" id="username"> <label for="password">Password:</label> <input type="password" name="password" value="" id="password"> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{ next|escape }}" /> </form> {% endblock %}
如果用戶登錄成功,缺省會(huì)重定向到 /accounts/profile 。 你可以提供一個(gè)保存登錄后重定向URL的next隱藏域來(lái)重載它的行為。 也可以把值以GET參數(shù)的形式發(fā)送給視圖函數(shù),它會(huì)以變量next的形式保存在上下文中,這樣你就可以把它用在隱藏域上了。
logout視圖有一些不同。 默認(rèn)情況下它渲染 registration/logged_out.html 模板(這個(gè)視圖一般包含你已經(jīng)成功退出的信息)。 視圖中還可以包含一個(gè)參數(shù) next_page 用于退出后重定向。
- 對(duì)Django 中request.get和request.post的區(qū)別詳解
- 基于Django URL傳參 FORM表單傳數(shù)據(jù) get post的用法實(shí)例
- 教你如何將 Sublime 3 打造成 Python/Django IDE開(kāi)發(fā)利器
- Python+Django在windows下的開(kāi)發(fā)環(huán)境配置圖解
- python Django連接MySQL數(shù)據(jù)庫(kù)做增刪改查
- Django如何自定義model創(chuàng)建數(shù)據(jù)庫(kù)索引的順序
- Django中對(duì)數(shù)據(jù)查詢結(jié)果進(jìn)行排序的方法
- Django中幾種重定向方法
- Python的Django框架中forms表單類的使用方法詳解
- python Django模板的使用方法(圖文)
- Django objects.all()、objects.get()與objects.filter()之間的區(qū)別介紹
- 教你安裝python Django(圖文)
- Django中更新多個(gè)對(duì)象數(shù)據(jù)與刪除對(duì)象的方法
- Django框架中render_to_response()函數(shù)的使用方法
- Django靜態(tài)資源URL STATIC_ROOT的配置方法
- 解決Django migrate No changes detected 不能創(chuàng)建表的問(wèn)題
- django啟動(dòng)uwsgi報(bào)錯(cuò)的解決方法
- Django讀取Mysql數(shù)據(jù)并顯示在前端的實(shí)例
- Django小白教程之Django用戶注冊(cè)與登錄
- Python3+Django get/post請(qǐng)求實(shí)現(xiàn)教程詳解
相關(guān)文章
Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法
今天小編就為大家分享一篇Pycharm無(wú)法使用已經(jīng)安裝Selenium的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-10-10Python pygorithm模塊用法示例【常見(jiàn)算法測(cè)試】
這篇文章主要介紹了Python pygorithm模塊用法,結(jié)合實(shí)例形式分析了pygorithm模塊的功能、安裝及針對(duì)常見(jiàn)算法的相關(guān)使用操作技巧,需要的朋友可以參考下2018-08-08Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用體驗(yàn)
這篇文章主要為大家介紹了Python推導(dǎo)式之字典推導(dǎo)式和集合推導(dǎo)式使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06Django怎么在admin后臺(tái)注冊(cè)數(shù)據(jù)庫(kù)表
這篇文章主要介紹了Django怎么在admin后臺(tái)注冊(cè)數(shù)據(jù)庫(kù)表,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python控制臺(tái)打印log輸出重復(fù)的解決方法
在學(xué)習(xí)了python的函數(shù)式編程后,又接觸到了logging這樣一個(gè)強(qiáng)大的日志模塊。這篇文章主要給大家介紹了關(guān)于python控制臺(tái)打印log輸出重復(fù)的解決方法,需要的朋友可以參考下2021-05-05tensorflow 實(shí)現(xiàn)自定義梯度反向傳播代碼
今天小編就為大家分享一篇tensorflow 實(shí)現(xiàn)自定義梯度反向傳播代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02python實(shí)現(xiàn)向ppt文件里插入新幻燈片頁(yè)面的方法
這篇文章主要介紹了python實(shí)現(xiàn)向ppt文件里插入新幻燈片頁(yè)面的方法,涉及Python操作ppt文檔添加幻燈片的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Python Socket TCP雙端聊天功能實(shí)現(xiàn)過(guò)程詳解
這篇文章主要介紹了Python Socket TCP雙端聊天功能實(shí)現(xiàn)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06