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在校内发人人网状态(人人网看状态)
Feb 19 Python
python自定义类并使用的方法
May 07 Python
Python用于学习重要算法的模块pygorithm实例浅析
Aug 16 Python
Django框架设置cookies与获取cookies操作详解
May 27 Python
Python matplotlib绘制饼状图功能示例
Sep 10 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
pytorch中的上采样以及各种反操作,求逆操作详解
Jan 03 Python
解决tensorboard多个events文件显示紊乱的问题
Feb 15 Python
解决Jupyter无法导入已安装的 module问题
Apr 17 Python
基于python实现复制文件并重命名
Sep 16 Python
Python collections.deque双边队列原理详解
Oct 05 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
利用PHP生成静态HTML文档的原理
2012/10/29 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
php实现生成带二维码图片并强制下载功能
2018/02/24 PHP
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
dojo 之基础篇
2007/03/24 Javascript
SWFObject Flash js调用类
2008/07/08 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
2015/11/03 Javascript
H5移动端适配 Flexible方案
2016/10/24 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
React 无状态组件(Stateless Component) 与高阶组件
2018/08/14 Javascript
js实现json数组分组合并操作示例
2019/02/12 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
vue+moment实现倒计时效果
2019/08/26 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
python机器学习之神经网络(三)
2017/12/20 Python
使用Python实现租车计费系统的两种方法
2018/09/29 Python
Python 占位符的使用方法详解
2019/07/10 Python
Numpy将二维数组添加到空数组的实现
2019/12/05 Python
OpenCV python sklearn随机超参数搜索的实现
2020/01/17 Python
Python迭代器Iterable判断方法解析
2020/03/16 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
用Python 爬取猫眼电影数据分析《无名之辈》
2020/07/24 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
电工技术比武方案
2014/05/11 职场文书
学校就业推荐信范文
2014/05/19 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
python spilt()分隔字符串的实现示例
2021/05/21 Python
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL