亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

django中怎么利用redis存儲session

發布時間:2021-07-20 16:12:21 來源:億速云 閱讀:150 作者:Leah 欄目:開發技術

這篇文章給大家介紹django中怎么利用redis存儲session,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

1 進入虛擬環境h2

 workon h2

2 創建一個項目test應用booktest

django-admin startproject test

3 創建應用booktest

進入項目test目錄,創建應用booktest,這個booktest應用目錄和manage.py在

同級目錄下

python manage.py startapp booktest

4 定義一個session1視圖來匹配url /booktest/session1/時,使用templates/booktest

目錄下的,模板session1.html來展示頁面.

1 視圖session1的代碼如下:

from django.shortcuts import render


def session1(request):

  uname = None

  context = {'uname':uname}

  return render(request, 'booktest/session1.html', context)

2 配置url

1 根級url配置文件test/urls.py代碼如下:

  from django.conf.urls import include, url
  from django.contrib import admin

  urlpatterns = [

    url(r'^admin/', include(admin.site.urls)),

    url(r'^booktest/', include('booktest.urls')),

  ]

2 應用booktest下面的url配置文件booktest/urls.py代碼如下:

  from django.conf.urls import url
  import views


  urlpatterns = [

    url(r'^session1/$', views.session1),

  ]

5 創建模板并進行設置路徑,在項目目錄test下面新建一個templates目錄作為模板目錄

,在templates目錄下面創建booktest目錄,在booktest目錄下面創建一個模板文件

session1.html,

1 模板session1.html里面的body代碼如下:

你好:{{uname}}
        <br>
        <a href="/booktest/session2/" rel="external nofollow" >登錄</a>
        <br>
        <a href="/booktest/session3/" rel="external nofollow" >退出</a>

2 對模板在settings.py進行路徑設置

  'DIRS': [os.path.join(BASE_DIR, 'templates')],

6 此時可以進行開發測試 ,終端輸入python manage.py runserver,按住ctrl鍵的同時

點擊 http://127.0.0.1:8000進入一個頁面,在瀏覽器輸入以下url http://127.0.0.1:8000/booktest/session1/ 回車后結果如下

你好:None 
登錄 
退出

7 創建點擊登錄鏈接對應的視圖session2及對url進行配置

1 視圖session2代碼如下:

def session2(request):

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

2 booktest/urls.py的應用url配置,添加如下代碼:

  url(r'^session2/$', views.session2),

3 在templates/booktest目錄下創建登錄表單對應的模板文件session2.html

body代碼如下:

    <form action="/booktest/session2_handle/" method="post">

        用戶名: <input type="text" name="uname">
        <br>
        <input type="submit" value="提交">
    </form>

8 點擊登錄鏈接,進入表單頁面,填寫用戶名提交,發現會以下報錯:

1  OperationalError at /booktest/session2_handle/
  no such table: django_session

解決辦法:在test/settins.py添加以下代碼,以保證session數據保存到redis

# SESSION_ENGINE = 'redis_sessions.session'
# SESSION_REDIS_HOST = 'localhost'
# SESSION_REDIS_PORT = '6379'
# SESSION_REDIS_DB = '0'
# SESSION_REDIS_PASSWORD = ''
# SESSION_REDIS_PREFIX = 'session'

使用django-admin startproject test默認會開啟session.



2 Forbidden (403)

CSRF verification failed. Request aborted.

解決方法:在test/settins.py里面把 MIDDLEWARE_CLASSES的值里面以下代碼注釋

     'django.middleware.csrf.CsrfViewMiddleware',

9 創建對表單提交處理的視圖session2_handle,并進行相關的url配置

1 session2_handle視圖代碼如下,要導入redirect

from django.shortcuts import redirect

def session2_handle(request):

  uname = request.POST['uname']

  request.session['myname'] = uname

  return redirect('/booktest/session1/')

  由于http協議是無狀態的,所以利用session來完成狀態保持,把表單里面

  用戶名輸入的值賦值給類字典對象request.session里面的鍵 'myname'

修改視圖session2對應的代碼,把session類字典里面的鍵賦值給uname,使用

get方法可以避免uname = request.session['maname']在點擊退出時報錯.

KeyError at /booktest/session1/
  'myname'

  uname = request.session.get('myname', '未登錄')

2 booktest應用下的視圖session2_handel對應的url配置如下

url(r'^session2_handle/$', views.session2_handle),

10 創建點擊退出鏈接對應的視圖session3,并對相關的url進行配置

1 視圖session3代碼如下,作用刪除session回話,并重定向到/booktest/session1/

  def session3(request):

    del request.session['myname']

    return redirect('/booktest/session1/')

2 應用下視圖session3對應的url配置如下:

  url(r'^session3', views.session3)

11 終端輸入python manage.py runserver 進行開發測試

1 當輸入url是http://127.0.0.1:8000/booktest/session1/時 ,顯示如下

  你好:未登錄 
  登錄 
  退出

2 點擊登錄鏈接,進入到表單頁面http://127.0.0.1:8000/booktest/session2/

  用戶名:
  提交

3 輸入用戶名ff,點擊提交按鈕,則重定向到

 http://127.0.0.1:8000/booktest/session1/

  你好:ff
  登錄 
  退出

4 點擊退出鏈接,也重定向到/booktest/session1/對應的頁面,同時刪除會話

  你好:未登錄 
  登錄 
  退出

5 在redis觀察session類字典里面的鍵值對

 sudo service redis-server start  

 sudo ps ajx|grep redis

 redis-cli

 keys *   查看所有的鍵

 get 'myname' 查看鍵myname對應值,

 get mcp20n5r2lcbzb1rqjw2mpqe2lakjnpc 

 查看該鍵對應的值如下,拿到在線base64進行解碼,即可

  "NzI4MzA2MmJlY2UxOWI2YWFlNjc2ZWZjMTY3NDE0OTJiMWFlMzgyNTp7Im15bmFtZSI6ImZmIn0="

  解碼后7283062bece19b6aae676efc16741492b1ae3825:{"myname":"ff"}

  由此可見,可以使用redis來存儲session,可以實現http狀態保持.

關于django中怎么利用redis存儲session就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宿州市| 新余市| 镇赉县| 娄底市| 廉江市| 桑植县| 泰来县| 游戏| 杭锦后旗| 苏尼特左旗| 湘潭市| 大方县| 邹城市| 通城县| 精河县| 南岸区| 石楼县| 吴堡县| 太谷县| 高唐县| 九龙城区| 响水县| 杂多县| 芜湖市| 广州市| 固安县| 金溪县| 广宁县| 正安县| 定结县| 三台县| 西林县| 四川省| 卢氏县| 沂源县| 仙居县| 大安市| 福安市| 昌图县| 曲水县| 武义县|