Tag Archives: django

Autoforms使用指南

Autoforms是Jeff开源的一个基于Django的自定义表单引擎,可用于调查、投票、信息收集甚至是整合至工作流程引擎和PAAS平台当中。目前AutoForms主要用于支持珠三角地区几个技术社区的线下活动报名、反馈收集等。jeff在本站上也搭建了一个autoforms的实例,可以免费为大家提供简单的在线表单服务,有兴趣者,可联系我开通帐号。最近对AutoForms的使用反馈越来越多,所以更新会相对频繁一些,嗯,有人使用就有动力呀! AutoForms(今天下午发布最新版本为0.4)的主要特性: 支持14种字段类型13种html输入控件(包括日期选择组件),可以快速定制大部份常见的表单。 保存用户提交的表单数据,并向表单作者展示,同时提供数据导出功能。 支持表单继承,需要周期性地使用相同的表单时,一点也不费力。 用户填写表单后,邮件通知表单作者。 提供了丰富的API,容易与其他应用程序作整合。 关于AutoForms的安装请参考github上面的说明,本文主要的内容是指导表单用户如何使用Autoforms。 登录 首先登录至管理界面(http://f.jeffkit.info/admin/ 帐号为 form/form),会看到Autoforms的应用,该应用有两个模型可供管理: 表单管理提供快速创建、修改表单;预览表单,查看表单数据以及生成某入式表单代表等功能。 表单域管理则提供对某些表单域的高级设置功能。 创建表单 下面我通过创建一个“AutoForm用户反馈表单”为例,示范一下如何使用AutoForms来创建表单。 首先,我们点击表单管理的增加按钮开始,打开增加表单的页面,表单上半部份是表单的基本信息,下半部分是定义该表单所包括的字段(表单域)。下图是填写AutoForm用户反馈表单的示例数据: 补充说明一下上面页面一些容易迷惑的地方: 父表单:如果指定某个表单为父表单,那么所创建的表单将自动获得父表单的所有字段。 启用:如果处于勾选状态,则表单可供填写,否则表单只能查看而不能提交。 表单域里的组件:组件是指在页面上展示表单时使用的HTML控件,如你的字段是密码类的,你最好选择“密码输入框”组件。一般情况下,使用默认的组件已经足够。 接下来,点击”保存并继续编辑”按钮,这时在页面的面上角出现了一些快捷按钮: 预览,让您预览所创建的表单的展示效果。 数据,用户通过表单提交数据后,表单作者可以在此看到所有提交的数据并可将数据导出为CSV格式。 嵌入,autoforms允许用户通过嵌入页面的方式展现在第三方网站上面,点击该按钮可获得嵌入的HTML代码。 历史,Django的内置的数据为更记录。 在网站上查看,点击后打开填写表单页面。 预览表单 我们先点击预览按钮,看看刚才创建的表单的效果如何!结果有点意外,“评分”和“在哪了解到autoforms”两个字段光秃秃的! 其实并不意外,我们在表单是创建了两个选项/多选值类型的字段,而我们还没有为这两个字段提供选项数据,所以它们看上去是光秃秃的,那么下一步,我们就是要为选项类型的字段加上选项数据。 编辑字段 返回管理首页,点击表单域进入表单域列表页面,在这里可以找到刚在才创建表单时生成的几个字段,点击“在哪了解到autoforms”进入该字段的编辑页面,页面由一个展开区域和(字段基础信息),三个隐藏区域(高级设置、选项、错误信息)组成。高级设置暂略过不理,选项区就是我们要为选项类型的字段提供数据的地方,而错误信息则允许我们自定议错误提示内容。 下面我要为“在哪了解到autoforms”字段提供一些选项数据,如下图这般添加一些数据: 保存字段的修改,再依法泡制一下“评分”字段,一个表单就完成了。最终结果就是下面的表单了,各位使用过autoforms的同学,来这里给我一些建议吧。 收集数据 表单定义好了,是时候发出去给大家填写了,收集上一段时间后,可以通过“数据”页面来查看已经收集好的数据,如果你愿意,可以点击右上角的导出按钮,以CVS的格式导出数据: 好了,AutoForms的基本使用就这么一些,如果你是开发人员,对API感兴趣,欢迎阅读代码,如果你有些空闲时间,希望掺和一些开源项目,AutoForms也欢迎你加入到开发者行列。

Posted in 技术 | Tagged , , , | 7 Comments

AutoForms介绍–我在12月小沙龙的讲稿

提前剧透了。明天的技术小沙龙我主讲的是自己的一个开源小工具,AutoForms,一个Django自定义表单引擎,受公司某项目启发,自己在业余时间重新实现一套更好的。 下面直接去片: Autoforms View more presentations from jeffkit. 我承认,PPT里面的安装方式还没支持,最早明天上午把它实现一下。 另外,PPT里出现的made in china要翻译成“山寨版”。 有兴趣的,不妨明天寻觅咖啡见。

Posted in 技术, 生活 | Tagged , , , | 2 Comments

Pinax的意义

某天在研究pypy的时候无意中看到了pinax,了解之下,觉得pinax真的很聪明,跟我正打算做的事情很像!她是一个基于Django的基础应用–我这里讲基础应用的意思是她既不是开发框架,又不是一开箱即用的成熟应用(当然你不介意那简陋的界面的话,它是开箱即用的),而是介于两者之间的东西。她集成了很多第三方的Django app,这使得她自己内置了很多SNS网站、公司内部网站所需要的基础功能,你要做一个SNS网站,拿来改改界面就好,你要做公司内网应用,拿来改改界面也行了。 初次接触时,还没有安装来研究,就屁颠屁颠地跟老潘说这是个好东西(我对云和企业内部办公系统有些想法,经常和老潘交流),老潘一看说颇有Plone的影子了。后来安装下来看了看,离plone所谓的应用服务器那个级别还差远了,pinax可以看作是一系列的Project template(项目模板)。接下来给出几种模板的应用运行时的截图,大家看看就明白了。至于更深入的探究不是今天要说的,有兴趣的同学直接试一试更有意义。 图一:basic_project,最简单的应用模板。   图二:内部应用的模板,提供了几种内部应用用到的功能,如任务、wiki等。   图三:Pinax提供的最复杂的一个应用模板,SNS应用,不少SNS网站是基于这个来开发的。 Pinax给开发者带来什么?一、没有技术上的转变,该用Django还是使用Django那套东西。二、提供了一套基础网页模板和Tab布局。这个虽然简单,但十分实用,要换套皮肤,把现成的扔给美工MM略作修改即可,无需从0开始。三、Pinax提供的最复杂的应用模板是一个SNS应用,实际上是一个完全可以马上投入使用的产品。Pinax说,我们已经为您提供所有需要的,你要做的只是让你的网站看起来与众不同。 题外话:一、Django变得越来越强大的同时也变得复杂,要全部掌握Django的内容门槛不低,但这不妨碍初学者快速上手。二、有人说,django变得越来越像zope,但实际上django的门槛恐怕没有zope的20%吧,虽然django渐渐肥胖,但新增的很多东西都是可选的,并且是在web开发过程中必需去解决的问题。大家看到新出一个web framework很清爽简单,不过走着瞧吧,到最后,他不是整合其他第三方的基础模块就是自己继续砌砖,直到又有ORM、Template、Form、中间件、UrlRoute、I18N,I10N等等等等,大家殊途同归,区别不过是OEM或Fullstack而已。三、Django社区很活跃,看看第三方的app就知道,以至于有人可以全使用第三方的应用(没有自己的Model)搭起一个博客,以及现在这个pinax。 四、web应用开发领域,可重用的东西太多,于是有了框架,而技术之上的业务层面,可重用的东西也有很多,例如用户、权限、流程引擎等,Django首先把这业务层面可重用的东西做了一套参考标准并放到开发框架里面来了,大善!太实用了!这也是我几年前希望为公司内部的开发框架做的事(后来遇上Django后,没太多激情在java的webframework上折腾这些了)。 

Posted in 技术 | Tagged , , | 2 Comments

webfaction上一键部署Django应用

Webfaction是一款聪明体贴的虚拟主机(除了hosting应用外,我每天都拿来Fuck G/F/W),对程序员友好是她的一大卖点。本文以部署Django应用为例,看看Webfaction是如何工作的。 在开始之前,先简单介绍一下Webfaction对网络应用所做的一些定义:域名(Domain)、应用程序(Application)、站点(Site)。 域名(Domain):指常规的域名,一个域名只可以对应一个站点(Site),但一个站点(site)可以绑定N个域名。webfaction同时可提供域名托管服务,只要把域名的NameServer指向webfaction的名字服务器即可,webfaction提供无限多个子域名哦。 应用程序(Application) :应用程序表示一个Web应用,如一个使用Django写的Blog,或是一个php的bbs。应用程序必须成为网站才可以被访问,所以建立完应用后,webfaction并不会马上运行。一个Web应用,可以用于多个站点。 站点(Site) :站点就是网站,可以通过域名表现出来的,如www.fallever.com就是一个站点,iloveu.fallever.com又是一个站点。 其实这些概念的关系很简单, 只是上面可能讲复杂了,看不懂不要紧,继续看就是了。 建立一个Django应用程序 通过https://panel.webfaction.com登录到控制台,点击 “Domains / websites -> Applications”进入应用程序列表。 进入应用程序列表后,在列表的右下角,有个新增应用程序的小图标,点击开始新建一个应用程序。 接下来会来到创建应用程序页面,我们需要填写一个表单,表单有几个项: Name:填入应用的名称,如example。 App type:嘿,这里是魔术发生的地方,webfaction为我们准备了近百种内置应用程序模板,我们创建应用程序所要做的仅仅是选择应用的模板,然后点击创建即可。 App doc:这是对所选择应用类型的说明文档。 Extra Info:附加信息,依所选的应用类型而定。 我们现在要创建一个名叫example的Django应用。那么,我们输入应用名字,接着,点击App type展开应用类型列表。OMG! 当Django就占满了一页!你想要使用任何版本的Django都可以,webfaction提供的Django部署方式有包含但不限两种:Django + mod_wsgi和Django + mod_python。 当然,除了Django以外,webfaction提供大量python和python以外的web应用框架和应用程序,如CherryPy,TurboGear,Rails,PHP,WordPress,Joomla,Durpal,甚至Plone,Zope全系列。除此之外,还可以一键安装Trac,subversion,AWStats等协合工具,源码控制系统和网页统计应用。更重要的是,webfaction不仅能做这些,你自己可以在上面跑列表里面没有的应用,如写一段代码监听端口,或者是跑Java虚拟机!这,正是webfaction吸引我的一个重要原因。 有图有真相: 最后,我选择了使用Django最新版本的代码与mod_python来架设新应用。现在点击Create来创建吧! 千真万确,创建一个Django应用并让它跑起来就那么简单:填个名字,选个模板,点个Create。想起以前在其他主机上面部署个Django应用累得够呛,版本稍有与服务器的不一样的话,麻烦更大。而在webfaction,这一切都不用我担心。 创建一个子域名 应用是建立起来了,怎么样访问呢?那得有个域名!没错。得配个域名。 webfaction会给每一位用户一个二级域名,那就是“用户ID.webfactional.com”,比如我的二级域名就是“jeffjie.webfactional.com”,我们可以在此基础上建立三级域名来访问我们刚才建立的应用。 … Continue reading

Posted in 技术, 软件 | Tagged , , | Leave a comment

给博客增加文章归档功能

博客怎能没有归档功能,长假后的第一个短假,我为自己的博客加上了归档的功能。本来用Django嘛,博客归档使用Generiv View来实现是最简单不过了,不过我这个是多用户博客系统,Generic View在这时没能帮上忙,只有自己动手了。 最终博客归档的效图果如下(左图),参考了blogger的归档风格(右图),可折叠查看博客内所有文章,归档粒度去到月份。    关于TreeView的组件,我开始想用Jquery的官方插件Treeview,但后来弃用了,使用国人的lightTreeview 。原因是Treeview长年不更新,文档少,而lightTreeview更小巧,可订制性强,有详细的使用文档,严重推荐之。 PS。Django的内置Filter真全,今天才知道有一个unordered_list的过滤器,Django想的好周到!尽管我这次没用上。 PS2。Drobox用来做博客图片存储空间很方便。

Posted in 技术 | Tagged , , , | Leave a comment

Django学习笔记之模板

模板是一个文本文件.可以是HTML,XML,CSV甚至其他任意格式的文本. 模板有自己的元素: 一.Variables(变量): 变量的写法是:{{variable}}或{{book.name}},使用”.”来获得对象的属性.与Freemarker等流行模板类似. 二.filters(过滤): 我们可以通过过滤器来改变变量的显示,用法: {{name|lower}}效果是将名字全部变成小写. 过滤器可以联用,只要在后面跟着写上就OK了. 过滤器还可以加参数:{{ bio|truncatewords:30 }},如果Filter的参数带有空格,那个这个参数必须括起来: {{ list|join:”, ” }} 三、tags(标签): 标签看起来是这样的:{% tag %},与Jsp Tag一样,有单一Tag,也有组合Tag,即有开始Tag及结束Tag。 四、Comments(注释): 注释是这样写的{# 这里是注释 #} 五、模板继承: 这是Django模板最强,也是最复杂的部分。利用模板继承机制,你可以创建一个骨架模板,里面包含一些公用内容。而那些个性内容则通过定义block(块)来允许子模板去重载。(像极了Java的类继承!) 块是使用block标签来实现的。下面来看一个例子就完全明白了: 1,这是基础模板,传说中的骨架。命名为base.html <!DOCTYPE html PUBLIC ”-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml” xml:lang=”en” lang=”en”> <head> <link rel=”stylesheet” href=”style.css” /> <title>{% block title %}My amazing site{% endblock %}</title> </head> <body> <div id=”sidebar”> {% block sidebar %} <ul> <li><a href=”/”>Home</a></li> <li><a href=”/blog/”>Blog</a></li> </ul> {% endblock %} </div> <div id=”content”> {% block content %}{% endblock %} </div> … Continue reading

Posted in 技术 | Tagged , | Leave a comment