Django2.0-过程1.0-Ajax和CSRF

  1. Django模板中的过滤器和标签们:http://lishiguang.iteye.com/blog/1332529/

  2. Django:ajax https://www.cnblogs.com/seven-007/p/8034043.html; https://blog.csdn.net/alvine008/article/details/50233339?utm_source=blogxgwz0;
    Python3:json https://www.jb51.net/article/139498.htm

  3. CSRF攻击:https://www.ibm.com/developerworks/cn/web/1102_niugang_csrf/;感觉还是IBM大佬厉害啊

  4. Ajax POST CSRF防御 别人的博文:https://www.cnblogs.com/seven-007/p/8034043.html
    官方文档:https://docs.djangoproject.com/en/2.0/ref/csrf/#ajax 当然按照官方的来啊,来龙去脉说的比较详细!

  5. 简单的一个Ajax POST
    在这里插入图片描述在这里插入图片描述Django后端接收到的是 b'func_name=*****&age=2333 显然,发送和收到的格式都不是JOSN格式的字符串啊! 前端发送应该是用 data: JOSN.stringify({***:xxxx}),后端用json.loads将bytes转化为Python Dict类型
    Better One
    在这里插入图片描述
    error:特别适用于调试,用来发现ajax为何发送失败,比如xhr.setRequestHeader中多了一个空格

  6. 简单总结下ajax,就是上图了。今天遇到的问题是,使用ajax发送post请求,代替<button type="submit">自动发送post请求,就是为了在前端加一个$.blockUI()防止表单重复提交,所以采用ajax的方式,估计还有其他前端办法来防止表单重复提交。等失败时直接使用return ResponseRedirect('/login'),然后success中采用innerHTML=data,有个问题是网页的URL不会变化,导致后续ajax请求中url(不带’http://‘简写是基于当前地址栏url然后再追加)出错【查阅url、django slash补充】,造成localhost/login/login,地址不匹配,所以如果是ajax请求,Django后端采用 return HttpResponse(’/login’, text’ ,None) 直接返回text格式的数据。
    RuntimeError: You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your form to point to 127.0.0.1/login/ (note the trailing slash), or set APPEND_SLASH=False in your Django settings.
    你在后端返回的url中,以’/‘开头就意味着从根路径开始,不以’/'开头,location.href就会追加到当前url后面,导致404,location还有其他很多方法,比如replace.

  7. 官方文档处理ajax post请求的方式:在模板先加 {% csrf_token %}(生成的界面中就带有下图),在这里插入图片描述然后模板即前端中,使用js或者jQuery插件获取csrftoken(不用buttom submit时),检查该方法是否POST等修改数据的方法和是否跨域访问的,ajax设置一个httpHeader:X_CSRFTOKEN:csrftoken, ajax默认的contenType就是"application/x-www-form-urlencoded"而对于POST请求,并不是直接把用户名和密码加在URL上的,get请求是那样。http://www.w3school.com.cn/jquery/ajax_ajax.asp 不论是ajax的POST data还是表单POST的<button type='submit'>后端都可以直接request.POST.get('username'),
    username,form表单中的name为’username’的那个input的值,ajax中的data中键值为’username’的值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值