国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

詳解Django框架中用戶的登錄和退出的實現

2019-11-25 17:08:38
字體:
來源:轉載
供稿:網友


Django 提供內置的視圖(view)函數用于處理登錄和退出 (以及其他奇技淫巧),但在開始前,我們來看看如何手工登錄和退出。 Django提供兩個函數來執行django.contrib.auth/中的動作 : authenticate()和login()。

認證給出的用戶名和密碼,使用 authenticate() 函數。它接受兩個參數,用戶名 username 和 密碼 password ,并在密碼對給出的用戶名合法的情況下返回一個 User 對象。 如果密碼不合法,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() 只是驗證一個用戶的證書而已。 而要登錄一個用戶,使用 login() 。該函數接受一個 HttpRequest 對象和一個 User 對象作為參數并使用Django的會話( session )框架把用戶的ID保存在該會話中。

下面的例子演示了如何在一個視圖中同時使用 authenticate() 和 login() 函數:

from django.contrib import authdef 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/")

注銷一個用戶,在你的視圖中使用 django.contrib.auth.logout() 。 它接受一個HttpRequest對象并且沒有返回值。

from django.contrib import authdef logout_view(request):  auth.logout(request)  # Redirect to a success page.  return HttpResponseRedirect("/account/loggedout/")

注意,即使用戶沒有登錄, logout() 也不會拋出任何異常。

在實際中,你一般不需要自己寫登錄/登出的函數;認證系統提供了一系例視圖用來處理登錄和登出。 使用認證視圖的第一步是把它們寫在你的URLconf中。 你需要這樣寫:

from django.contrib.auth.views import login, logouturlpatterns = patterns('',  # existing patterns here...  (r'^accounts/login/$', login),  (r'^accounts/logout/$', logout),)

/accounts/login/ 和 /accounts/logout/ 是Django提供的視圖的默認URL。

缺省情況下, login 視圖渲染 registragiton/login.html 模板(可以通過視圖的額外參數 template_name 修改這個模板名稱)。 這個表單必須包含 username 和 password 域。如下示例: 一個簡單的 template 看起來是這樣的

{% 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 %}

如果用戶登錄成功,缺省會重定向到 /accounts/profile 。 你可以提供一個保存登錄后重定向URL的next隱藏域來重載它的行為。 也可以把值以GET參數的形式發送給視圖函數,它會以變量next的形式保存在上下文中,這樣你就可以把它用在隱藏域上了。

logout視圖有一些不同。 默認情況下它渲染 registration/logged_out.html 模板(這個視圖一般包含你已經成功退出的信息)。 視圖中還可以包含一個參數 next_page 用于退出后重定向。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 房产| 岫岩| 阜新市| 平昌县| 贵溪市| 石渠县| 霍州市| 石门县| 天长市| 镇江市| 九江县| 辽源市| 安西县| 商南县| 金塔县| 景泰县| 大石桥市| 乌拉特中旗| 射洪县| 达日县| 道真| 景德镇市| 横峰县| 会东县| 广昌县| 天峻县| 天全县| 菏泽市| 永川市| 井研县| 陆川县| 资讯 | 确山县| 大名县| 壤塘县| 义乌市| 宁国市| 渝北区| 广东省| 合山市| 和田县|