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的*args和**kwargs用法
Nov 01 Python
python中zip和unzip数据的方法
May 27 Python
简单掌握Python的Collections模块中counter结构的用法
Jul 07 Python
Python pass详细介绍及实例代码
Nov 24 Python
python遍历一个目录,输出所有的文件名的实例
Apr 23 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
Python3实现获取图片文字里中文的方法分析
Dec 13 Python
python实现诗歌游戏(类继承)
Feb 26 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
python实现将中文日期转换为数字日期
Jul 14 Python
python 调用js的四种方式
Apr 11 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
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
php面向对象程序设计入门教程
2019/06/22 PHP
JavaScript 设计模式 安全沙箱模式
2010/09/24 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
简单的Jquery全选功能
2013/11/07 Javascript
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
jQuery中removeData()方法用法实例
2014/12/27 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
nodejs中模块定义实例详解
2017/03/18 NodeJs
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
JS实现求5的阶乘示例
2019/01/21 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue-cli3 取消eslint校验代码的解决办法
2020/01/16 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python编程中归并排序算法的实现步骤详解
2016/05/04 Python
Python中模块string.py详解
2017/03/12 Python
在python中安装basemap的教程
2018/09/20 Python
微信公众号token验证失败解决方案
2019/07/22 Python
深入了解NumPy 高级索引
2020/07/24 Python
使用pandas读取表格数据并进行单行数据拼接的详细教程
2021/03/03 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
大学生职业生涯规划方案
2014/01/03 职场文书
市场部经理岗位职责
2014/04/10 职场文书
成都人事代理协议书
2014/10/25 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
村党组织公开承诺书
2015/04/30 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
Python基础之元编程知识总结
2021/05/23 Python