日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Django中session進行權限管理的使用

瀏覽:40日期:2024-09-03 15:08:34
目錄1.urls.py2.login/models.py3.views.login和login.html4.views.index4.views.index5.views.logout6.總結session和forms的搭配

當session啟用后,傳遞給視圖request參數的HttpRequest對象將包含一個session屬性,就像一個字典對象一樣。你可以在Django的任何地方讀寫request.session屬性,或者多次編輯使用它。

這個文件在我的C:Users17764530215testmysite地址

1.urls.py

from django.contrib import adminfrom django.urls import pathfrom login import viewsurlpatterns = [ path(’admin/’, admin.site.urls), path(’index/’, views.index), path(’login/’, views.login), path(’register/’, views.register), path(’logout/’, views.logout),]

Django中session進行權限管理的使用

策略:

未登錄人員,不論是訪問index還是login和logout,全部跳轉到login界面 已登錄人員,訪問login會自動跳轉到index頁面 已登錄人員,不允許直接訪問register頁面,需先logout 登出后,自動跳轉到login界面

(wow,這其實就是我們的功能!!)

2.login/models.py

from django.db import models# Create your models here.class User(models.Model): gender = ((’male’, '男'),(’female’, '女'), ) name = models.CharField(max_length=128, unique=True) password = models.CharField(max_length=256) email = models.EmailField(unique=True) sex = models.CharField(max_length=32, choices=gender, default='男') c_time = models.DateTimeField(auto_now_add=True) def __str__(self):return self.name class Meta:ordering = ['-c_time']verbose_name = '用戶'verbose_name_plural = '用戶'

各字段含義:

name: 必填,最長不超過128個字符,并且唯一,也就是不能有相同姓名; password: 必填,最長不超過256個字符(實際可能不需要這么長); email: 使用Django內置的郵箱類型,并且唯一; sex: 性別,使用了一個choice,只能選擇男或者女,默認為男; 使用__str__方法幫助人性化顯示對象信息; 元數據里定義用戶按創建時間的反序排列,也就是最近的最先顯示;

3.views.login和login.html

views.login:

def login(request): if request.session.get(’is_login’, None): # 不允許重復登錄return redirect(’/index/’) if request.method == ’POST’:login_form = forms.UserForm(request.POST) #上一次填寫了這個表單,所以從這里得到這個表單的數據message = ’請檢查填寫的內容!’if login_form.is_valid(): username = login_form.cleaned_data.get(’username’) password = login_form.cleaned_data.get(’password’) try:user = models.User.objects.get(name=username) except :message = ’用戶不存在!’return render(request, ’login/login.html’, locals()) if user.password == password: #如果用戶名和密碼都成功# 往session字典內寫入用戶狀態和數據:request.session[’is_login’] = True #is_login=True表示成功登陸request.session[’user_id’] = user.idrequest.session[’user_name’] = user.namereturn redirect(’/index/’) #重定向到主頁 else:message = ’密碼不正確!’return render(request, ’login/login.html’, locals())else: return render(request, ’login/login.html’, locals()) # 不是POST的話,統統轉去login.html login_form = forms.UserForm() return render(request, ’login/login.html’, locals())

我們進入login時,會去session里面找is_login項,如果為true就表示已經登陸了,所以就重定向到/index/中,進入首頁.

如果為False,即沒有登陸,那么往下走。如果是POST方法,那么執行一系列操作,如果不是POST,就表示是第一次用GET的方式登陸到這個login網頁的,那么就用forms.UserForm產生一個對象login_form,將其作為參數傳到login/login.html模板文件中,待會再介紹這個文件。

如果為False,且是POST時,就表明是填寫了表單的,這里就涉及很多業務邏輯和session的管理了,重點講。如果login_form.is_valid() 如下:通過login_form = forms.UserForm(request.POST)得到填寫的這個表單數據,然后去和數據庫的用戶名密碼去驗證,如果通過了,那么就將request.session[’is_login’]改為True,表示在登陸狀態,并且把user_id和user_name字段也改成對應的數據,這個之后應該有用.

下面進入login/login.html

<!doctype html><html lang='en'> <head> <!-- Required meta tags --> <meta charset='utf-8'> <meta name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no'> <!-- 上述meta標簽*必須*放在最前面,任何其他內容都*必須*跟隨其后! --> <!-- Bootstrap CSS --> <link rel='stylesheet'> <title>登錄</title> </head> <body> <div class='container'> <div class='col'><form action='/login/' method='post'> {% if message %} <div class='alert alert-warning'>{{ message }}</div> {% endif %} {% csrf_token %} <h3 class='text-center'>歡迎登錄</h3> {{ login_form }} <div> <a href='http://www.b3g6.com/register/' rel='external nofollow' rel='external nofollow' rel='external nofollow' rel='external nofollow' ><ins>新用戶注冊</ins></a> <button type='submit' class='btn btn-primary float-right'>登錄</button> </div></form> </div> </div> <!-- /container --> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> {# 以下三者的引用順序是固定的#} <script src='https://cdn.bootcss.com/jquery/3.3.1/jquery.js'></script> <script src='https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js'></script> <script src='https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js'></script> </body></html>

這里重要的地方是這個語句——{{ login_form }},在這個位置插入了一個表單login_form,然后填寫好這個表單以后,用view里面的login函數通過執行login_form = forms.UserForm(request.POST)來獲取填寫的這個表單數據,然后去進行校驗等等操作...

有了這兩個,我們的權限管理就基本完成了!本質上,這倆東西提供了一種機制————可以對輸入的用戶數據存在session里,然后校驗的時候從session中取出,去判斷是否是合法的用戶。那么,我們只需要再修改一下index.html,也是用session去校驗,這樣,直接通過網址訪問的用戶,由于沒有session,就會被攔截!

4.views.index

def index(request): if not request.session.get(’is_login’, None): #如果不在登陸狀態,就重定向到loginreturn redirect(’/login/’) return render(request, ’login/index.html’) #如果在登陸狀態,就進入index.html的模板文件

這里邏輯很清楚:如果不在登陸狀態,就重定向到login;如果在登陸狀態,就直接重定向到真正的login/index.html模板。在這么模板中,我們就可以開發各種功能了,該demo中的login/index/html如下:

<!DOCTYPE html> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> {# 以下三者的引用順序是固定的#} <script src='https://cdn.bootcss.com/jquery/3.3.1/jquery.js'></script> <script src='https://cdn.bootcss.com/popper.js/1.15.0/umd/popper.js'></script> <script src='https://cdn.bootcss.com/twitter-bootstrap/4.3.1/js/bootstrap.min.js'></script>​ </body></html>

這里重要的地方是這個語句——{{ login_form }},在這個位置插入了一個表單login_form,然后填寫好這個表單以后,用view里面的login函數通過執行login_form = forms.UserForm(request.POST)來獲取填寫的這個表單數據,然后去進行校驗等等操作...​有了這兩個,我們的權限管理就基本完成了!本質上,這倆東西提供了一種機制————可以對輸入的用戶數據存在session里,然后校驗的時候從session中取出,去判斷是否是合法的用戶。那么,我們只需要再修改一下index.html,也是用session去校驗,這樣,直接通過網址訪問的用戶,由于沒有session,就會被攔截!​

4.views.index

def index(request): if not request.session.get(’is_login’, None): #如果不在登陸狀態,就重定向到loginreturn redirect(’/login/’) return render(request, ’login/index.html’) #如果在登陸狀態,就進入index.html的模板文件

這里邏輯很清楚:如果不在登陸狀態,就重定向到login;如果在登陸狀態,就直接重定向到真正的login/index.html模板。在這么模板中,我們就可以開發各種功能了,該demo中的login/index/html如下:

<html lang='en'><head> <meta charset='UTF-8'> <title>首頁</title></head><body><h1>{{ request.session.user_name }}! 歡迎回來!</h1><p> <a href='http://www.b3g6.com/logout/'>登出</a></p></body></html>

Django中session進行權限管理的使用

最后,再來看看logout的實現吧

5.views.logout

def logout(request): #登出 if not request.session.get(’is_login’, None): #如果不在登陸狀態,就直接轉發到登陸界面# 如果本來就未登錄,也就沒有登出一說return redirect('/login/') request.session.flush() #清空session # 或者使用下面的方法 # del request.session[’is_login’] # del request.session[’user_id’] # del request.session[’user_name’] return redirect('/login/') #重定向到login界面

如果未登陸,那么直接重定向/login/界面,如果是登陸狀態,那么需要先通過 request.session.flush()來清空session,然后再重定向到/login/的登陸界面.

6.總結session和forms的搭配

forms其實是在html中,通過將表單和對象聯系在一起,就可以很容易在填寫表單后,通過forms去找到填寫的內容。session其實是權限校驗的利器!沒有session的時候,用戶可以直接訪問index界面,有session的時候,index函數的處理邏輯就變成通過session去判斷是否登陸。當然,與之配套,還必須要用login,logout等函數來維護好這個session信息,保證一個不變性——所有session中的is_login字段為True的時候,都是真正的登陸用戶.

到此這篇關于Django中session進行權限管理的使用的文章就介紹到這了,更多相關Django session權限管理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩高清不卡一区二区| 欧美在线日韩| 免费在线播放第一区高清av| 国产精品亚洲综合在线观看| 精品三级av| 极品av在线| 在线一区视频| 日韩黄色在线观看| 免费在线日韩av| 亚洲美女久久精品| 夜夜嗨网站十八久久| 日本不卡不码高清免费观看| 精品视频99| 91九色精品国产一区二区| 蜜桃免费网站一区二区三区| 国产精品成人一区二区网站软件| 国产aa精品| 免费国产自久久久久三四区久久 | 国产一区二区三区视频在线| yellow在线观看网址| 欧美日韩在线二区| 亚洲精品字幕| 日韩成人精品一区| 亚洲专区在线| 日韩高清三区| 国内精品美女在线观看| 欧美福利在线| 国产日韩欧美在线播放不卡| 日韩大片在线| 国产精品免费看| 国产精品v日韩精品v欧美精品网站| 婷婷综合六月| 日本免费在线视频不卡一不卡二| 中文字幕色婷婷在线视频| 六月婷婷一区| 成人污污视频| 午夜精品影视国产一区在线麻豆| av在线最新| 日韩va欧美va亚洲va久久| 99久精品视频在线观看视频| 国产亚洲一卡2卡3卡4卡新区| 日韩精品永久网址| 日韩高清在线不卡| 欧美精品一区二区三区精品| 青草久久视频| 亚洲欧美伊人| 精品中文在线| 蜜臀av一区二区三区| 成人在线视频免费看| 最新国产精品| 欧美日韩国产高清电影| 国产精品一页| 99视频精品| 高清不卡亚洲| 欧美久久久网站| 国产亚洲午夜| 日韩精品一区二区三区免费观看| 欧美日韩一区二区国产| 在线视频日韩| 精品国产91| 欧美日韩1区| 蜜桃一区二区三区在线观看| 91精品综合| 四季av一区二区凹凸精品| 国产日产高清欧美一区二区三区 | 日本不卡高清| 尤物网精品视频| 日韩美女一区二区三区在线观看| 国产免费久久| 日韩中文字幕| 久久福利精品| 99久久精品国产亚洲精品| 国产一区二区三区四区| 国产精品2023| 国产精品手机在线播放| 日韩激情中文字幕| 中文字幕日韩亚洲| 视频在线在亚洲| 五月天综合网站| 久久高清免费| 欧美日韩精品免费观看视欧美高清免费大片| 国产亚洲高清一区| 日韩国产欧美视频| 四虎精品永久免费| 亚州av一区| 亚洲人成网77777色在线播放 | 久久69成人| 久久99精品久久久野外观看| 欧美一级二级视频| 清纯唯美亚洲综合一区| 欧美精品中文| 国产精品theporn| 久久精品国产久精国产| 精品免费av| 天堂а√在线最新版中文在线| 日韩毛片视频| 99久久精品网| 91久久中文| 欧美中文日韩| 好看的亚洲午夜视频在线| 制服诱惑一区二区| 一区二区亚洲视频| 日本在线不卡视频| 国产探花一区在线观看| 国产精品3区| 91中文字幕精品永久在线| 国产中文在线播放| 99久久精品网站| 99国产精品视频免费观看一公开 | 在线免费观看亚洲| 最新国产精品视频| 欧美一区=区三区| 久久天堂影院| 日韩精品一区二区三区免费观影| 国产高清一区二区| 视频精品一区| 美腿丝袜亚洲三区| 欧美一区二区三区高清视频| 国产视频久久| 欧美天堂一区| 亚洲伊人av| 亚洲女人av| 日韩国产欧美在线视频| 九九九精品视频| 亚洲成av人片一区二区密柚| 丝袜脚交一区二区| 国产精品白浆| 亚洲午夜天堂| 中文字幕成人| 久久精品福利| 日韩午夜免费| 国产精品乱战久久久| 私拍精品福利视频在线一区| 麻豆成人在线| 麻豆传媒一区二区三区| 国精品一区二区三区| 91精品麻豆| 在线精品亚洲欧美日韩国产| 亚洲欧美久久久| 精品一区二区男人吃奶 | 国产一区二区三区黄网站| 亚洲激情中文在线| 欧美天堂在线| 亚洲电影有码| 欧美亚洲tv| 婷婷中文字幕一区| 国产精品美女午夜爽爽| 九九综合九九| 国产精品欧美在线观看| 久久久噜噜噜| 国产调教精品| 国产精品97| 麻豆国产一区| 视频在线在亚洲| 黄毛片在线观看| 亚洲v天堂v手机在线| 成人羞羞视频在线看网址| 欧美一级二区| 亚洲在线电影| 日韩中文影院| 你懂的国产精品永久在线| 亚洲欧美激情诱惑| 亚洲国产成人二区| 国产午夜精品一区在线观看| 免费国产自久久久久三四区久久 | 色爱综合网欧美| 日韩欧美2区| 欧美日韩国产综合网| 日韩综合在线| 欧美在线黄色| 久色成人在线| 亚洲www啪成人一区二区| 国产欧美精品| 亚洲欧美网站在线观看| 狠狠爱成人网| 精品国产免费人成网站| 国产日韩欧美一区| 中文字幕日韩欧美精品高清在线| 欧美日韩精品一区二区视频| 国产在线日韩精品| 国产精品白丝久久av网站| 亚洲精品影视| 91久久亚洲| 极品裸体白嫩激情啪啪国产精品| 日产精品一区二区| 麻豆久久久久久| 久久精品xxxxx| 日韩在线成人| 男人的天堂久久精品| 好看不卡的中文字幕| 日韩电影免费网址| 成人国产综合| 国产伊人久久| 精品视频高潮| 精品亚洲成人| 精品国产欧美| 日韩成人免费| 欧美日韩免费看片| 久久久国产亚洲精品| 韩国精品主播一区二区在线观看 |