django bug 与陷阱
环境:ubuntu,python3.4
1.QueryDict 陷阱 :以下语句语句是取每行的头元素,其中line应该是一个列表。问题是,line在实际运行中已经不是列表,而变成了列表中的头元素。
错误: {key:line[0] for key,line in query_info.items() if len(line)>0}
list_info是django里面的QueryDict形式;
正常: {key:line[0] for key,line in dict(query_info).items() if len(line)>0}
完全正常。
原因:QueryDict 会将内容序列化(字符串化)
2.Session 陷阱:django的session虽然类似字典,但是,如果你直接赋值字典给它会出现丢失数据的状况。原因:请参考 https://docs.djangoproject.com/en/1.8/topics/http/sessions/
当你添加字典到session时候,初次添加会更新session,但是当后面修改字典里面内容时候,不会触发更新session,只更新字典本身,所以会出现字典中某个更新值丢失状况。
解决方法:在settings中设置以下代码,这样在每次request中修改,都会更新session信息。
SESSION_SAVE_EVERY_REQUEST=True
3.django国际化:
在国际化代码里面设置
LANGUAGE_CODE = 'zh-hans' 或者
LANGUAGE_CODE = 'zh-cn'
LANGUAGE_这里面有个问题是,如果你写zh_cn是没有错的,但是如果写zh_hans的话,就会出现莫名的错误,跟踪发现,django将zh-hans指向zh_Hans文件夹,而对于zh-cn指向zh_hans文件夹。在这里折磨很久。
另外,在django-admin makemessages -l zh_Hans,或者 django-admin makemessages -l zh_CN ,一定注意不能写成 zh-Hans,或者 zh-CN
4.支付宝的notify异步通知处理:
由于加入了csrf防护,支付宝在直接调用视图函数进入post处理的时候,由于没有csrf的信息,会被禁止访问,服务器反馈提示403错误。
解决方法:csrf_exempt装饰器可以单独使得视图函数忽略csrf,而对单独视图启动防护的装饰器:csrf_protect
5.django与js:
django中的模板变量js也可以使用的,但是如果这个js是单独的文件,这时候就不能辨识模板变量了。使用模板变量要么将其放在template中的script里面,要么就在template中赋值一个js变量,让js文件可以获取这个js变量。
6.django的session_cookie_name :session文件名在cookie中对应的key, 如果在多个服务中,配置相同的session_cookie_name,而且这个多个服务又使用相同的memcache,其实就是多个服务共享了session
7.django的 blocktrans _na,这是一个坑,我要翻译status变量,这个怎么也不翻译,终于在stackflow中找到答案:blocktrans is for translating the text around a variable, but it won't translate the variable itself.;也就是说这个只翻译文字,不翻译变量。坑坑坑!!!不说谁知道.
{% blocktrans with status=cdn_info.cdn_domain.status %}{{status}}{% endblocktrans %}
8.template 里面,如果模板变量中包含\n,需要escape,一般自动escape了,但是如果模板变量在js中,需要过滤器, escapejs
"{{ var|escapejs }}"
django bug 与陷阱的更多相关文章
- azure django bug
azure web app service azure web app service无法部署dhango网站 本地服务器测试代码 实际azure测试 django service 没有部署选项,需要 ...
- Linux Native Aio 异步AIO的研究
Linux Native Aio 异步AIO的研究 http://rango.swoole.com/archives/282 首先声明一下epoll+nonblock从宏观角度可以叫做全异步,但从微观 ...
- PHP最佳实践(译)
原文: PHP Best Practices-A short, practical guide for common and confusing PHP tasks 译者:youngsterxyf 最 ...
- 【Python】《大话设计模式》Python版代码实现
<大话设计模式>Python版代码实现 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼 ...
- 大话设计模式--Python
作者:五岳 出处:http://www.cnblogs.com/wuyuegb2312 上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一 ...
- 《大话设计模式》Python版代码实现
上一周把<大话设计模式>看完了,对面向对象技术有了新的理解,对于一个在C下写代码比较多.偶尔会用到一些脚本语言写脚本的人来说,很是开阔眼界.<大话设计模式>的代码使用C#写成的 ...
- django formset bug?
碰到了一个郁闷的问题,修改inlineformset时,全部删掉子表,再新增一行时,报错. 背景: 用django配合jq做动态表格,实现用js动态添加/删除行,并通过inlineformset更新到 ...
- django request bug
bug描述:django请求request接收数据时,如果参数中包含分号时,会导致分号后面的消息丢失. 比如前台js调用代码 $.post('/get_params', { "A" ...
- Django中关于MySQL的bug总结
bug one: You are trying to add a non-nullable field 'height' to person without a default; we can't d ...
随机推荐
- BMP格式详解
BMP格式详解 BMP文件格式详解(BMP file format) BMP文件格式,又称为Bitmap(位图)或是DIB(Device-Independent Device,设备无关位图),是Win ...
- Python三元运算和lambda表达式
一.三元运算 1.定义:三元运算是if-else 语句的快捷操作,也被称为条件运算. 2.结构: [on_true] if [expression] else [on_false] 3.示例: ...
- Centos 6.5 python 2.6.6 升级到 2.7
1.查看python的版本 [root@localhost ~]# python -V Python 2.6.6 2.安装python 2.7.3 [root@localhost ~]# yum in ...
- objc变量的获取
[objc变量的获取] C++成员变量通过偏移来寻找,速度极快.But Objc中的变量通过方法调用来寻找,方法首先根据变量名,找到ivar_t,然后在ivar_t对象中取出偏移,再用此偏移来取值(这 ...
- Springboot21 整合redis、利用redis实现消息队列
1 前提准备 1.1 创建一个springboot项目 技巧01:本博文基于springboot2.0创建 1.2 安装redis 1.2.1 linux版本 参考博文 1.2.2 windows版本 ...
- Opencv3 Mat对象构造函数与常用方法
构造函数 Mat() Mat(int rows,int cols,int type) Mat(Size size,int type) Mat(int rows,int cols,int type,co ...
- Reddit指南
一.简介 Reddit是网页新鲜事件和热点事件的源头,它也是互联网最有趣的地方和有高度组织的链接集中处. 二.指南 http://article.yeeyan.org/view/523415/45 ...
- 1.scala基础语法总结
Scala基础语法总结:Scala 与 Java 的最大区别是:Scala 语句末尾的分号 ; 是可选的.如果一行里写多个语句那么分号是需要的 val s = "菜鸟教程"; pr ...
- 怎样去阅读一份php源代码
一份好的源代码例如 dz的论坛,wind论坛,帝国cms,dedecms等,都具有自己的一套设计思路和设计模式,所以在看某个产品之前就要做好心理准备,可以把自己的经验和这些产品做对比,但千万别一直用自 ...
- Smarty3——内置函数
Table of Content {$var} {$append} {assign} {block} {call} {config_load} {debug} {extends} {for} {for ...