页面跳转的url中必须在最后会自动添加【\】,因此在urls.py的路由表中须要对应添加【\】html
from django.shortcuts import redirect #导入 return redirect("admin/") #本地页面跳转 return redirect("https://www.cnblogs.com/dongxiaodong/") #其余网站跳转
本地跳转须要参考urls.py的路由表python
urlpatterns = [ path('admin/', admin.site.urls), path("dong/",views.homex),#添加URL对应关系 ]
设置cookiedjango
1 # 本地页面跳转 2 from django.shortcuts import redirect # 导入 3 retx = redirect("dong/") 4 # 返回文件,并匹配值 5 from django.shortcuts import render #导入 6 retx= render(requestx, "loginx.html",{"dongkk1":"替换值1","dongkk2":"替换值2"}) 7 #返回字符串 8 from django.shortcuts import HttpResponse 9 retx=HttpResponse("东小东【dongxiaodong】") 10 #设置cookie 11 retx.set_cookie("dname", "dongxiaodong") 12 retx.set_cookie("dname2", "dongxiaodongxx",max_age=100)#设置超时时间,单位为秒 13 14 return retx
获取cookie浏览器
dnamex=requestx.COOKIES.get("dname")
删除服务器
设置cookie的超时时间为过去时间便可cookie
Cookie加密session
retx.set_signed_cookie("dong3","dongxiaodong33",salt="任意字符串(密文)") #cookie经过密文加密 dnamex3 = requestx.get_signed_cookie("dong3", salt="对应设置cookie时的密文") # 获取cookie
依赖于cookie的sessionid的随机字符串,默认超时时间为浏览器不退出状况下的两周或者浏览器退出就当即失效函数
设置post
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)
1 SESSION_COOKIE_NAME="sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认) 2 SESSION_COOKIE_PATH="/" # Session的cookie保存的路径(默认) 3 SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认) 4 SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认) 5 SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认) 6 SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认) 7 SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过时(默认) 8 # 是否每次请求都保存Session,默认修改以后才保存(默认) 9 #若是SESSION_SAVE_EVERY_REQUEST = True时,能够配合requestx.session.set_expiry(60*60),实现无操做一分钟后页面session清除,页面失效 10 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文件:
1 from django.utils.deprecation import MiddlewareMixin 2 #自定义中间件1 3 class Dong1(MiddlewareMixin): 4 def process_request(self,requestx): 5 print("dong1111111") 6 print("你的设备基本信息:", requestx.environ.get("HTTP_USER_AGENT", "w")) 7 print("你的IP地址:", requestx.environ.get("REMOTE_ADDR", "w")) 8 #自定义中间件2 9 class Dong2(MiddlewareMixin): 10 def process_request(self,requestx): 11 print("dong22222222") 12 if requestx.GET.get("idx") != "4": 13 # 返回字符串,以此为终点,中断全部 14 from django.shortcuts import HttpResponse 15 return HttpResponse("东小东【请求失败】")
在setting的MIDDLEWARE = [ ]的最后添加,添加规则为前面的先被执行
'dongjg.ruledong.Dong1', 'dongjg.ruledong.Dong2',