kangkang's blog

标题: 关于此部落格
2009-08-31 16:50:31

这个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 来访问。

发表于: Django

misdeer: test -星期三, 16 九月 2009 16:03:17 +0800

kangkang: 有个层次关系会比较好一点哦。 -星期三, 16 九月 2009 17:20:38 +0800