首页 > 代码库 > 那些在django开发中遇到的坑

那些在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 jsontest_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开发中遇到的坑