django之状态保持-使用redis存储session的例子


Posted in Python onJuly 28, 2019

关于redis安装,pip install django-redis-sessions,按照提示进行安装相关的服务端

和客户端.

django版本1.8.2, Python版本2.7.12

1 进入虚拟环境h1

workon h1

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的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python获取远程图片大小和尺寸的方法
Mar 26 Python
Windows环境下python环境安装使用图文教程
Mar 13 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
python遍历文件夹找出文件夹后缀为py的文件方法
Oct 21 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
Jun 21 Python
python字符串的拼接方法总结
Nov 18 Python
Python找出列表中出现次数最多的元素三种方式
Feb 24 Python
Django models文件模型变更错误解决
May 11 Python
解决keras使用cov1D函数的输入问题
Jun 29 Python
Python抖音快手代码舞(字符舞)的实现方法
Feb 07 Python
Django和Ueditor自定义存储上传文件的文件名
Feb 25 Python
django 通过URL访问上传的文件方法
Jul 28 #Python
django使用admin站点上传图片的实例
Jul 28 #Python
Python中变量的输入输出实例代码详解
Jul 28 #Python
对django中foreignkey的简单使用详解
Jul 28 #Python
解决django 新增加用户信息出现错误的问题
Jul 28 #Python
Django使用Channels实现WebSocket的方法
Jul 28 #Python
Django实现web端tailf日志文件功能及实例详解
Jul 28 #Python
You might like
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
2019/09/09 PHP
基于MVC3方式实现下拉列表联动(JQuery)
2013/09/02 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
用nodejs实现PHP的print_r函数代码
2014/03/14 NodeJs
跟我学习javascript的undefined与null
2015/11/17 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
Javascript 实现匿名递归的实例代码
2017/05/25 Javascript
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
mpvue小程序循环动画开启暂停的实现方法
2019/05/15 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
微信小程序自定义顶部组件customHeader的示例代码
2020/06/03 Javascript
[02:14]DOTA2英雄基础教程 修补匠
2013/12/23 DOTA
[01:46]辉夜杯—打造中国DOTA新格局
2015/12/25 DOTA
[37:35]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第二局
2016/02/25 DOTA
Python赋值语句后逗号的作用分析
2015/06/08 Python
Python按行读取文件的实现方法【小文件和大文件读取】
2016/09/19 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
python 正确保留多位小数的实例
2018/07/16 Python
python八皇后问题的解决方法
2018/09/27 Python
python中的for循环
2018/09/28 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Pycharm如何自动生成头文件注释
2020/11/14 Python
详解canvas在圆弧周围绘制文本的两种写法
2018/05/22 HTML / CSS
实例讲解使用SVG制作loading加载动画的方法
2016/04/05 HTML / CSS
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
老师给学生的表扬信
2014/01/17 职场文书
2014年中秋节活动总结
2014/08/29 职场文书
2015年科协工作总结
2015/05/19 职场文书
在职证明书模板
2015/06/15 职场文书
八年级数学教学反思
2016/02/17 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书