Django 框架07 狀態保持

2021-09-29 17:54:53 字數 3795 閱讀 9683

1.狀態保持

①http協議是無狀態的:每次請求都是一次新的請求,不會記得之前通訊的狀態

②客戶端與伺服器端的一次通訊,就是一次會話

③實現狀態保持的方式:在客戶端或伺服器端儲存與會話有關的資料

④儲存方式包括cookie、session,會話一般指session物件

⑤使用cookie,所有資料儲存在客戶端,注意不要儲存敏感資訊

⑥推薦使用sesison方式,所有資料儲存在伺服器端,在客戶端cookie中儲存session_id

⑦狀態保持的目的是在一段時間內跟蹤請求者的狀態,可以實現跨頁面訪問當前請求者的資料

⑧注意:不同的請求者之間不會共享這個資料,與請求者一一對應

'django.contrib.sessions',
middleware_classes列表中新增:

'django.contrib.sessions.middleware.sessionmiddleware',
③禁用會話:刪除上面指定的兩個值,禁用會話將節省一些效能消耗

3.使用session

①啟用會話後,每個httprequest物件將具有乙個session屬性,它是乙個類字典物件

②get(key, default=none):根據鍵獲取會話的值

③clear():清除所有會話

④flush():刪除當前的會話資料並刪除會話的cookie

⑤del request.session['member_id']:刪除會話

4.登入演示

①在views.py檔案中建立檢視

from django.shortcuts import render, redirect

from django.core.urlresolvers import reverse

def index(request):

uname = request.session.get('uname')

return render(request, 'booktest/index.html', )

def login(request):

return render(request, 'booktest/login.html')

def login_handle(request):

request.session['uname'] = request.post['uname']

return redirect(reverse('main:index'))

def logout(request):

# request.session['uname'] = none

# del request.session['uname']

# request.session.clear()

request.session.flush()

return redirect(reverse('main:index'))

②配置url

主url:

from django.conf.urls import include, url

urlpatterns = [

url(r'^', include('booktest.urls', namespace='main'))

]

應用url:

from django.conf.urls import url

from . import views

urlpatterns = [

url(r'^$', views.index, name='index'),

url(r'login/$', views.login, name='login'),

url(r'login_handle/$', views.login_handle, name='login_handle'),

url(r'logout/$', views.logout, name='logout')

]

③建立模板index.html

你好:}

登入退出

建立模板login.html

④會話過期時間

set_expiry(value):設定會話的超時時間

如果沒有指定,則兩個星期後過期

如果value是乙個整數,會話將在values秒沒有活動後過期

若果value是乙個imedelta物件,會話將在當前時間加上這個指定的日期/時間過期

如果value為0,那麼使用者會話的cookie將在使用者的瀏覽器關閉時過期

如果value為none,那麼會話永不過期

修改檢視中login_handle函式,檢視效果

def login_handle(request):

request.session['uname'] = request.post['uname']

request.session.set_expiry(10)

# request.session.set_expiry(timedelta(days=5))

# request.session.set_expiry(0)

# request.session.set_expiry(none)

return redirect(reverse('main:index'))

session_engine='django.contrib.sessions.backends.db'
基於快取的會話:只存在本地記憶體中,如果丟失則不能找回,比資料庫的方式讀寫更快

session_engine='django.contrib.sessions.backends.cache'
可以將快取和資料庫同時使用:優先從本地快取中獲取,如果沒有則從資料庫中獲取

session_engine='django.contrib.sessions.backends.cached_db'
⑥使用redis快取session

會話還支援檔案、純cookie、memcached、redis等方式儲存,下面演示使用redis儲存

安裝包:

pip install django-redis-sessions
修改settings中的配置,增加如下項

session_engine = 'redis_sessions.session'

session_redis_host = 'localhost'

session_redis_port = 6379

session_redis_db = 0

session_redis_password = ''

session_redis_prefix = 'session'

⑦管理redis的命令

啟動:

sudo redis-server /etc/redis/redis.conf
停止:

sudo redis-server stop
重啟:

sudo redis-server restart
redis-cli:使用客戶端連線伺服器

keys *:檢視所有的鍵

get name:獲取指定鍵的值

del name:刪除指定名稱的

Flask 框架的 狀態保持

flask 的狀態保持有兩種 一種是 cookie 另一種是 session。複數形式cookies。cookie最早是網景公司的前雇員 lou montulli 在1993年3 月的發明。cookie是由伺服器端生成,傳送給客戶端瀏覽器,瀏覽器會將 cookie 的key value 儲存,下次請...

django 使用者如何保持登入狀態

最不可行的方法就是在每乙個需要驗證使用者的檢視函式上加裝飾器 login required 每個認證函式都加的話比較繁瑣。可行的辦法是在訪問檢視函式前給他來乙個攔截 中介軟體就派上用場了。首先你需要定義一些不需要登入驗證的頁面集合。例如 無需登入介面 no login urls check regi...

Flask狀態保持

一 設定cookie 1 自定義響應 response make response flask設定cookie 設定cookie response.set cookie cookie名,value,max age 過期時間 單位 秒 返回響應 return response 2 獲取cookie值 ...