那些在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()

时间: 2024-10-08 10:55:47

那些在django开发中遇到的坑的相关文章

django开发中利用 缓存文件 进行页面缓存

首先我们先来了解下浏览器的缓存 浏览器缓存机制 Cache-control策略 Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据.只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires. 还是上面那个请求,web服务器返回的Cache-Control头的值为max-age=300,即5分钟(和上面的Expires时间一致,这个不是必须的). Last-Mo

iOS开发中遇到的坑 韩俊强的博客( 草稿)

从事iOS开发有些年月了,从最开始的磕磕绊绊,不知所措,到现在的遇到困难都能快速做出最佳方案处理,中间经历了不可或缺的痛苦.在项目开发中,本人有用印象笔记记录的习惯,所以很多重复出现的坑,很快迎刃而解,而不在同一个地方摔倒两次.为此,特意总结了一下开发中经常遇到的坑,有些可能和你形成共鸣,有些在你看来或许是小儿科,不喜勿喷. A valid provisioning profile for this executable was not found. 解决问题所在:发布证书无法运行在真机上!!!

【EasyUI总结】EasyUI开发中遇到的坑

普遍: 1.easyui在书写键值对的时候要注意是否要加引号,在需要加引号的地方不加则无法渲染: datagrid数据网格: 1.datagrid默认请求方式是post,如果要使用分页功能pagination,则需要把请求方式method设为get: 2.分页功能的pageSize必须是pageList数组中的其中一个数字,否则会出现url传递的rows=NaN错误: 3.columns因为有可能做成复合列头,所以它本身是一个数组对象,格式[[],[]...],并且属性field必须和返回的数据

Python Django开发中XSS内容过滤问题的解决

from:http://stackoverflow.com/questions/699468/python-html-sanitizer-scrubber-filter 通过下面这个代码就可以把内容过滤成干净的HTML内容,说明,这个代码来自上面Stackoverflow的回答 Use lxml.html.clean! It's VERY easy! from lxml.html.clean import clean_html print clean_html(html) <html> <

小程序开发中的一些坑和技巧

前言 最近公司要开发一款电商小程序,匆忙看了一遍文档就开始干活了.整体开发体验个人感觉不太好,特别是如果之前习惯了Vue开发,突然去开发小程序,感觉很鸡肋.以下是我在开发中遇到的一些问题以及解决方法的总结,仅供参考 引入iconfont 在小程序中引入字体图标要比web麻烦一些,简单说需要三步: 下载iconfont,把iconfont.css复制到iconfont.wxss,在app.wxss中引入 查看iconfont在unicode模式下的在线链接,替换iconfont.wxss中的链接为

记录在一次前后端分离的项目开发中遇到的坑

问题如下图: 在一次实际的项目开发中,我负责前端开发,使用的是vue+axios,后台使用的是php,由于我们的开发环境处于不同的域名和端口下, 所以出现了跨域问题,当然php服务端 可以直接解决这个问题,但是后端设置之后,前端每次都会先发出options请求,然后再post请求, 这说白了,就是每个接口请求两次.我们来分析下原因: 出于安全考虑,并不是所有域名访问后端服务都可以.其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get.p

[Django]Django开发中的日志输出

开发环境:Ubuntu16.04+Django 1.11.9+Python2.7 一:使用自定义函数输出日志到log文件: import time def print_log(log): file_obj = open('/tmp/filename.log', 'a+') log_time = time.strftime( '[%Y-%m-%d %H:%M:%S]', time.localtime( time.time())) # 转化时间格式 file_obj.write("%s\n"

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

前面一篇文章说到为了省事,而且在Authoring guide中的workflow composite 里就说,为了让效率更高,最好让脚本支持Cookdown.然后我的脚本就返回多个Property bags. 为了支持cookdown,我设计了一个自定义datasource,定义如下,简单的来说就是定期执行前面文章中说到的powershell 脚本,这个脚本输出多个Property bags ,为了复用module,我加了一个conditionDetection,使用正则表达式对propert

TFS扩展开发中遇到的坑

本码农最近开发一个VS扩展,其中有些功能涉及到文件的签出.我们公司用的是TFS,遇到了一些奇特的现象,将解决过程记录如下. 一.明明在线的连接却Offline属性等于True public static Workspace GetWorkspace(string slnDir) { var projectCollections = new List<RegisteredProjectCollection>((RegisteredTfsConnections.GetProjectCollecti