这段时间一直在学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更新,更多的是写一些对于技术,以及对互联网时间的看法,以及对于某些互联网产品的感谢。

做个纯粹的互联网人。

11个你应该知道的django博客引擎的更多相关文章

  1. Django 博客开发教程目录索引

    Django 博客开发教程目录索引 本项目适合 0 基础的 Django 开发新人. 项目演示地址:Black & White,代码 GitHub 仓库地址:zmrenwu/django-bl ...

  2. Django 博客单元测试:测试评论应用

    作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 评论应用的测试和博客应用测试的套路是一样的. 先来建立测试文件的目录结构.首先在 c ...

  3. 【ZZ】C++11之统一初始化语法 | 桃子的博客志

    C++11之统一初始化语法 | 桃子的博客志 https://taozj.net/201710/list-initialize.html 在当前新标准C++11的语法看来,变量合法的初始化器有如下形式 ...

  4. django博客项目8:文章详情页

    首页展示的是所有文章的列表,当用户看到感兴趣的文章时,他点击文章的标题或者继续阅读的按钮,应该跳转到文章的详情页面来阅读文章的详细内容.现在让我们来开发博客的详情页面,有了前面的基础,开发流程都是一样 ...

  5. django博客项目5:博客首页视图(2)

    真正的 Django 博客首页视图 在此之前我们已经编写了 Blog 的首页视图,并且配置了 URL 和模板,让 Django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应.不过我们仅仅 ...

  6. Django1.8教程——从零开始搭建一个完整django博客(一)

    第一个Django项目将是一个完整的博客网站.它和我们博客园使用的博客别无二致,一样有分类.标签.归档.查询等功能.如果你对Django感兴趣的话,这是一个绝好的机会.该教程将和你一起,从零开始,搭建 ...

  7. 使用 Nginx 和 Gunicorn 部署 Django 博客(转)

    原文:http://zmrenwu.com/post/20/  http://www.siar.me/post/9/ 针对很多朋友反映按照教程的做法始终只能看到 Nginx 欢迎页面的问题,Tian ...

  8. Django博客开发实践,初学者开发经验

    python,Django初学者,开发简易博客,做了一下笔记,记录了开发的过程,功力浅薄,仅供初学者互相 交流,欢迎意见建议.具体链接:Django博客开发实践(一)--分析需求并创建项目 地址:ht ...

  9. django博客项目6:Django Admin 后台发布文章

    在此之前我们完成了 Django 博客首页视图的编写,我们希望首页展示发布的博客文章列表,但是它却抱怨:暂时还没有发布的文章!如它所言,我们确实还没有发布任何文章,本节我们将使用 Django 自带的 ...

随机推荐

  1. call_usermodehelper内核中运行用户应用程序

    init是用户空间第一个程序,在调用init前程序都运行在内核态,之后运行init时程序运行到用户态. 操作系统上,一些内核线程在内核态运行,它们永远不会进入用户态.它们也根本没有用户态的内存空间.它 ...

  2. hive表支持中文设置

    默认创建表时说明中带有中文字段时会显示如下乱码信息: 解决方案: 在hive的元数据库中执行以下SQL语句,然后重新创建刚才的表即可 . ) character set utf8; ) charact ...

  3. Android基础总结(二)布局,存储

    常见布局 相对布局 RelativeLayout 组件默认左对齐.顶部对齐 设置组件在指定组件的右边 android:layout_toRightOf="@id/tv1" 设置在指 ...

  4. GitHub 上 57 款最流行的开源深度学习项目【转】

    GitHub 上 57 款最流行的开源深度学习项目[转] 2017-02-19 20:09 334人阅读 评论(0) 收藏 举报 分类: deeplearning(28) from: https:// ...

  5. git error Another git process seems to be running in this repository

    How to fix error Another git process seems to be running in this repository When you use Git, you se ...

  6. 【UVa】Palindromic Subsequence(dp+字典序)

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=465&page=s ...

  7. git 怎么看某个commit 修改的代码

    详细的更改: git show commitid 只列出文件名:git show --pretty="format:" --name-only commitid 转自: http: ...

  8. 《Programming with Objective-C》第四章 Encapsulating Data

    Designated Initializer 不稳定的传送门 合成属性 Properties don’t always have to be backed by their own instance ...

  9. 通过代码注册COM、DLL组件

    注册代码如下:  C++ Code  1234567891011121314151617181920212223242526272829303132333435363738   // //====== ...

  10. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...