首页 > 其他 > 详细

那些在django开发中遇到的坑

时间:2017-07-23 14:56:57      阅读:285      评论:0      收藏:0      [点我收藏+]

1. 关于csrf错误

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

django中自带了防止CSRF攻击的手段,在form表单的action属性中,GET时不需要CSRF认证,而POST时需要。

一般而言,有两种解决办法:

① 启用csrf认证

• 在settings.py中启用中间件django.middleware.csrf.CsrfViewMiddleware

• 在views.py的render_to_response中,用RequestContext代替默认的Context

• 在模板文件中的 form 表单内添加 {% csrf_token %} 

② 关闭csrf认证

• 注释掉django.middleware.csrf.CsrfViewMiddleware即可

2. 后台传列表或者字典给js函数

这里容易遇到两个难题,一是中文会显示成unicode形式,二是引号会被转义,使得js函数出错

① 无论是字典还是列表,传给js都可以用json来处理:

技术分享
import json
test_dict = {
    "weather": ["sun", "rainy", "windy"],
    "mood": ["happy", "sad"]
}

json_str = json.dumps(test_dict, ensure_ascii=False)
View Code

注:其中的ensure属性是为了解决中文编码问题

② 在django中有专门禁止转义的方式,只需在js函数用标签围住相关代码块即可:

技术分享
<script>
    function test_fun() {
        {% autoescape off %}
        var json_obj = {{ dict_json }}
        {% endautoescape %}
    }
</script>
View Code

 3. 文件上传与下载

进行文件上传的时候我遇到很多错误,以下是简单的总结:

• 在form中方法必须问POST

• 在form中要加入:enctype="multipart/form-data"

• 后台用name属性接受前端的文件:

技术分享
myfile = request.FILES.get("file_name", None)

if myfile != None:
    des_dir = "/home/me/path/filename"
    des_file = open(des_dir, wb+)
    
    for chunk in myfile.chunks():
        des_file.write(chunk)

    des_file.close()
View Code

 

那些在django开发中遇到的坑

原文:http://www.cnblogs.com/vachester/p/7224572.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!