激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - django項目搭建與Session使用詳解

django項目搭建與Session使用詳解

2021-04-06 00:18love_xiaohuihui Python

這篇文章主要給大家介紹了關(guān)于django項目搭建與Session使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

Django完全支持也匿名會話,簡單說就是使用跨網(wǎng)頁之間可以進(jìn)行通訊,比如顯示用戶名,用戶是否已經(jīng)發(fā)表評論。session框架讓你存儲和獲取訪問者的數(shù)據(jù)信息,這些信息保存在服務(wù)器上(默認(rèn)是數(shù)據(jù)庫中),以 cookies 的方式發(fā)送和獲取一個包含 session ID的值,并不是用cookies傳遞數(shù)據(jù)本身。

本文給大家詳細(xì)介紹了關(guān)于django項目搭建Session使用的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧

django+session+中間件

一、使用命令行創(chuàng)建django項目

在指定路徑下創(chuàng)建django項目

?
1
django-admin startproject djangocommon

在項目目錄下 創(chuàng)建app

?
1
2
cd djangocommon
python manage.py startapp commoncore(django-admin startapp commoncore)

django項目搭建與Session使用詳解

新增static文件夾和templates文件夾,static---用于存儲靜態(tài)文件,例如js、css、image、txt等文件,templates用于存儲項目中需要使用的模板文件,例如html。

最終項目目錄如下:

django項目搭建與Session使用詳解

修改settings文件,新增:

注意在settings文件中的變量,必須全部用大寫

?
1
2
3
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join(os.path.dirname(__file__), '../static/').replace('\\', '/'),)

===================================================================================================

TEMPLATES中指定路由檢索 路徑DIRS為:[BASE_DIR + "/templates", ]

--------------

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR + "/templates", ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

================================================================================

DATABASES項設(shè)定項目依賴的存儲介質(zhì),可以指定為文件、內(nèi)存、數(shù)據(jù)庫。這里我們采用默認(rèn)的sqlite3數(shù)據(jù)庫

=================================================================================

在INSTALLED_APPS中新增上面新建的app:commoncore

----------------

?
1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'commoncore',
]

=============================================================

在djangocommon項目下新增py 命名為view,在這里寫后臺請求的處理。并在urls文件中配置路由

至此,一個小型的django項目已搭建完成

二、配置session

django的session可以分為內(nèi)存緩存存儲、文件存儲、數(shù)據(jù)庫存儲。這里我們采用數(shù)據(jù)庫存儲。

django項目默認(rèn)是開啟session的,默認(rèn)存儲方式為:SESSION_ENGINE='django.contrib.sessions.backends.db'
(本地緩存:SESSION_ENGINE='django.contrib.sessions.backends.cache' 混合緩存:SESSION_ENGINE='django.contrib.sessions.backends.cached_db'

當(dāng)然也可以是redis緩存:

?
1
2
3
4
CACHES = {"default": {"BACKEND": "django_redis.cache.RedisCache", "LOCATION": "redis://ip:端口/",
"OPTIONS": {"CLIENT_CLASS": "django_redis.client.DefaultClient", }}}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "default"

=======================================================================================================================================

我們這里使用django自帶的sqlite存儲session,settings配置如下:

?
1
2
3
4
5
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'xxxx'
SEESION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 18000

這里的設(shè)定的時間作用不大,可以直接在代碼里指定時間:request.session.set_expiry(0) 參數(shù)0代表退出瀏覽器session即失效,單位均為毫秒

中間件MIDDLEWARE_CLASSES中查看是否有'django.contrib.sessions.middleware.SessionMiddleware' 沒有的話添加即可

==========================================================================================================

這里我們已經(jīng)設(shè)置好了django session的環(huán)境,我們需要使用django自帶的模塊處理session值

這里需要強(qiáng)調(diào)一點(diǎn),用sqlite數(shù)據(jù)庫存儲session需要初始化下數(shù)據(jù)庫,在manage.py文件所在目錄下執(zhí)行命令:

?
1
python manage.py makemigrations(python manage.py migrate)

django項目搭建與Session使用詳解

打開sqlite,結(jié)構(gòu)如下:

django項目搭建與Session使用詳解

至此,session準(zhǔn)備工作已經(jīng)完成。但是需要注意的是session失效,只是時間上失效,其值還是存在庫中,因此需要定期刪除,也可以在代碼中邏輯刪除,具體代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# coding=utf-8
import sys
 
reload(sys)
sys.setdefaultencoding('utf-8')
import datetime
from django.contrib.sessions.backends.db import SessionStore
from django.contrib.sessions.models import Session
 
 
def delsession(key):
if key is None:
return
store = SessionStore()
store.delete(key)
count = Session.objects.all().count()
if count > 20:
nowtime = datetime.datetime.now()
outdatesession = Session.objects.filter(expire_date__lt=nowtime)
for item in outdatesession:
store.delete(item.session_key)
 
 
def delovertimesession():
store = SessionStore()
count = Session.objects.all().count()
if count > 20:
nowtime = datetime.datetime.now()
outdatesession = Session.objects.filter(expire_date__lt=nowtime)
for item in outdatesession:
store.delete(item.session_key)

===============================================================================================================================

三、請求的中間件

安全認(rèn)證、請求過濾以及session的初始值 我們可以在中間件中處理。

在djangocommon項目下,新增middlehttp.py文件,代碼大致如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
reload(sys)
sys.setdefaultencoding('utf-8')
 
from django.shortcuts import render_to_response
 
 
# process_request -------- 接受request之后確定view之前執(zhí)行
# process_view 確定view之后 并且在view真正執(zhí)行之前執(zhí)行
# process_response view執(zhí)行之后
# process_exception(self, request, exception) view拋出異常
 
class LoginRequiredMiddleware:
 def process_request(self, request):
  path = request.path_info.strip('/')
  #這里寫處理邏輯和請求控制

在settings文件中的中間件配置MIDDLEWARE_CLASSES中添加'djangocommon.middlehttp.LoginRequiredMiddleware' 如下:

?
1
2
3
4
5
6
7
8
9
10
MIDDLEWARE_CLASSES = [
 'django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',   'djangocommon.middlehttp.LoginRequiredMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

注意順序,必須在SessionMiddleware之后。

=========================================================================================================================

至此,一個完整的django+session+中間件 項目搭建完成。前后端分離的項目,也可以以此為基礎(chǔ),通過webpack或cli 搭建 編譯生成的templates及靜態(tài)文件即可。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:http://www.cnblogs.com/lovenethui/p/9760808.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日韩精品中文字幕在线观看 | 免费黄色一级网站 | 视频一区二区三区在线播放 | 久久新网址 | 免费亚洲视频在线观看 | 免费一级毛片在线播放视频老 | 久久精品视频一区二区 | 久久久日韩精品一区二区 | 国产免费片 | 羞羞答答影院 | 日本在线视频免费 | 欧美一区二区网站 | 成年人小视频在线观看 | 在线免费观看欧美 | 亚洲一区成人 | 18欧美性xxxx极品hd | caoporn国产一区二区 | 久久久av亚洲男天堂 | 一本色道久久99精品综合蜜臀 | 久久久国产精品免费观看 | 九九热免费精品视频 | 九九热精 | 黄色毛片观看 | 成人午夜免费看 | 欧美成人做爰高潮片免费视频 | 欧美精品一区二区三区在线播放 | 国产欧美亚洲精品a | 意大利av在线 | 精品xxxx户外露出视频 | 国产成人高清在线观看 | 欧洲黄视频 | 黄色片在线播放 | 精彩视频一区 | 天堂成人国产精品一区 | 色天使中文字幕 | 久久久久亚洲美女啪啪 | 国产69久久久 | 国产91一区二区三区 | 亚洲国产精品500在线观看 | 福利在线小视频 | 精品一区二区三区中文字幕 |