11个你应该知道的django博客引擎

这段时间一直在学python和django,准备写个小小的blog巩固下自己学到的东西,看到了GAE上的一些程序,大部分都是纯python的,想找一些基于django的,还真是难。无意中搜索到一篇文章,就翻译一下,渣技术,实在不行,就去看en文的吧。

en文地址

Michael Trier在两年以前就写了一篇叫“基于django的blog引擎在哪儿?”。James Bennett随后也跟着写了一篇名叫“哪儿才有django的blog应用”,他论述了为什么最终没有Django blog engine(也就是基于django的博客引擎)。最近Daniel Greenfeld写了一篇“向哥展示你们的开源Django blog吧”,它里面,他定义了这个Django blog项目所需要的各项要求。自从读了那篇文章以后,我就开始一直写现在的这篇文章。

下面我挑选了一些我相信你应该会注意的blog引擎,并且根据它们最近的更新日期排列。如果这些blog engine的作者描述了他们的blog,那么我就直接引用作者们的描述,如果没有,那哥就总结一下我对该项目的一些了解。如果你有自己开发的blog引 擎并且值得哥注意的,那么就在下面留言吧,记得加上姓名和地址。

Byteflow博客程序并没有被包含在下面,这是因为这个项目在我写这片博客之前就已经关闭了下载的地址(= =!)。

Biblion

标语:eldarion.com 的blog程序一般适用于企业或者项目级别的引用。

源码地址:http://github.com/eldarion/biblion

最后更新:2010年2月9号

在线的demo:http://eldarion.com/blog/

描述:Bilion是eldarion.com的一个已经被提取和开源的blog程序,这个blog目前的定位是,它能够被应用于类似的 eldarion.com和pinaxproject.com这样的网站或者博客项目。一旦我们完成Bilion的功能,那么我们就用它去代替内部的 Pinax博客程序。

特点:

1.多渠道支持(比如:技术对业务)      #这句真没看懂啥意思

2.使用Creole作为标记格式

3.Atom feeds            #求翻译帝现身

4.在博客发布前预览其效果

5.可以选择同步推特

Django-article

标语:牛X的基于django开发的博客引擎

源码:http://bitbucket.org/codekoala/django-articles/

最后更新:2010年2月8号

现在demo:codekoala.com

描述:作者是Josh VanderLinden,牛X的基于django开发的博客引擎。

显著特点:

1.标签系统

2.在django的后台中自动完成标签功能

3.支持草稿(就是现预存,以后再发布)

4.文章到期设定     #这是啥设定啊,还翻译有毛病

5.可以使用文本或者HTML或者使用Markdown或者ReStructured Text或者Textile markup来写文章。                  #这里面有几个属于不是很懂

6.支持相关文章显示

7.支持后续文章(就是上一篇下一篇)

8.支持Disqus评论系统               #想知道Disqus是啥,请猛击。

9.文章分页存档

10.支持多语言(国际化个锤子)

11.支持为每篇文章添加个单独的链接,并且检测该链接。  #连wordpress的url设定差不多。- -,我猜的。

12.字数统计             #这个功能到底有个啥锤子用啊

13.支持最新文章的RRS Feeds

14.支持最新的文章标签的RRS Feeds

娘的,真累,而且翻译得不好,以后有时间再翻译翻译吧,真蛋疼。

django中Admin的一些细节

django中有一个叫admin的管理界面,可以和简单的配置和使用,用来完成一些CURD工作。

这段时间正好想通过写个基于django的blog,从中把知道的东西系统化。

这与怎么安装,如果在django中添加自己的模块就不说了。直接记录自己不是非常熟悉的一些问题。

1.设置字段可选

这个问题就是看你是怎么建表的,前面说过,djanog可以直接通过模型建表,而通过django简称的表呢,每个字段的默认值都是为NOT NULL的,而自己建表的话,一般都是为NULL。

在mysql中,NULL表示未知的,非法的,一般用来指定空值。

一般我们要指定某个字段是可选的话,在模型中,指定参数为”black=True”就可以了。

在编写模块的时候,一般就指定了字段的类型以及长度。我们也可以设置日期型字段和数字型字段的可选。同样是通过设置参数blank=True就可以。但是一般要加上一个NULL=True,但是它并没有改变数据库,django一般是不会修改已经生成的表的。

自定义字段的标签

因为django的admin直接使用了字段名称作为表单的名称,如果想弄成中文的话,那么在字段的参数里面设置verbose=”就好。如果设置成中文,别忘记设置文件的编码。

以上的修改都是模块级别的修改,修改的模块的组成部分,而这部分是管理工具所能用的。

自定义ModelAdmin类

1.自定义列表

这是针对管理工具的配置。可以通过自定义模型中的__unicode__函数,返回要列出的字段。

2.自定义表单

通过定义一个ModelAdmin类,通过指定fields的属性值(一个元组)实现对表单先后排列。

django的安全问题

这篇东西写完了以后,就准备写个留言板,熟悉python以及django。让后再写个blog,当然了功能不可能写得很多,纯粹给自己练练手,让后再开发个企业网站啥的,研究下常用的功能以后,就插入了了解python。

在django book上面的内容了解得差不多了,然后还有一些应用可能目前还没办法用到,所以想想等以后用到的时候再回来看看,包括国际化啊,子框架,中间件这些,准备先了解个概念,等以后用到再研究。

还是现说这一章的安全问题吧,这个地方也是我的一个薄弱点。

1.任何从客户端传递过来的数据都应该经过检查,无论是用户数据(表单)还是带外数据(HTTP头,cookie之类的)。

2.SQL注入

SQL诸如就是改变网页的参数,加入一些SQL片段,让后让网站直接运行,从而得到他想要的数据,或者直接删除了。

解决方案:那就是转义了,django默认是对接受到的SQL进行转义的。但是如果想接受原始的SQL语句的话,可以使用extra()函数。

3.XSS(跨站点脚本攻击)

XSS就是在页面被渲染成HTML页面之前,向网页中插入一些<script>标签形式的HTML代码。一般就是为了获得用户的 cookie信息或者session信息。也不知道为什么要劫持页面,可能是蛋疼吧。他插入的HTML集可能是个钓鱼的表单,骗你输入一些敏感内容。

解决方案:首先,我应该很明白,任何用户输入的内容都是应该进行转义的。为了防止被XSS,django会转义所有的变量值。

4.伪造跨站点请求

CSRF就是一些蛋疼的web站点利用正常的用户去下载某个站点的URL时候,这个站点已经通过信任验证,所以攻击者就利用这种被信任的状态做些OOXX的事情。

解决方案:django有内建的工具来解决。

5.会话(cookie和session)

会话的攻击方式很多,比如伪造cookie,伪造session,会话中毒啊,诱骗用户充值sessionID,方式很多,而且都是在cookie和session上做手脚。

解决方法:不要在URL中包含session信息,这个是很安全的,而且django也不容许URL中包含session。不要在cookie中保留数据,只保留一个ID就行了,毕竟cookie是存储在客户端的。如果要在模板中显示session,那么请转义。

6.debug信息被暴露

很多时候,在开发站点的时候,我们都是开启了debug模式,因为它能高速我错误的情况。但是有时候上线了,却仍旧开启了debug模式。

解决方案:在settings.py中设置debug为false,如果使用了mod_python,那么还需要在apache的配置文件里面设置PythonDebug Off。

总的来说,就是不要相信用户数据,包括表单也好,啥也好。同时也不要相信URL的参数,因为它们是可变的。对文件和文件夹的权限设置要做得很好。

在apache上部署django

好吧,继续每天不更新不舒服斯基,不折腾就会死星人。

早上花了以一上午的时间,在apache上成功的部署了django,虽然还有写地方不明白,但是记录一下又不会怀孕,顺便加强印象。

好吧,至于django如何安装,apache如何安装,python如何安装就不废话了,直接记录。

首先是配置好apache的开发目录,我选的是D:/py,让后python django-admin.py startproject mysite,开始一个项目,然后在D:/py下建立一个mysite的文件夹,复制,copy。

然后优势配置apache了。这次的配置稍微有点麻烦。首先:

<Location “/”>
SetHandler python-program
PythonPath “['D:/py'] + sys.path”
PythonHandler django.core.handlers.modpython
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonDebug Off
</Location>
需要指明的是,D:/py是你项目的上一级目录,而mysite.settings是你project的名称。
PythonDebug Off是关闭调试模式,ON就是开启,如果产品上线了,一定要Off的。
MaxRequestsPerChild 1,这一句不是加载Location里面,放在其他的什么地方都可以,因为在开发的时候,不是php,每次更改代码后,直接刷新页面就好。python是 不行的,他需要重启apache,很蛋疼,加入MaxRequestsPerChild 1后会好点,它会在发送请求时候重新载入所有代码,但是它并不是重启,所以有时候,你需要等一小段时间。
然后基本上就没问题了。当然了,因为具体情况的不同,会碰到很多蛋疼的问题,最常见的就是无法找到settings,其实这里主要是 PythonPath “['D:/py'] + sys.path”没有填写正确,也就是没有加路径。有时候,你还需要指定Django在python中的路径以及project的路径。但是具体什么情 况下,我也不懂,所以我直接都加上了。
还有就是目录无法访问,因为一般默认情况下是无权限的,因为python代码的部署和php是不同的,python代码不放在根目录。所以需要指定媒体文件的权限。
<Directory “D:/py/mysite/media/”>
Order deny,allow
Deny from all
</Directory>
指定好路径就OK了。
参考地址:

django的模型,以及数据库抽象层

好吧,继续学习,继续折腾,本来不想写的,但是django的数据库抽象层太强悍,因此记录一下,也加深自己的理解。

本来,python已经提供了很好的数据库支持,而django更多的是不让你写一句sql,而能完成一个以sql驱动的项目。

当然,前提是依旧得安装MySQLdb,不让是无法没有engine的。

配置我们的数据库。依旧是在settings.py里面配置,配置的对象是DATABASES字典,一般如果只有一个数据库,那么配置默认的就好了。

‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘test’,
‘USER’: ‘root’,
‘PASSWORD’: ”,
‘HOST’: ‘localhost’,
‘PORT’: ’3306′,
其实HOST如果为空,那么默认值就是localhost,如果是针对sqlite的开发,那么NAME项只要添上相关的数据库文件路径就好,PORT的话,mysql安装时候一般默认的3306。ENGINE的话,就添上对应的数据库类型就好。
配置好了后,启动python manage.py shell,通过输入:
from django.db import connection
cursor = connection.cursor()
如果没有出错,就表示配置好了,数据库已经链接上了。在开始操作前,应该创建一个app。
使用python manage.py startapp appname,就可以创建对应的app。
然后就是开发中经常用到的app了。
project与app的区别:
1.一个project包含多个django的app以及它们的配置。
2.project提供的是基础配置,包括url,数据库等等配置。
3.一个app经常包括模型和视图,而控制器则交给django的配置文件处理。
4.app不是必须,但是如果链接数据库的话,必须使用app,而且模型都必须放在app中。
接下来就是在app中写models文件了。然后python是可以自己创建对应的数据库而不需要写一个create table的。
首先可以使用:python manage.py sqlall appname来检查输出SQL。
然后使用:python manage.py syncdb来创建对应的数据库。整个过程,不需要一句sql。
数据库访问:
1.保存或者更新使用save()函数,首先我们在包含对应的模型类,让后通过实例化来引用。然后设置字段,更新的方法也差不多吧。
2.数据过滤,可以使用filter()函数,来制定条件,进行过滤。
3.获取所有对象all(),获取单个对象get(),如果get返回了多条数据,就会报错,所以要指定好条件。
4.like操作使用__contains来指定,这个是区分大的,而__icontains是不区分大小写的。
5.数据的排序,使用order_by()函数来完成。支持多个参数。
6.数据限制,Publisher.objects.order_by(‘name’)[0],后面的那个[0]就是限制,比如[0:2]
就是从0开始,取2条。
7.删除,delete()就好。
好鸟,就这么多,很不详细,但是自己知道就好,毕竟这个鬼畜的blog没有漂亮姑娘
的大腿,没人来看。

每周一回头

如果要给这个星期加上一个tag的话,那么久是培训鸟。一共培训了3天,严格来说是2天半,但是花了三天时间。一个是两天的,一个是一天半的,具体的详细的深入的前面都说了,这里就没什么好说的了。感觉就是偶尔花点时间去听听培训还是有点必要的。

然后就Python也有一些眉目了,昨天用Django实现了hello world,感觉Python像要深入还是要花时间的,但是Django确实是个不错的东西。更多神奇的地方还是得深入了解了才知道。

然后做了个小小的决定,就是以后可能不用QQ了,但是要说彻底的不用,估计也不现实,毕竟有些朋友和客户对于QQ的依赖还是灰常的大的。只能说逐步 的减少对于QQ的依赖,可能到有需要的时候才上吧,而晚上我估计是不会再上鸟。转战Gtalk,虽然它的输入框很小,而且是个很纯粹的产品,Gtalk不 能普及的原因,大概和MSN一样吧,不够娱乐。

然后就是,7月份完鸟,然后8月份来了,根据目前的情况来看是,8月份会更忙,但是依然不能影响到我去旅游的决心。只能说加大我工作的效率吧。

然后可能会彻底的放弃Firefox吧,用chrome,我从最开始的IE,到后来的Firefox,再到现在的chrome,每一次都能说是自己性格的一个体现。喜欢chrome的快速和简单。就像编辑器我放弃了zend一样,更喜欢简单的notepad。

然后可能会抛弃抓虾,改用google reader吧,因为随着我订阅数量的增大,好好的管理我的订阅也是灰常重要的。

然后最后呢,本来有个事情想说下的,想想算了,我觉得我应该成为一个纯粹的人,不能为太多蛋疼的事情,而迷失自己。

最后就是希望奶奶身体能好,8月份以后一定要抽个时间回去一趟。这个,是必须的。

然后以后的blog更新,更多的是写一些对于技术,以及对互联网时间的看法,以及对于某些互联网产品的感谢。

做个纯粹的互联网人。

posted @ 2013-08-29 14:44  godjob  Views(1067)  Comments(0Edit  收藏  举报