那些在django开发中遇到的坑

Posted va_chester

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了那些在django开发中遇到的坑相关的知识,希望对你有一定的参考价值。

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开发中遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章

那些年video遇到的坑

那些SCOM 管理包开发中遇到的坑2–Multiple Property Bags

Python Django开发遇到的坑(版本不匹配)

vue-scroller的使用以及使用的那些坑

微信公众平台开发,那些走过的坑

那些年,我们用并行遇到的坑01