Django框架自定義session處理操作示例
本文實(shí)例講述了Django框架自定義session處理操作。分享給大家供大家參考,具體如下:
django有自己的一套session框架,有他自己的機(jī)制處理,但這通常是在全新構(gòu)件系統(tǒng)的時(shí)候才會(huì)用到。如果是一套已有的系統(tǒng),現(xiàn)在重新想用django做成web版的,由于以往的數(shù)據(jù)庫是已經(jīng)設(shè)計(jì)好,不能修改其表結(jié)構(gòu),但可以增加表,因?yàn)橛胐jango必須有django自己的一些系統(tǒng)表,這些是必須添加到原有的數(shù)據(jù)庫中的,我們可以通過 mange.py syncdb 來創(chuàng)建.
| auth_group
| auth_group_permissions
| auth_permission
| auth_user
| auth_user_groups
| auth_user_user_permissions
| blog_content
| django_content_type
| django_session
| django_site
當(dāng)然,這些表各自有自己的作用,比如django_session 就是用來管理session 的。
如果你用djiango自身的session來管理用戶是否登錄,可以用系統(tǒng)自帶的裝飾方法:@login_required
但如果是你自己在原來的系統(tǒng)上開發(fā),原來的用戶管理肯定不可能是django一樣的。所以得自己寫一個(gè)類似@login_required
方法來判斷用戶是否已經(jīng)登錄.
假設(shè)有一個(gè)user model 是用戶的Class ,并在 models中已經(jīng)定義
class UserID(models.Model): login_id=models.CharField(max_length=32) login_pwd=models.CharField(max_length=32,blank=False) nickname=models.CharField(max_length=50)
登錄的方法
def checklogin(request): """ 用戶登錄簡(jiǎn)易判斷 """ try: login_id=request.POST.get('user','') userpwd=request.POST.get('password','') existuser=models.UserID.objects.get(login_id=login_id,login_pwd=userpwd) #假設(shè)存在此用戶,就要給session 賦值 request.session['myuser']=existuser except: .....
到此為止,自己定義的登錄過程已經(jīng)完成,并且記錄了session值。如果在其他方法需要檢查用戶是否登錄時(shí),如何寫自己的判斷方法呢?
def check_session(func): ''' check user session ''' def wrapper(request,*args, **kv): userinfo=request.session.get('myuser',None) if not userinfo: return HttpResponseRedirect('/login') #沒有登錄,則跳轉(zhuǎn)到登錄頁面 return func(request,*args, **kv) return wrapper
在其他需要檢查用戶是否登錄的views方法上,加上這個(gè)裝飾就可以了。
@check_session def get_all_infomation(request): context={} context.update(csrf(request)) ...... return render_to_response('customer/all_information.html',context)
這樣,如果用戶沒有登錄的話,就會(huì)跳轉(zhuǎn)到登錄頁面,用裝飾實(shí)現(xiàn)了自己的用戶 session判斷。
當(dāng)然有人會(huì)問,我要注銷登錄怎么處理呢?簡(jiǎn)單,django的session其實(shí)就是dict.所以可以用如下方法注銷
def logout(request): try: del request.session['myuser'] except KeyError: pass return HttpResponseRedirect('/')
希望本文所述對(duì)大家基于Django框架的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
OpenCV圖像卷積之cv.filter2D()函數(shù)詳解
在其官方文檔中,filter2D()函數(shù)在掩模板介紹中一筆帶過,我認(rèn)為該函數(shù)應(yīng)該進(jìn)行詳細(xì)介紹,下面這篇文章主要給大家介紹了關(guān)于OpenCV圖像卷積之cv.filter2D()函數(shù)的相關(guān)資料,需要的朋友可以參考下2022-09-09Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù)
今天小編就為大家分享一篇Pytorch 實(shí)現(xiàn)凍結(jié)指定卷積層的參數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-01-01Matplotlib實(shí)戰(zhàn)之折線圖繪制詳解
折線圖是一種用于可視化數(shù)據(jù)變化趨勢(shì)的圖表,它可以用于表示任何數(shù)值隨著時(shí)間或類別的變化,本文主要介紹了如何利用Matplotlib實(shí)現(xiàn)折線圖的繪制,感興趣的可以了解下2023-08-08Python連接mssql數(shù)據(jù)庫編碼問題解決方法
這篇文章主要介紹了Python連接mssql數(shù)據(jù)庫編碼問題解決方法,本文方法同樣適用mysql、sqllite、mongodb等數(shù)據(jù)庫,需要的朋友可以參考下2015-01-01Python實(shí)現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能
這篇文章主要介紹了Python實(shí)現(xiàn)的查詢mysql數(shù)據(jù)庫并通過郵件發(fā)送信息功能,可實(shí)現(xiàn)Python針對(duì)mysql的查詢與宕機(jī)信息通過郵件發(fā)送的相關(guān)操作技巧,需要的朋友可以參考下2018-05-05如何將Pycharm中調(diào)整字體大小的方式設(shè)置為"ctrl+鼠標(biāo)滾輪上下滑"
這篇文章主要介紹了如何將Pycharm中調(diào)整字體大小的方式設(shè)置為"ctrl+鼠標(biāo)滾輪上下滑",本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11多個(gè)geojson經(jīng)過坐標(biāo)系轉(zhuǎn)換后如何合并為一個(gè)shp數(shù)據(jù)
這篇文章主要介紹了多個(gè)geojson經(jīng)過坐標(biāo)系轉(zhuǎn)換后如何合并為一個(gè)shp數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10Python數(shù)字/字符串補(bǔ)零操作實(shí)例代碼
我們?cè)陂_發(fā)中為了排版方便或者是輸出文件命名整潔,通常需要給數(shù)字前面補(bǔ)0來做統(tǒng)一,這篇文章主要給大家介紹了關(guān)于Python數(shù)字/字符串補(bǔ)零操作的相關(guān)資料,需要的朋友可以參考下2021-07-07