2014年11月5日 星期三
Django筆記(10)- Cookie 與 Session
cookie是儲存在客戶端瀏覽器中的暫時性訊息,負責讓伺服端和客戶端溝通更有效率。
使用Cookie
步驟一
修改 helloWorld/view.py(完整代碼如下)
from django.http import HttpResponse
def set_cookie(request):
response = HttpResponse('Set username as Jacky')
response.set_cookie('username','Jacky')
return response
def get_cookie(request):
if 'username' in request.COOKIES:
return HttpResponse('username is %s'%request.COOKIES['username'])
else:
return HttpResponse('No cookies.')
步驟二
修改 mysite/mysite/urls.py(完整代碼如下)
from django.conf.urls import patterns, include, url
from django.contrib import admin
#引入app目錄下 views.py 的函數
from helloWorld.views import set_cookie, get_cookie
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^set_cookie/$', set_cookie),
url(r'^get_cookie/$', get_cookie),
)
步驟三
開啟 server 後~
在網址列打上 127.0.0.1:8000/set_cookie/ 設置cookie
步驟四
開啟 server 後~
在網址列打上 127.0.0.1:8000/get_cookie/ 觀看cookie
※Cookie 有以下兩種問題
第一 : 用戶可關閉cookies的功能
第二 : cookie以明文傳輸,容易被攔截、竄改、偽造
為了解決cookies的弱點,我們還有一個更強大的機制:Session
使用Session
Session之所以能夠解決cookie的問題,是因為他把資訊存在伺服端
步驟一
修改 helloWorld/view.py(完整代碼如下)
def use_session(request):
if 'name' in request.session:
return HttpResponse('your name is %s'%request.session['name'])
else:
request.session['name'] = 'Jacky'
return HttpResponse('Set name as Jacky')
步驟二
修改 mysite/mysite/urls.py(完整代碼如下)
from django.conf.urls import patterns, include, url
from django.contrib import admin
#引入app目錄下 views.py 的函數
from helloWorld.views import use_session
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^use_session/$', use_session),
)
步驟三
開啟 server 後~
在網址列打上 127.0.0.1:8000/use_session/ 設置session
步驟四
重新整理頁面後可看到session已經成功儲存
※進入Django Shell可刪除session
> python manage.py shell
>>> from django.contrib.sessions.models import Session
>>> Session.objects.all().delete()
使用 session 防止表單重複提交
步驟一
在 mysite/mysite/settings.py 添加以下代碼
#決定Session是否在瀏覽器關閉時失效,預設為False
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
步驟二
修改 helloWorld/view.py(完整代碼如下)
def helloWorld(request):
if 'ok' in request.POST:
name = request.POST['name']
phone = request.POST['phone']
f = checkForm(request.POST)
if f.is_valid() and name != '請輸入名字':
#如果session沒有被設置,才將資料加入資料庫
if 'ok' not in request.session:
request.session['ok'] = 'ok'
Vendor.objects.create(name=name, phone=phone)
else:
return HttpResponse('成功防止按F5重複提交表單!')
#觀看資料庫
vendors = Vendor.objects.all()
return render_to_response('dataBase.html',locals())
else:
return render_to_response('test.html',locals())
else:
f = checkForm(initial={'name':'請輸入名字'})
return render_to_response('test.html',locals())
步驟三
修改 mysite/mysite/urls.py(完整代碼如下)
from django.conf.urls import patterns, include, url
from django.contrib import admin
#引入app目錄下 views.py 的函數
from helloWorld.views import helloWorld
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^helloWorld/$', helloWorld),
)
步驟四
開啟 server 後~
在網址列打上 127.0.0.1:8000/helloWorld/ 新增資料並設置session
步驟五
按F5刷新頁面後可看到表單並不會重複提交
上一篇 回目錄 下一篇
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言