Python后台开发Django会话控制的实现


Posted in Python onApril 15, 2019

页面跳转

页面跳转的url中必须在最后会自动添加【\】,所以在urls.py的路由表中需要对应添加【\】

from django.shortcuts import redirect #导入
return redirect("admin/") #本地页面跳转
return redirect("https://www.cnblogs.com/dongxiaodong/") #其他网站跳转

本地跳转需要参考urls.py的路由表

urlpatterns = [
  path('admin/', admin.site.urls),
  path("dong/",views.homex),#添加URL对应关系
]

Cookie

设置 cookie

# 本地页面跳转
from django.shortcuts import redirect # 导入
retx = redirect("dong/")
# 返回文件,并匹配值
from django.shortcuts import render #导入
retx= render(requestx, "loginx.html",{"dongkk1":"替换值1","dongkk2":"替换值2"}) 
#返回字符串
from django.shortcuts import HttpResponse
retx=HttpResponse("东小东【dongxiaodong】")
#设置cookie
retx.set_cookie("dname", "dongxiaodong")
retx.set_cookie("dname2", "dongxiaodongxx",max_age=100)#设置超时时间,单位为秒

return retx

获取cookie

dnamex=requestx.COOKIES.get("dname")

删除

设置cookie的超时时间为过去时间即可

Cookie加密

retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字符串(密文)") #cookie通过密文加密
dnamex3 = requestx.get_signed_cookie("dong3", salt="对应设置cookie时的密文") # 获取cookie

Session

依赖于cookie的sessionid的随机字符串,默认超时时间为浏览器不退出情况下的两周或者浏览器退出就立即失效

设置

requestx.session["dongss"]="dongxiaodongsss"
requestx.session.set_expiry(60*60)#设置超时时间,单位为秒

获取

dnamex = requestx.session["dongss"]
dnamex = requestx.session.get("dongss")#无该键时程序不会报错
ssid = requestx.session.session_key #得到sessionid,值与cookie保存的相同

删除

del requestx.session["dongss"]
requestx.session.clear() #清空所有session

相关配置(setting.py)

SESSION_COOKIE_NAME="sessionid"     # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH="/"         # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None       # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False      # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True      # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600       # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False  # 是否关闭浏览器使得Session过期(默认)
# 是否每次请求都保存Session,默认修改之后才保存(默认)
#如果SESSION_SAVE_EVERY_REQUEST = True时,可以配合requestx.session.set_expiry(60*60),实现无操作一分钟后页面session清除,页面失效
SESSION_SAVE_EVERY_REQUEST = False

中间件

所有的请求都会先进入中间件处理,执行完所有中间件(MIDDLEWARE = [ ])才会进入urls.py进行路由,然后进入对应的APP的views.py中执行逻辑处理,中间件可以获取到请求的任意数据,可以做一些IP黑名单等处理

CSR保护

Post提交数据时,Django自动会进行CSR验证,在POST提交数据端需要提交一条随机字符串,服务器会匹配其的内容

设置是否需要全局csr保护

全局设置:

需要在setting.py设置MIDDLEWARE = [ ],

如果注释【'django.middleware.csrf.CsrfViewMiddleware',】则表示不用验证,反之

部分设置(优先级高):

在APP对应views.py下添加函数装饰器即可实现

from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_protect #强制添加保护
def xx1(requestx):
  pass
@csrf_exempt  #强制取消保护
def xx2(requestx):
  pass

Form表单里的post请求:

<form action="" method="post">
  {% csrf_token %}
  <input type="text" name="xx">
  <input type="submit" value="提交了">
</form>

Ajax里的post请求,需要获取cookie的csrf值,并以请求头的方式发送到服务器

headers:{"X-CSRFtoken":$.cookie("csrftoken")},

添加中间件

在工程下建立任意名字的文件夹,然后在文件夹中建立任意名字的python文件,如在工程同名目录下建立ruledong.py文件:

from django.utils.deprecation import MiddlewareMixin
#自定义中间件1
class Dong1(MiddlewareMixin):
  def process_request(self,requestx):
    print("dong1111111")
    print("你的设备基本信息:", requestx.environ.get("HTTP_USER_AGENT", "w"))
    print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w"))
#自定义中间件2
class Dong2(MiddlewareMixin):
  def process_request(self,requestx):
    print("dong22222222")
    if requestx.GET.get("idx") != "4":
      # 返回字符串,以此为终点,中断所有
      from django.shortcuts import HttpResponse
      return HttpResponse("东小东【请求失败】")

在setting的MIDDLEWARE = [ ]的最后添加,添加规则为前面的先被执行

'dongjg.ruledong.Dong1',
'dongjg.ruledong.Dong2',

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python制作最美应用的爬虫
Oct 28 Python
Python中方法链的使用方法
Feb 23 Python
python简单实现获取当前时间
Aug 27 Python
Python创建xml文件示例
Mar 22 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
详解python--模拟轮盘抽奖游戏
Apr 12 Python
python全栈知识点总结
Jul 01 Python
Python中的单下划线和双下划线使用场景详解
Sep 09 Python
Pycharm+Python工程,引用子模块的实现
Mar 09 Python
Python 自由定制表格的实现示例
Mar 20 Python
python 给图像添加透明度(alpha通道)
Apr 09 Python
关于Python中进度条的六个实用技巧分享
Apr 05 Python
浅析Python 实现一个自动化翻译和替换的工具
Apr 14 #Python
提升Python程序性能的7个习惯
Apr 14 #Python
Python根据当前日期取去年同星期日期
Apr 14 #Python
Python实现的微信支付方式总结【三种方式】
Apr 13 #Python
Python实现合并excel表格的方法分析
Apr 13 #Python
Python Image模块基本图像处理操作小结
Apr 13 #Python
python使用pymongo操作mongo的完整步骤
Apr 13 #Python
You might like
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
PHP自带ZIP压缩、解压缩类ZipArchiv使用指南
2015/03/03 PHP
PHP模板解析类实例
2015/07/09 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
Javascript事件实例详解
2013/11/06 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
javascript实现动态显示颜色块的报表效果
2017/04/10 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
JavaScript实用代码小技巧
2018/08/23 Javascript
JS实现简易贪吃蛇游戏
2020/08/24 Javascript
python和pyqt实现360的CLable控件
2014/02/21 Python
Python中optparse模块使用浅析
2015/01/01 Python
介绍Python的Django框架中的静态资源管理器django-pipeline
2015/04/25 Python
Python中集合的内建函数和内建方法学习教程
2015/08/19 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
在python里从协程返回一个值的示例
2019/02/19 Python
Python操作qml对象过程详解
2019/09/26 Python
TensorFlow索引与切片的实现方法
2019/11/20 Python
python函数调用,循环,列表复制实例
2020/05/03 Python
Pygame的程序开始示例代码
2020/05/07 Python
美国玩具公司:U.S.Toy
2018/05/19 全球购物
Omio荷兰:预订火车、巴士和机票
2018/11/04 全球购物
军训自我鉴定怎么写
2014/02/13 职场文书
国培计划培训感言
2014/03/11 职场文书
建筑工地门卫岗位职责
2014/04/30 职场文书
运动会演讲稿100字
2014/08/25 职场文书
小学生纪念九一八事变演讲稿
2014/09/14 职场文书
教代会闭幕词
2015/01/28 职场文书
英文版辞职信
2015/02/28 职场文书
为自由献出你的心脏!「进击的巨人展 FINAL」2022年6月在台开展
2022/04/13 日漫
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android