Python后台开发Django(会话控制)
页面跳转
页面跳转的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") != "":
# 返回字符串,以此为终点,中断所有
from django.shortcuts import HttpResponse
return HttpResponse("东小东【请求失败】")
在setting的MIDDLEWARE = [ ]的最后添加,添加规则为前面的先被执行
'dongjg.ruledong.Dong1',
'dongjg.ruledong.Dong2',
Python后台开发Django(会话控制)的更多相关文章
- Python后台开发Django(数据库)
如果使用pymysql,则可以在view中直接import pymysql进行操作,与原操作无区别 Django数据库框架支持 sqlite3, MySQL, PostgreSQL等数据库,只需要在s ...
- Python后台开发Django(启动)
Django版本为:2.1.7 Python的web框架,MTV思想 MVC Model(模板文件,数据库操作) view(视图模板文件 )controller(业务处理) MTV Model(模 ...
- Python后台开发Django( 模板 与 值匹配 )
模板文件(templates) 在setting.py中,设置模板存放位置 在APP中view的使用 from django.shortcuts import render #导入 def homex ...
- python web开发——django学习(一)第一个连接mysql数据库django网站运行成功
1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message 4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表 6.运行 ...
- Python Web开发:Django+BootStrap实现简单的博客项目
创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...
- Python自动化开发 - Django基础
本节内容 一.什么是web框架 二.MVC和MTV视图 三.Django基本命令 四.路由配置系统 五.编写视图 六.Template 七.ORM 一.什么是web框架 对于所有的web应用,本质上其 ...
- Python自动化开发 - Django【进阶篇】
Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行 ...
- Python自动化开发 - Django【基础篇】
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
- python后台架构Django教程——manage.py命令
一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...
随机推荐
- 你不知道的JavaScript--Item13 理解 prototype, getPrototypeOf 和__proto__
1.深入理解prototype, getPrototypeOf和_ proto _ prototype,getPropertyOf和 _ proto _ 是三个用来访问prototype的方法.它们的 ...
- linxu安装SNMP
http://wiki.jiankongbao.com/doku.php/%E6%96%87%E6%A1%A3:%E5%AE%89%E5%85%A8%E6%8C%87%E5%BC%95#linux_s ...
- JAVA经典算法40题(原题+分析)之原题
JAVA经典算法40题(上) [程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? [程 ...
- mac下安装Maven和配置环境变量
1.下载maven包: 下载链接:
- Go性能优化小结
1 内存优化 1.1 小对象合并成结构体一次分配,减少内存分配次数 做过C/C++的同学可能知道,小对象在堆上频繁地申请释放,会造成内存碎片(有的叫空洞),导致分配大的对象时无法申请到连续的内存空间, ...
- BZOJ_3669_[Noi2014]魔法森林_LCT
BZOJ_3669_[Noi2014]魔法森林_LCT Description 为了得到书法大家的真传,小E同学下定决心去拜访住在魔法森林中的隐士.魔法森林可以被看成一个包含个N节点M条边的无向图,节 ...
- nginx + tomcat 反向代理
简单的配置:# my test java+nginx project server { listen ; server_name localhost; root /home/user/Desktop/ ...
- oracle改造常见问题
一. to_char: 将数值型或者日期型转化为字符型 (string) 日期到字符操作 select to_char(sysdate,'yyyy-MM-dd HH24:mi:ss') from du ...
- 【SAP S/4 1511之变】:主数据之变
本博文主要讲述SAP S/4 1511版本的变化,主要是跟ECC版本的对比.变化还是挺多的,相当一部分是后勤,但绝大部分还是财务成本这一块.作为从事S/4版本的从业者,了解1511版本的变化还是挺有必 ...
- SpringBoot(三)_controller的使用
针对controller 中 如何使用注解进行解析 @RestController 返回数据类型为 Json 字符串,特别适合我们给其他系统提供接口时使用. @RequestMapping (1) 不 ...