django 快速實現session的操作


 

說明:

  從這一篇開始就不再完整的介紹django項目的創建過程了,因為前面幾篇博客中都詳細的介紹了這個創建過程,套路都是一樣的,熟悉了這個套路,后面要做的是一些細節技術點的學習和練習。

 

  上一節講到了django中如何使用cookie來記錄用戶登錄信息,這一節來了解session是如何來記錄用戶登錄信息的。

 

創建項目,創建應用,設置settings.py的過程不再介紹。

項目目錄:

 

 

 

設置URL                                                          

 

設置urls.py 文件如下:

from django.conf.urls import patterns, include, url from django.contrib import admin 
admin.autodiscover() urlpatterns
= patterns('', # Examples: # url(r'^$', 'csvt11.views.home', name='home'), # url(r'^blog/', include('blog.urls')), url(r'^admin/', include(admin.site.urls)), url(r'^login/$', 'online.views.login'), url(r'^index/$', 'online.views.index'), url(r'^logout/$', 'online.views.logout'), )

 

 

進行數據庫的同步                                

 

因為本例中,我們不需要創建數據庫表(當然你可以參考前面幾章的例子創建用戶登錄的數據庫表),所以,這里直接執行數據庫的同步。

 

自動創建了一個叫django_session的表,這個表里就是用於存放我們的session信息的。

 

 

創建視圖                                            

 

views.py

#coding=utf-8
from django.shortcuts import render from django.shortcuts import render,render_to_response from django.http import HttpResponse,HttpResponseRedirect from django import forms class UserForm(forms.Form): username = forms.CharField() #用戶登錄
def login(req): if req.method == "POST": uf = UserForm(req.POST) if uf.is_valid(): username = uf.cleaned_data['username'] #把獲取表單的用戶名傳遞給session對象
            req.session['username'] = username return HttpResponseRedirect('/index/') else: uf = UserForm() return render_to_response('login.html',{'uf':uf}) #登錄之后跳轉頁
def index(req): username = req.session.get('username','anybody') return render_to_response('index.html',{'username':username}) #注銷動作
def logout(req): del req.session['username']  #刪除session
    return HttpResponse('logout ok!')

  這里用到的就是session創建和刪除,代碼中有注釋。視圖是動能實現的核心邏輯,這里調用到了session的相關方法,非常簡單,需要說明的是session 是字典的形式存在的,比如一個sessionid 對應一個信息(比如,用戶名,密碼,添加到購物車的商品等。)

 

 

創建模板                                             

 

login.html

<form method = 'post'> {{uf.as_p}} <input type="submit" value = "ok"/>
</form>

 

index.html

<div>
   <h1>welcome {{username}}</h1>
   <a href="/logout">logout</a>
</div>

 

 

訪問登錄

 

http://127.0.0.1:8000/login/

 

這里沒有判斷用戶密碼是否正常的邏輯,所以,輸入任意信息都可登錄。

 

 

查看瀏覽器session id

 

 

 

查看數據庫

 

  看查,session 是用戶登錄的用戶名保存服務器端的數據庫中,而客戶端(瀏覽器)產生的只是一個session id ,程序通過讀取客戶端的session id 來查找對應的用戶名,並返回給客戶端,從而在客戶端的信息。在數據庫中並沒有看到剛才登錄的用戶名(Tom),標紅色下划線的就是,只是對其進行了加密,所以會看到一串很長的大小寫字符串。

 

 登錄成功:

點擊logout退出:

再次訪問index頁

 

    在index 頁面,點擊“logout” 退出后,就刪除了客戶端的session id 信息,所以,再訪問index 頁面,就是會看到“weclome anybody”的提示。

 

問題:

  按照正常的邏輯,用戶登錄是不准訪問登錄成功的頁面(index),這一塊就涉及到django 的“訪問限制”的相關方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM