Python Tech

Django用uploadify实现图片批量上传

分享一下在Django中使用uploadify——一个jQuery批量上传插件——的方法。github上的django-uploadify使用的是2.1.4版本,上传button只能使用图片,不能很方便的修改样式。本文针对的是uploadify 3.0.0版本。 uploadify可以结合Django自身的ImageField,或是配合easy_thumbnails等第三方app来使用。比较稳定,我在几个项目中处理批量上传都是用它,没有出现什么问题。但因为是用flash上传,在开发工具中监控不到network的动作,只能通过函数返回的错误信息来调试,所以比较麻烦,但调通一次就一劳永逸了。 不重要的CSS样式,可以跳过。

添加一个上传按钮,引入相应的js文件。uploadify 3.0中把swfobject.js和uploadify.js写到一个js文件里了。

Continue Reading
Front Python

在Django中使用LESS

上次振宇介绍duoshuo的开发,前台用的是backbone和LESS,backbone很久之前mentor就提到过,当时没弄懂,等下周休息的时候抽空学学,LESS倒是没什么学习成本。 LESS一种动态样式语言,简单来说就是对CSS语言的扩展,可以类比于coffeescript对javascript提炼。我因为javascript写习惯了,转到coffeescript效率不升反降。但用LESS重写了几个CSS文件,绝对是快了很多。因为LESS没有改变CSS的写法(唯一变化的是注释可以用//了),所以没有转换障碍。LESS拥有语言的特征,例如变量、函数、命名空间等,和只是样式表的CSS比起来灵活了许多。 在前台使用LESS的方式和coffeescript很像,也是载入一个js文件用来处理less后缀的文件,将其转换成CSS。

当然如果真这么处理,就和Django没什么关系了,我一般是在模板里直接用{%block style%}写CSS样式,所以如果能自定义一个templatetag,直接在里面写LESS那是最顺手的。

Continue Reading
Python Tech

Django复制记录的方法

最近的Django项目中有复制记录的需求。数据库里有一张名为Party的表,记录用户创建的party,现在要让用户能够复制一个新的party。本身非常简单的一个功能,但运行的时候出错了。我以为是复制过程出错,所以测试了一下Django中复制记录可能遇到的情况(后来发现是其他代码的逻辑出了问题),结果整理如下。 1.Reset pk 在Django中复制一条记录最简单的方法应该是先取出这条记录,将它的主键设置为None,然后再保存一次。

2.Keyword Arguments 如果某张表除了主键还有其他AutoField字段,就要换一种方式了,虽然也可以手动根据字段名将其指定为空,但直接遍历出字段名和相应的值,把其中的AutoField字段赋值为None会比较简单。

Continue Reading
Python Tech

Dotcloud架设Django的几个问题

几个月前写过一篇《在Dotcloud上架设Django网站》的文章,有读者将自己遇到的问题留在评论里,也有通过Gtalk联系我进行讨论的同学,在大家的帮助下解决了不少问题,现一并整理在这此。 关于404错误 这里说的是服务器(在Dotcloud上一般是nginx)的404错误,Django返回的404错误会有详细的提示,不在讨论范围内。服务器404错误通常——当然也有例外——是Dotcloud设置不当引起的。最常见的是三种情况: 1.目录结构错误 最简单,但可运行的目录结构如下,dmyz是Django项目目录,其他的是配置文件,他们都在dmyz-on-dotcloud之下。

Continue Reading
Python Tech

Django网站添加WebIM

这篇文章发表于2011年,已经过期。建议使用融云、个推等方案。 大多数站长的都遇到过这种情况:当你依靠自己网站的内容,辛辛苦苦的吸引了一群用户,他们渐渐的形成一个志同道合的小圈子,然后,他们注册了一个QQ群,从此以后你的网站不再有人光顾……为了避免这种悲剧不断重演,WebIM工具应运而生。用户访问这个网站时,能看到其他正在浏览这个网站的用户,彼此可以即时聊天。比如Ntalker,它可以添加好友,有群组功能,即时消息,但只有asp和php的SDK,于是我试着把它搬到了Django网站上,可以访问onlinegalgame.com查看效果。 Register 首先申请一个Ntalker的帐号,填写邮箱、用户名、网站程序等,如果你是用的是DZ之类的国内主流PHP论坛程序,它会提供现成的安装包。可惜我们用的是Django,没有现成的可用,所以网站程序要选择其他,然后下载SDK。话说这个SDK实在简陋得可以,只有几个txt文件。注册完成后进入管理页面,可以定制样式。

Continue Reading
Python Tech

Django利用API实现AJAX操作

Django的缺点之一,就是它不支持AJAX。好吧,我知道这么一说又会有一群人反驳:Django有各种模块可以提供AJAX功能;写一个XML的view来实现AJAX;整合pyjams就什么功能都有了云云。嘛,都可以,我这也只是分享一个可行的方案,并不是唯一的。如果这个方案正好适合你的项目,那直接拿去用不是更省时间吗? 首先说一下现在项目的情况,前端工程师想用AJAX的方式(依赖于jQuery),通过POST/GET/PUT请求,提交JSON/XML/YAML格式的数据给后台数据库暴露出的一个API地址,以实现对后台数据的操作。如果在view里写一个函数来做比较麻烦,所以使用tastypie直接根据定义的model生成一个API。 Install&Begin 需要安装django-tastpie, python-digest, python-dateutil, mimeparse。最近因为某些原因国外的https访问经常会受到影响,所以附上下载链接。当然能用pip/easy_install之类的命令来安装最好,已经给出了模块名,这里不再重复写一次命令了。 还是和以前一样,先以最快的方式先把tastypie跑起来:

Continue Reading
Python Tech

Django操作NOSQL(MongoDB)数据库

每一个Django工程师在接触NOSQL数据库的时候,肯定都会思考一个问题:在Django中不能像操作普通的关系型数据库(以下简称RDB)一样,操作NOSQL数据库吗?当然可以,Django工程师几乎不需要什么学习成本,就能使用NOSQL数据库——因为有mongoengine这个模块。 MongoEngine由Python语言写成,提供一个很类似Django ORM的API,本文介绍mongoengine的基本使用,主要是数据结构的定义和内联表单的使用。 Install & Begin 需要安装两个模块,pymongo和mongoengine pip install -U mongoengine pip install pymongo 现在我们以最快的方式利用Django对MongoDB进行操作,请在电脑旁放置一个秒表,理论上完成这些操作的时间不会超过3分钟: 新建一个应用,其中新建一个docs.py文件,代码如下:

Continue Reading
Tech

Django多语言翻译轻量解决方案

Django自带的多语言方案过于笨重,各种繁琐的设置之后,还要创建编辑po文件,编译成mo文件。Django本来就是一个很适合敏捷开发的框架,在翻译问题这么折腾就太不Pythonic了。本文介绍使用localeurl和mothertongue来实现多语言支持,通过localurl实现URL的语言前缀,通过mothertougue来翻译相应的字段。 Install 安装localeurl和mothertongue模块 pip install django-localeurl pip install django-mothertongue 在settings.py文件中开启i18n支持,app列表中添加localeurl和mothertongue

Continue Reading
Python Tech

在Dotcloud上架设Django网站[更新为0.4版]

最近在做的项目需要用到CouchDB和Django,国内没有空间能支持(VPS又麻烦又贵不在考虑范围内),在国外也很难找到。幸好oppih同学推荐了Dotcloud这个网站,现在正在测试期,可以免费申请,支持几乎所有主流的Web编程语言和数据库。而且dotcloud的设置非常简单,每次coding以后运行一条命令就能把整个网站部署上去了。看看这华丽的列表,难道会找不到让你倍感亲切的语言吗?XD Install 先安装dotcloud,可以在virtulenv里安装,以下是直接在真实环境中安装的方法: $ sudo easy_install dotcloud #也可以用pip Searching for dotcloud Reading http://pypi.python.org/simple/dotcloud/ …… Finished processing dependencies for dotcloud 记得在终端输入dotcloud命令测试是否安装成功。dotcloud也是利用ssh来连接服务器的,所以pulickey什么的自然要先设置好,作为github的常客相信大家这一步都是没问题的。 首先要创建一个命名空间(namespace),作为应用的名称,必须是唯一的。首次命令运行后会提示输入apikey,还很贴心的告诉了你要去哪找这个apikey。没看到?那我再友情提示一下:登录dotcloud点击上面的Setting就能找到了,是一串很长的加密字符:

Continue Reading
Python Tech

近期遇到的Django问题整理

错误提示: accounts.profile: Reverse query name for field ‘mentor’ clashes with related field ‘User.profile’. Add a related_name argument to the definition for ‘mentor’. django.db.utils.IntegrityError: accounts_profile.hire_date may not be NULL django.db.utils.IntegrityError:accounts_profile.mentor_id may not be NULL 出错代码:

Continue Reading