欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn)

 更新時(shí)間:2015年07月23日 10:22:00   投稿:goldensun  
這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實(shí)現(xiàn),Django是重多Python人氣框架中最為知名的一個(gè),需要的朋友可以參考下


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 用于退出后重定向。


相關(guān)文章

最新評(píng)論