这个Blog是参照此文(http://blog.ericsk.org/archives/815)用了十分钟写好的models、urls和admin。 又花了些许时间修改了css,现在它的功能很简陋,只基本够用,如果有更多时间学习Django,那么会慢慢完善它。 Django真是个不错的框架,Rails on Ruby刚风行的时候,也尝试过,的确方便,然而Ruby并不是我通常使用的编程语言,用起来多少有些不便,而且,已经学了许多门的脚本语言,是时候抛开浮华,深入学习了,于是选择了Django,来做常用的Blog。
贴一下建立的流程。注:Django版本为1.0,nginx版本为0.6。
1. 安装Linux系统 略去,过去了这些年,Debian的安装变化不大,倒也顺手,按提示做就是了。
2. 安装Web Server 选择了nginx做为网站服务器,多少带来了一点小麻烦,因为它不支持CGI,也没有mod_python。 好在文档比较完善,要跑起Django,直接复制粘贴配置就可以了。
3. 安装Django 因为与nginx配合使用,除却基本的包,还需要安装python-flup,这个源里也是有的,直接安就好。
4. 配置nginx 参考此文 http://wiki.nginx.org/NginxPythonFlup,加相应的内容:
# project media assuming it's called at media/
# keep in mind that media/ will be maintained as a directory by the root command
location ^~ /testproject/ {
root /site;
}
# admin uses admin-media/
# alias works different than root above by dropping admin-media
location ^~ /media/ {
alias /var/lib/python-support/python2.5/django/contrib/admin/media/;
}
location / {
# host and port to fastcgi server
fastcgi_pass 127.0.0.1:8080;
fastcgi_param SERVER_NAME $server_name;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass_header Authorization;
fastcgi_intercept_errors off;
}
5. 初始化django
django-admin startproject testproject
6. 启动django服务
./manage.py runfcgi host=127.0.0.1 port=8080
这时就可以访问啦
7. 开始blog项目
./manage.py startapp blog
8. 修改配置及初始化DB 修改settings.py
DATABASE_ENGINE = 'sqlite3' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. DATABASE_NAME = 'xxx.db' INSTALLED_APPS = ( ... 'testproject.blog', ... )
- 修改urls.py
- (r'^blog/', include('testproject.blog.urls')),
初始化数据库: ./manage.py syncdb
9.建立blog 在blog目录下: 修改urls.py为:
from django.conf.urls.defaults import *
from testproject.blog.models import Article
info_dict = {
'queryset': Article.objects.all(),
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
)
修改models.py为:
from django.db import models
# Create your models here.
from django.db import models
class Category(models.Model):
name = models.CharField(max_length=32)
def __unicode__(self):
return self.name
class Admin:
pass
class Article(models.Model):
title = models.CharField(max_length=64)
published_at = models.DateTimeField('date published')
content = models.TextField()
category = models.ForeignKey(Category)
def __unicode__(self):
return self.title
class Admin:
pass
建立admin.py:
from testproject.blog.models import Article from testproject.blog.models import Category from django.contrib import admin admin.site.register(Article) admin.site.register(Category)
在templates目录下建立blog子目录,创建两个文件:
article_list.html:
<html>
<head>
<title>kangkang's Blog</title>
<style type=text/css>
.article {
/* *
background: #333;
* */
padding: 2px 10px;
margin: 10px 100px 10px 10px;
border-left: 1px solid #191;
border-bottom: 1px solid #191;
}
h1 {
margin: 10px;
/* padding: 10px; */
color: #444;
}
a {
text-decoration:none;
}
.title {
color: #666;
}
.footer {
color: #999;
border-top: 1px solid #ddd;
margin: 20px 10px;
padding: 5px;
}
</style>
</head>
<body>
<h1>kangkang's blog</h1>
{% if object_list %}
{% for article in object_list %}
<div class="article">
<div class="title"><a href="/blog/{{ article.id }}">{{ article.title }}</a> (类别: {{ article.category.name }}) ({{ article.published_at }})</div>
</div>
{% endfor %}
{% else %}
<p>对不起没有文章喔!</p>
{% endif %}
<div class=footer>
CopyLeft kangkang 2009
</div>
</body>
</html>
article_detail.html
<html>
<head>
<title>kangkang's Blog</title>
<style type=text/css>
.article {
/* *
background: #eee;
border-left: 1px solid #191;
border-bottom: 1px solid #191;
* */
padding: 2px 10px;
margin: 10px 100px 10px 10px;
}
.title
{
color: #333;
font-size: 1.1em;
font-weight: bold;
padding: 5px;
}
.content
{
background: #fafafa;
margin: 3px;
}
.pub_date {
color: #ccc;
font-size: 0.7em;
font-weight: bold;
padding-bottom: 0px;
margin-left: 5px;
}
h1 {
margin: 10px;
/* padding: 10px; */
color: #444;
}
h1 a{
text-decoration:none;
color: #444;
}
h1 a:hover {
/* text-decoration: underline; */
color: #999;
}
.footer {
color: #999;
border-top: 1px solid #ddd;
margin: 10px 10px;
padding: 5px;
}
.bottom {
text-align: center;
margin: 0;
font-size: 0.9em;
}
.category {
margin: 5px 0;
padding: 0;
color: #999;
font-size: 0.9em;
}
pre {
white-space: pre-wrap; /* css-3 */
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
white-space: -pre-wrap; /* Opera 4-6 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* Internet Explorer 5.5+ */
}
</style>
</head>
<body>
<h1><a href="/blog">kangkang's blog</a></h1>
<div class="article">
<div class="title">标题: {{ object.title }}</div>
<div class="pub_date">{{ object.published_at }}</div>
<div class="content"><pre>{{ object.content }}</pre></div>
<div class="category">发表于: {{ object.category.name }}</div>
</div>
<!-- div class="bottom">
<a href="/blog">回首页</a>
</div -->
<div class=footer>
CopyLeft kangkang 2009
</div>
</body>
</html>
大功告成,可以通过 /admin 来添加文章, /blog 来访问。
misdeer: test -星期三, 16 九月 2009 16:03:17 +0800
kangkang: 有个层次关系会比较好一点哦。 -星期三, 16 九月 2009 17:20:38 +0800