随笔分类 - Django
摘要:mysql可以指定每一个表的存储引擎,甚至也可以支持每个字段采用不同的字符编码。为了减少乱码方面的麻烦,需要在配置文件(settings.py)中指定默认的编码格式。类似的配置如下:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'venus&
阅读全文
摘要:django默认的系统配置中,session模块已经启用。其后端采用默认的数据库引擎,也就是session数据会被存储到数据库中。在有些应用中,为了保障事务的一致性,需要在视图中明确声明或者在全站的配置中启用事物机制。此种情况下,在某些特殊的场景中产生一个冲突,造成session的不同现象。例如:在异步上传文件时,为了给用户明确的提示。我们希望上传大文件的过程中,显示一个进度条,明确提示用户上传的进度。一般的做法是,将原来的表单提交到一个隐含的iframe中,再用一个定时器任务,从服务器获取上传进度后,更新进度条。假设处理文件上传的视图叫做upload_view,获取状态的视图叫做progre
阅读全文
摘要:上一篇文章中讲到的方法,在某些时候不好用。比如我在本机调试链接到facebook的程序,开始没有问题,后来突然就不工作了。得到如下提示:<urlopen error [Errno -2] Name or service not known经检查发现出现大的问题仍然是DNS解析。而我本机测试twitter没有问题的原因,也是因为其DNS未被污染。开始时Facebook正常估计也是因为凑巧当时其并未受到污染所致。经过搜索罚下如下方案,经测试工作正常:http://www.talesofacoldadmin.com/2012/11/13/proxying-dns-with-python.htm
阅读全文
摘要:Django-social-auth是一个很好的集成第三方认证的库,其支持的库种类非常多,包括常用的Facebook,twitter,google,msn,甚至还包括weibo。如果期望能够快速的集成这些账户的话,这个库是一个很好的开始。因为众所周知的原因,在国内是没有办法访问facebook等服务的,很自然的我们希望可以通过代理的方式来让这个库工作正常。经过简单分析,这个库在底层的数据通讯方面,使用urllib2。入手点就在让urllib2支持代理了。在Python的原始库中,urllib2仅仅支持http代理,而我们使用SSH之类的用的是sock5。经搜索发现已有网友提供了方案:http:
阅读全文
摘要:实验证明,必须为Release版本(settings.py中设置DEBUG=False)的Django网站提供两个错误处理模板,404.html和500.html。否则有些功能会工作不正常。这两个文件需要放到网站根目录的templates中。
阅读全文
摘要:有时候我们想在ModelForm之上增加几个字定义的字段,或者期望在一个页面上让用户同时填写两个表(model)的内容——比如某些1:1关系中,希望用户同时输入两个模型数据,后台同步保存。通过分析modelform的代码,其实可以非常轻松的达到我们的目标。简单地说,这涉及到字段定义、数据初始化和数据保存三个层面的内容。字段定义与普通的form的字段定义一样,新增的自定义控件也会自动加入到form的数据验证规则,这没什么可说的;数据初始化的部分,只需要在form的"初始化函数"中通过initial赋值即可: def __init__(self,data=None, files
阅读全文
摘要:前文(Django分多此渲染(输出)同一个form)提到一个集成bootstratp_toolkit的方案,实际使用过程中发现其性能非常之差。开始怀疑是因为render_fields字段筛选导致,经排查问题不在这里,后来怀疑是模板渲染的性能,但直接使用bootstrap_toolkit并未表现出性能问题。仔细研究了as_bootstrap的源代码,上文提到的方法在使用这个方法是逐个字段调用,每次调用都会进行一次模板的查找与编译过程因而性能就受到了严重的映像;而通常在模板上我们是将一个form传递进去,只做一次模板查找与编译,因而就不会产生问题。修改方法也非常简单,只要缓存Template对象,
阅读全文
摘要:Django中在模板上通过{{form}}即自动可生成表单内容,提供了非常便捷和强大的功能。这种功能虽然强大,但却不能满足很多的需求,比如一个表单的内容非常多,在页面上希望通过Tab将信息"分门别类"的隔开,Django内置的功能就无能为力了。好在Django是开源产品,可以通过修改其代码,为其增加自定义输出字段的能力,即可很方便的达到目的。主要修改form的.as_table,as_ul,as_p等方法,为其增加一个待渲染字段列表即可。为了确保Django后续平滑升级,一般我们不会直接修改Django代码,借助Python的多重继承机制,可以非常轻松的为Django打上这
阅读全文
摘要:如果只是修改widget的默认属性可以采用如下方法:from django import formsfrom django.contrib.auth.models import User class UserForm(forms.ModelForm): def __init__(self, *args, **kwargs): super(UserForm, self).__init__(*args, **kwargs) # change a widget attribute: self.fields['user_permissions'].wid...
阅读全文
摘要:Django的体系结构模式为MVT(Model、View、Template),与传统的MVC在理论层面基本一致:两者之间M的概念是一致的;MVT的View与MVC的Controller相对应;MVT的Template与MVC的View相对应。但Django更进一步,通过自身的基础结构对MVT的使用在某些层面具有一定的强制性,如在T中不能编写逻辑(所谓的{%if%}等都是普通标签而不是编程语言);也因为Django的命名和提供的一些基础结构与常规的(其他领域)的规范不尽相同,导致在某些方面会给人带来很多迷惑.比如,业务逻辑一般可以写入View层,或者是Model中,或者更具迷惑性的Manager
阅读全文
摘要:只要需求没有冻结,数据库基本上也不可能冻结。Django虽然提供模型向数据库的同步机制,但因为其只是一次性同步,当模型有所变化时其内置的同步功能就无能为力了。还好有很多开源的工具可以弥补Django在这方面的不足。south(http://south.aeracode.org/)就是其中之一。其简要的使用方法如下:按照标准的Python包的方式安装好之后,在Django配置文件(settings.py)中将south添加到INSTALLED_APPS中,并执行manager.py syncdb完成south所需数据表的安装。使用manage.py schemamigration <app
阅读全文
摘要:Django是一个动态内容开发框架。其主要擅长的网站动态内容部分,然而一个网站必然要包含css、js等静态内容,这些内容的管理当然就不是Django所擅长的。在真是系统中,我们一般会被这些资源交给更擅长此道的Web Server或其他专用服务器。然而在开发过程中,毕竟Django连开发服务器都已经准备好了,只需简单的运行manager.py runserver即可,如果还要配置一个Web Server来配合的话,显得就太不专业了。对此Django提供的方案是,在开发期间由Django托管(由django.views.static.serve视图负责)。每个app都有可能有自己的静态文件,按照高
阅读全文
摘要:Django默认提供了很好的跨域攻击保护(csrf)机制,采用常规的方法,我们几乎感觉不到这个机制的存在(好吧,还是需要在form中添加{% csrf_token %})。但是当我们期望能够以Ajax的方式向服务器提交表单的时候,问题就来了。常规的HTTP GET方法被认为是安全的,不会做csrf检查,而POST、PUT、DELETE等方法被认为是有潜在危险的。因为我们没有按照Django的要求在请求头/内容域中包含X-CSRFToken及相应的正确的值。Django会直接返回一个Http 403的错误回来。解决的办法其实也很简单,就是按照要求提供这个值即可。在Django文档中有非常详细的描
阅读全文
摘要:与其说Django-cms是一个内容管理系统,不如说其实一个基础的开发平台。与常规的cms不同,Django-cms并不是一个开箱即用的产品,也没有提供很多内置的模板和主题,让用户快速的搭建一个网站出来。相反,要想使用Django-cms要求用户必须熟悉Django,其搭建的的过程很"像"一个是用Django开发的过程。本文根据一天的文档阅读心得总结而来。从结构上来说Django-cms包含以下内容:1、一个基础框架:多站点支持——好吧,其实是Django的多语言支持。没个页面可以有不同语言的版本。Page管理。后台可视化支持,包括Page结构和Page中插件(Plugin
阅读全文

浙公网安备 33010602011771号