那些在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)
注:其中的ensure属性是为了解决中文编码问题
② 在django中有专门禁止转义的方式,只需在js函数用标签围住相关代码块即可:
<script> function test_fun() { {% autoescape off %} var json_obj = {{ dict_json }} {% endautoescape %} } </script>
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()
以上是关于那些在django开发中遇到的坑的主要内容,如果未能解决你的问题,请参考以下文章