django项目搭建及Session使用
django+session+中间件
一、使用命令行创建django项目
新增static文件夹和templates文件夹,static---用于存储静态文件,例如js、css、image、txt等文件,templates用于存储项目中需要使用的模板文件,例如html。
最终项目目录如下:

修改settings文件,新增:
注意在settings文件中的变量,必须全部用大写
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_DIRS = ( os.path.join(os.path.dirname(__file__), '../static/').replace('\\', '/'),)
===================================================================================================
TEMPLATES中指定路由检索 路径DIRS为:[BASE_DIR + "/templates", ]
--------------
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项设定项目依赖的存储介质,可以指定为文件、内存、数据库。这里我们采用默认的sqlite3数据库
=================================================================================
在INSTALLED_APPS中新增上面新建的app:commoncore
----------------
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可以分为内存缓存存储、文件存储、数据库存储。这里我们采用数据库存储。
django项目默认是开启session的,默认存储方式为:SESSION_ENGINE='django.contrib.sessions.backends.db'
(本地缓存:SESSION_ENGINE='django.contrib.sessions.backends.cache' 混合缓存:SESSION_ENGINE='django.contrib.sessions.backends.cached_db')
当然也可以是redis缓存:
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配置如下:
SESSION_COOKIE_SECURE = False
SESSION_COOKIE_HTTPONLY = True
SESSION_COOKIE_NAME = 'xxxx'
SEESION_EXPIRE_AT_BROWSER_CLOSE = True
SESSION_COOKIE_AGE = 18000
这里的设定的时间作用不大,可以直接在代码里指定时间:request.session.set_expiry(0) 参数0代表退出浏览器session即失效,单位均为毫秒
中间件MIDDLEWARE_CLASSES中查看是否有'django.contrib.sessions.middleware.SessionMiddleware' 没有的话添加即可
==========================================================================================================
这里我们已经设置好了django session的环境,我们需要使用django自带的模块处理session值
这里需要强调一点,用sqlite数据库存储session需要初始化下数据库,在manage.py文件所在目录下执行命令:
python manage.py makemigrations(python manage.py migrate)

打开sqlite,结构如下:

至此,session准备工作已经完成。但是需要注意的是session失效,只是时间上失效,其值还是存在库中,因此需要定期删除,也可以在代码中逻辑删除,具体代码如下:
# 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)
===============================================================================================================================
三、请求的中间件
安全认证、请求过滤以及session的初始值 我们可以在中间件中处理。
在djangocommon项目下,新增middlehttp.py文件,代码大致如下:
reload(sys)
sys.setdefaultencoding('utf-8') from django.shortcuts import render_to_response # process_request -------- 接受request之后确定view之前执行
# process_view 确定view之后 并且在view真正执行之前执行
# process_response view执行之后
# process_exception(self, request, exception) view抛出异常 class LoginRequiredMiddleware:
def process_request(self, request):
path = request.path_info.strip('/')
#这里写处理逻辑和请求控制
在settings文件中的中间件配置MIDDLEWARE_CLASSES中添加'djangocommon.middlehttp.LoginRequiredMiddleware' 如下:
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+中间件 项目搭建完成。前后端分离的项目,也可以以此为基础,通过webpack或cli 搭建 编译生成的templates及静态文件即可。
django项目搭建及Session使用的更多相关文章
- Django 项目搭建(ubuntu系统)
1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...
- Django项目搭建和配置总结
安装和创建虚拟环境 参考:linux系统下Python虚拟环境的安装和使用 安装Django包 先进入虚拟环境,在联网下执行: pip install django==1.8.7 1.8.7表示dja ...
- windows7下django项目搭建
参考视频教程 http://study.163.com/course/ http://www.bilibili.com/video/av8915600/ http://www.bilibil ...
- Django 项目搭建
django(mvt结构) 虚拟环境 创建虚拟环境 mkvirtualenv django_py3 -p python3 切换虚拟环境 wokeon 虚拟环境名称 删除虚拟环境 rmvirtualen ...
- 全栈开发系列学习2——django项目搭建
项目代码:http://yunpan.cn/cHajgT4HvgHqx (提取码:8350) 配置项目: 1. 首先确保你的机器安装了python和pip,这两种安装比较简单,这里就不说了. 2. 在 ...
- Django项目之cookie+session
原文:https://www.cnblogs.com/sss4/p/7071334.html HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览 ...
- Windows下Django项目搭建流程
1.创建虚拟环境 virtualenv test 2.进入虚拟环境 source ./项目名/Scripts/activate 3.创建项目 django-admin startproject 项目名 ...
- django项目搭建
参见https://www.imooc.com/video/13931 1.安装python,从官网python.org下载msi安装2.7,安装完后,输入python可以看到版本 2.djangop ...
- linux搭建django项目基本步骤
一 linux下django基本项目搭建流程:M model 用于与数据库交互V view 接受前台请求 调用model获取结果,调用T获取页面,返回给前台T template 接受view的要求 生 ...
随机推荐
- 7个去伪存真的JavaScript面试题
1.创建JavaScript对象的两种方法是什么? 这是一个非常简单的问题,如果你用过JavaScript的话.你至少得知道一种方法.但是,尽管如此,根据我的经验,也有很多自称是JavaScript程 ...
- mysql设置合适的索引长度
理想的索引: 相对于写操作来说,表查询很频繁的表建立索引 字段区分度高 长度小(合适的长度,不是越小越好) 尽量能够覆盖常用字段 这些条件综合起来才能够达到最优索引,本次我们着重聊一下建立合适长度的索 ...
- win7 + python2.7 安装scipy
问题: 直接pip install scipy将不能正确安装,缺少文件 方法: 下载 "scipy‑0.19.0‑cp27‑cp27m‑win_amd64.whl"[90多M] ...
- CSV 参数化
配置CSV Data Set Config 图 3 配置CSV Data Set Config Filename: 指保存信息的文件目录,可以相对或者绝对 ...
- java代码--------随机输出100个随机数,要求每行10个数
总结:不敢爱你么开口 package com.sads; ///实现随机输出100个数字,数字是0到9之间,每行输出10个 public class Wss { public static void ...
- 数据运算+-*/,比较运算符==!=,赋值运算,逻辑运算and,or,not,成员运算in,not in,身份运算is is not,位运算&|,运算符的优先级
取模就是返回余数. 取模的作用主要是来取奇偶数来用的,奇数干嘛,偶数干嘛. 比较运算符: 赋值运算: 逻辑运算: 赋值的时候可以多个变量同时赋值 成员运算: in就是在不在的意思. 身份运算: 位运算 ...
- Linux上面缺少rz和sz命令
一.centos系统没有自带rz/sz命令 yum install lrzsz 搞定! 二.对于经常使用Linux系统的人员来说,少不了将本地的文件上传到服务器或者从服务器上下载文件到本地,rz / ...
- hadoop Partiton中的字符串Hash函数改进
最近的MapReduce端的Partition根据map生成的Key来进行哈希,导致哈希出来的Reduce端处理任务数量非常不均匀,有些Reduce端处理的数据量非常小(几分钟就执行完成,而最后的pa ...
- linux 下查找文件或者内容常用命令
转自:http://www.cnblogs.com/sunleecn/archive/2011/11/01/2232210.html whereis <程序名称>查找软件的安装路径-b 只 ...
- 【洛谷】P1064 金明的预算方案(dp)
题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”.今 ...