一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - 詳解Django框架中用戶的登錄和退出的實現

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

2020-07-26 11:09腳本之家 Python

這篇文章主要介紹了詳解Django框架中用戶的登錄和退出的實現,Django是重多Python人氣框架中最為知名的一個,需要的朋友可以參考下

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

認證給出的用戶名和密碼,使用 authenticate() 函數。它接受兩個參數,用戶名 username 和 密碼 password ,并在密碼對給出的用戶名合法的情況下返回一個 User 對象。 如果密碼不合法,authenticate()返回None。

?
1
2
3
4
5
6
>>> 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() 函數:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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/")

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

?
1
2
3
4
5
6
from django.contrib import auth
 
def logout_view(request):
  auth.logout(request)
  # Redirect to a success page.
  return HttpResponseRedirect("/account/loggedout/")

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

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

?
1
2
3
4
5
6
7
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提供的視圖的默認URL。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{% 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 用于退出后重定向。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲小视频网站 | chinese踩踏调教vk | 日本高清视频网站 | 脱了白丝校花的内裤猛烈进入 | 9999视频| 波多野结衣在线中文字幕 | 国产精品原创视频 | bl高h荡肉古代np | 精品久久久久久久久久久 | 美女露奶奶| 手机看片1024日韩 | 美女扒开腿让男人桶爽动态图片 | 午夜国产精品影院在线观看 | caoporn超碰最新地址进入 | 门房秦大爷小说 | 欧美日韩亚洲国内综合网香蕉 | 国产精品香蕉夜间视频免费播放 | 午夜视频网站 | 国产良心大作白丝精厕 | 精品国产品在线18年 | 52zfl宅福利yxpjw | 丝瓜视频看污片 | jux539原千岁在线播放 | 男生和女生搞逼逼 | 双性肉文高h | 国产成人免费在线视频 | 成人伊在线影院 | 亚洲天堂日韩在线 | 亚洲日本久久一区二区va | 日本激情在线 | 射逼网 | 国产精品视频一区二区三区w | 2020中文字幕 | 免费观看欧美性一级 | 欧美一级片免费在线观看 | 激情亚洲天堂 | 亚洲成av人在线视 | 免费一区 | 99视频久久精品久久 | 久久视频这只精品99re6 | 国产精品久久久久影视不卡 |