当前位置: 首页 > news >正文

柳南区新闻/郑州百度关键词seo

柳南区新闻,郑州百度关键词seo,ps毕业设计做网站界面,江苏省城乡建设网站1、Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误 CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站请求伪造的功能工作原理:客户端访问服务器端,在服务器端正常返回给客户端数据的时…
1、Django中CSRF中间件的工作原理及form表单提交需要添加{% csrf_token %}防止出现403错误
CSRF # 表示django全局发送post请求均需要字符串验证
功能:防止跨站请求伪造的功能
工作原理:客户端访问服务器端,在服务器端正常返回给客户端数据的时候,而外返回给客户端一段字符串,等到客户端下次访问服务器
端时,服务器端会到客户端查找先前返回的字符串,如果找到则继续,找不到就拒绝。
访问流程:客户端-》URL路由系统 - 》 CSRF -》视图函数
需要在客户端页面的post表单内添加:{% csrf_token %}
 全局生效:
  中间件 django.middleware.csrf.CsrfViewMiddleware
局部生效:
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
写法如下:
from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt
def index(request): # 这样表示此函数取消CSRF验证

2、Django中使用ajax做post提交防止出现403错误的方法
 

现在以ajax发送一个请求,注意get和post的区别,post会被forbidden,get不会,

 

url 文件

 
复制代码
from django.conf.urls import url
from django.contrib import adminfrom app01 import viewsurlpatterns = [url(r'^admin/', admin.site.urls),url(r'^login/', views.login),url(r'^ajax_send/', views.ajax_send),
]
复制代码
 

在views文件中,

 
def ajax_send(request):return HttpResponse("ok")
 

在前端页面,,

 
复制代码
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="{% static 'jquery-3.2.1.js' %}"></script></head>
<body><button>ajax发送</button></body><script>$("button").click(function () {$.ajax({url:"/ajax_send/",data:{"user":"gu"},type:"POST",  ----------如果以get请求是不会被forbidden,只有post请求会被forbidden,success:function (data) {alert(data)}})})</script></html>
复制代码
 

ajax的post请求会报错,forbidden

 
Forbidden (CSRF token missing or incorrect.): /ajax_send/
[10/Dec/2017 10:58:41] "POST /ajax_send/ HTTP/1.1" 403 2502
Forbidden (CSRF token missing or incorrect.): /ajax_send/
[10/Dec/2017 10:59:22] "POST /ajax_send/ HTTP/1.1" 403 2502
Forbidden (CSRF token missing or incorrect.): /ajax_send/
 

如果想要避免forbidden,

 

方法1:要在ajax发送请求前加上

 
$.ajaxSetup({
data:{csrfmiddlewaretoken:'{{ csrf_token }}'},
});

注意:{{ csrf_token }} ,是需要渲染的,不能脱离模板,所以是外部文件引入的话,不能执行,
 
复制代码
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><script src="{% static 'jquery-3.2.1.js' %}"></script></head>
<body><button>ajax发送</button></body><script>$("button").click(function () {$.ajaxSetup({data:{csrfmiddlewaretoken:'{{ csrf_token }}'},---------});$.ajax({url:"/ajax_send/",data:{"user":"gu"},type:"POST",success:function (data) {alert(data)}})})</script></html>
复制代码
 
 
 

方法2:在ajax发送请求是加上csrfmiddlewaretoken,的值,

 
复制代码
        $.ajax({url:"/ajax_send/",data:{"user":"gu","csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val()},-----与方法1的功能一样,
但这种方法可以作为一个外部文件引入,type:"POST",success:function (data) {alert(data)}})})
复制代码
 

-------

 

 

 

 
 
 

 方法3:修改header,

 

在views打印cookie可以得到csrftoken

 
复制代码
def index(request):print("cookie",request.COOKIES)#cookie {# 'csrftoken': 'AB9v1MGTbdpSGg3FaGCIiUxrKVR8zKSqgdGFDn5E0ADsJ2ST7N2zgW6KboQ8G31x',# 'sessionid': 'eexw5p38vky9qo38nf372dz5lj1br6xf'# }#cookie 是浏览器给的,return HttpResponse("index")
复制代码
 

 

 

需要先下载一个jquery.cookie.js插件文件,然后引用,

 
<script src="{% static 'jquery.cookie.js' %}"></script>

 
复制代码
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>{#    <script src="{% static 'jquery-3.2.1.js' %}"></script>#}<script src="{% static 'jquery.cookie.js' %}"></script></head>
<body>{#<form action="/login/" method="post">#}
{# csrf_token 在前端会渲染出一个input标签,是一组键值对,键是csrfmiddlewaretoken,值是随机字符串,会随着下面的input标签一起提交,只有这种形式发送post的请求才能被接收,#}
{##}
{#    {% csrf_token %}#}
{#    <p>用户名:{{ form_obj.user }}</p>#}
{#    <p>密  码:{{ form_obj.pwd }}</p>#}
{#    <input type="submit">#}
{##}
{#</form>#}<button>ajax发送</button></body><script>{#    $("button").click(function () {#}
{##}
{#        $.ajaxSetup({#}
{#            data:{csrfmiddlewaretoken:'{{ csrf_token }}'},#}
{#        });#}
{##}
{#        $.ajax({#}
{##}
{#            url:"/ajax_send/",#}
{#            data:{"user":"gu","csrfmiddlewaretoken":$("[name='csrfmiddlewaretoken']").val()},#}
{#            type:"POST",#}
{#            success:function (data) {#}
{#                alert(data)#}
{#            }#}
{##}
{#{)#}$('button').click(function () {$.ajax({url:"/ajax_send/",type:"post",headers:{"X_CSRFToken":$.cookie('csrftoken')},---------------success:function () {alert(123)}})
})</script></html>
复制代码
 
 
 

-----

 

input 标签的上传文件,

 

在前端页面

 
复制代码
{#发送文件的时候,要加上enctype ,是以块的方式发送文件,#}
<form action="/login/" method="post" enctype="multipart/form-data"><input type="file" name="fileobj"></form><button>ajax发送</button>
复制代码
 

在views文件中,获取文件,保存文件,

 
 
 
复制代码
def login(request):if request.method == "POST":print("post",request.POST.get("fileobj"))print("post",type(request.POST.get("fileobj")))print("===",request.FILES)fileobj = request.FILES.get("fileobj")#创建一个文件句柄,把文件存起来,f=open(fileobj.name,'wb')for i in fileobj.chunks():#按块存f.write(i)
复制代码
 
 

转载于:https://www.cnblogs.com/dushangguzhousuoli/p/10649756.html

http://www.jmfq.cn/news/4884229.html

相关文章:

  • 公司网站建设实施方案/新闻发稿平台
  • 网站 如何做 同时在线/东莞搜索优化
  • 青岛做网站建设哪家好/销售新人怎么找客户
  • 明空网络做网站好不好/百度搜索推广技巧
  • 海宁住房和城乡规划建设局网站/株洲seo优化首选
  • 有没有做宠物的网站/优化服务
  • 网页好看的网站设计/网络营销有什么特点
  • 学做网站需要懂什么软件/济南网站制作
  • 网站不被搜索引擎收录吗/北京百度seo排名点击软件
  • 茂名放心营销网站开发/关键词优化排名软件流量词
  • 行业网站导航源码/信息流优化师
  • 定制网站建设公司费用/seo排名官网
  • 网站首页轮播怎么做/树枝seo
  • 郑州餐饮网站建设公司排名/广告推广渠道有哪些
  • 设计网站的结构时下面哪个方法不好/软文范例300字
  • 网络营销师培训学校/seo工具在线访问
  • 百度多久收录一次网站/汕头疫情最新消息
  • 可以让外国人做问卷调查的网站/网站关键词百度自然排名优化
  • wordpress手机端/黑帽seo优化软件
  • 扬中网站建设价格/厦门关键词优化企业
  • 百度做网站的费用/药品销售推广方案
  • 政府网站官网/新闻今日要闻
  • 做网站如何与腾讯合作/信息流优化师发展前景
  • 棋牌源码之家/百度seo不正当竞争秒收
  • ueditor是做网站的吗/谷歌seo站内优化
  • 想开网站怎样做/seo蜘蛛池
  • 爱站seo工具包/精准营销平台
  • 学校网站模板 html/可以进入任何网站的浏览器
  • 嵊州哪里可以做网站/建网站用什么工具
  • html网站登录界面模板下载/怎么做起泡胶