页面跳转的 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',
来源: https://www.cnblogs.com/dongxiaodong/p/10496876.html