django+session+中间件

一、使用命令行创建django项目

在指定路径下创建django项目
django-admin startproject djangocommon
 
在项目目录下  创建app
cd djangocommon
python manage.py startapp commoncore(django-admin startapp commoncore)

新增static文件夹和templates文件夹,static---用于存储静态文件,例如js、css、image、txt等文件,templates用于存储项目中需要使用的模板文件,例如html。

最终项目目录如下:

修改settings文件,新增:

注意在settings文件中的变量,必须全部用大写

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

===================================================================================================
TEMPLATES中指定路由检索 路径DIRS为:[BASE_DIR + "/templates", ]
--------------

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

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

  1. DATABASES项设定项目依赖的存储介质,可以指定为文件、内存、数据库。这里我们采用默认的sqlite3数据库
    =================================================================================
    INSTALLED_APPS中新增上面新建的appcommoncore
    ----------------
  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'commoncore',
  9. ]

=============================================================
在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配置如下:

  1. SESSION_COOKIE_SECURE = False
  2. SESSION_COOKIE_HTTPONLY = True
  3. SESSION_COOKIE_NAME = 'xxxx'
  4. SEESION_EXPIRE_AT_BROWSER_CLOSE = True
  5. 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)

  1. 打开sqlite,结构如下:

至此,session准备工作已经完成。但是需要注意的是session失效,只是时间上失效,其值还是存在库中,因此需要定期删除,也可以在代码中逻辑删除,具体代码如下:

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

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

三、请求的中间件

安全认证、请求过滤以及session的初始值 我们可以在中间件中处理。

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

  1. reload(sys)
  2. sys.setdefaultencoding('utf-8')
  3.  
  4. from django.shortcuts import render_to_response
  5.  
  6. # process_request -------- 接受request之后确定view之前执行
  7. # process_view 确定view之后 并且在view真正执行之前执行
  8. # process_response view执行之后
  9. # process_exception(self, request, exception) view抛出异常
  10.  
  11. class LoginRequiredMiddleware:
  12. def process_request(self, request):
  13. path = request.path_info.strip('/')
  14. #这里写处理逻辑和请求控制

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

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

注意顺序,必须在SessionMiddleware之后。

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

至此,一个完整的django+session+中间件 项目搭建完成。前后端分离的项目,也可以以此为基础,通过webpack或cli 搭建 编译生成的templates及静态文件即可。

django项目搭建及Session使用的更多相关文章

  1. Django 项目搭建(ubuntu系统)

    1 环境搭建 sudo apt-get install python3-pip 安装pip3 sudo pip3 install virtualenv 安装虚拟环境,这里展示virtualenv vi ...

  2. Django项目搭建和配置总结

    安装和创建虚拟环境 参考:linux系统下Python虚拟环境的安装和使用 安装Django包 先进入虚拟环境,在联网下执行: pip install django==1.8.7 1.8.7表示dja ...

  3. windows7下django项目搭建

    参考视频教程 http://study.163.com/course/    http://www.bilibili.com/video/av8915600/   http://www.bilibil ...

  4. Django 项目搭建

    django(mvt结构) 虚拟环境 创建虚拟环境 mkvirtualenv django_py3 -p python3 切换虚拟环境 wokeon 虚拟环境名称 删除虚拟环境 rmvirtualen ...

  5. 全栈开发系列学习2——django项目搭建

    项目代码:http://yunpan.cn/cHajgT4HvgHqx (提取码:8350) 配置项目: 1. 首先确保你的机器安装了python和pip,这两种安装比较简单,这里就不说了. 2. 在 ...

  6. Django项目之cookie+session

    原文:https://www.cnblogs.com/sss4/p/7071334.html HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览 ...

  7. Windows下Django项目搭建流程

    1.创建虚拟环境 virtualenv test 2.进入虚拟环境 source ./项目名/Scripts/activate 3.创建项目 django-admin startproject 项目名 ...

  8. django项目搭建

    参见https://www.imooc.com/video/13931 1.安装python,从官网python.org下载msi安装2.7,安装完后,输入python可以看到版本 2.djangop ...

  9. linux搭建django项目基本步骤

    一 linux下django基本项目搭建流程:M model 用于与数据库交互V view 接受前台请求 调用model获取结果,调用T获取页面,返回给前台T template 接受view的要求 生 ...

随机推荐

  1. 以图文解锁 HTTPS原理***

    我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B: 如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现: A发给B的hello消息包,即使被中间 ...

  2. Sentinel-dashboard

    Dashboard控制台 sentinel-dashboard是一个单独的应用,通过spring-boot进行启动,主要提供一个轻量级的控制台,它提供机器发现.单机资源实时监控.集群资源汇总,以及规则 ...

  3. Springboot监控之一:SpringBoot四大神器之Actuator之2--springboot健康检查

    Health 信息是从 ApplicationContext 中所有的 HealthIndicator 的 Bean 中收集的, Spring Boot 内置了一些 HealthIndicator. ...

  4. Tomcat常用设置

    远程Dbug调试: TOMCAT配置(只需设置一次): 1.在服务器的$TOMCAT_HOME/bin/catalina.sh中增加: CATALINA_OPTS="-server -Xde ...

  5. Ubuntu12.10下Python(cx_Oracle)访问Oracle解决方案

    第一步:下载安装cx_Oracle 下载地址:http://sourceforge.net/projects/cx-oracle/files/5.1.2/,下载cx_Oracle的rmp安装文件,注意 ...

  6. Codeforces-591C题解

    一.题目链接 http://codeforces.com/problemset/problem/591/C 二.题意 给定一个只含数字0和1的数组,通过如下方式,变成不再变化的01组合,最少需要操作几 ...

  7. 【语音识别】Microsoft Speech Platform 自学笔记2 环境要求与安装过程

    笔记人:又吹风 时 间:2012/12/16 主要内容:Microsoft Speech Platform的环境要求与安装过程. 上次也说过了,当前Microsoft Speech Platform最 ...

  8. 【UVA】11464 Even Parity(枚举子集)

    题目 传送门:QWQ 分析 标准的套路题. 枚举第一行,接着根据第一行递推下面的行. 时间复杂度$ O(2^n \times n^2) $ 代码 #include <bits/stdc++.h& ...

  9. java 字符串排序

    http://bbs.csdn.net/topics/280032929 大可不需要那样复杂了!(一)如果要排序的为字符串,如:String sortStr = "ACDFE";  ...

  10. 记:cloudstack--gluster主存储上的一个文件损坏导致SSVM启动失败

    cloudstack的系统vm(ssvm不停的重建失败).- 1.cloudstack-management 的关键日志 这行 cannot read header 'mnt.......':Inva ...