Django 搭建博客之一 - 基础数据构建

构建基础工程

从本章节开始,我们通过之前学到的知识来构建一个简易的博客项目。希望从中,各位学员可以继续巩固 Django 知识,并完成第一个 Django 小项目。

话不多说,正式开始。我们在 /home/shiyanlou/ 目录下创建一个名为 my_blog 的 Django 项目:

1
$ django-admin.py startproject my_blog

进入 my_blog 目录中建立一个 article app:

1
python manage.py startapp article

之后我们需要在 settings.py 中添加这个 app:

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article',
)

创建 Models 对博客文章进行描述

在 Django 项目建成后,默认设置了使用 SQLite 数据库,在 settings.py 中可以查看和修改数据库设置:

1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

之后我们编写 my_blog/article/models.py 来创建 models。

1
2
3
4
5
6
7
8
9
10
11
12
13
from django.db import models

# Create your models here.
class Article(models.Model) :
title = models.CharField(max_length = 100)
category = models.CharField(max_length = 50, blank = True) # blank = True 允许字段为空,默认不允许
date_time = models.DateTimeField(auto_now_add = True)
content = models.TextField(blank = True, null = True) # null = True 空值储存为 Null
def __str__(self) :
return self.title

class Meta:
ordering = ['-date_time']

这里,title 、category、date_time、content 分别对应一篇博文的题目、标签、日期和正文内容。

而定义 str 方法是为了告诉数据库 Article 对象如何表示自己,系统默认的使用 <Article: Article object> 来表示对象。另外,指定 Meta 是为了按照时间降序排列。

  • CharField 用于存储字符串, max_length设置最大长度
  • TextField 用于存储大量文本
  • DateTimeField 用于存储时间, auto_now_add设置True表示自动设置对象增加时间

修改 admin.py 配置后台,进入 article 目录,修改 admin.py 文件:

1
2
3
4
from django.contrib import admin
from .models import Article

admin.site.register(Article)

数据库同步

1
2
$ python manage.py makemigrations
$ python manage.py migrate

当出现 OK 字样代表数据库同步成功。

在my_blog的根目录下执行命令:

1
python manage.py shell

进入 Django 的交互式 shell 来进行数据库的增加基础数据操作。同时该过程还可以验证数据库表的创建成功。

1
2
3
>>> from article.models import Article
>>> Article.objects.create(title = 'Hello World', category = 'Python', content = 'This is a sample.')
<Article: Article object>

这里我们增加一篇文章,其标题是 Hello World,所属的标签为 Python,其中的主要内容为 This is a sample.。当我们看见 <Article: Article object> 字样,说明我们的创建已经生效。下图是在实验楼环境下使用 Django 的交互式 shell 的测试结果(由于在作者的环境中已经安装 iPython 工具,则 shell 或自动使用该工具习惯进行启动)。

建立后台管理

在这个教程中我们讲过 Django 的一个有些特性,内置 Django admin 后台管理界面,方便管理者进行添加和删除网站数据库中的内容。由于 blog 有大量的文章需要我们来管理,所以这里我们引入这个工具。

新建的项目系统已经为我们设置好了后台管理功能,在 my_blog/my_blog/settings.py 中可以看到:

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = (
'django.contrib.admin', #默认添加后台管理功能
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'article'
)

同时也已经添加了进入后台管理的 url,可以在 my_blog/my_blog/urls.py 中查看到:

1
2
3
4
5
6
from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
)

然后我们来创建超级管理员。使用改一下命令创建:

1
$ python manage.py createsuperuser
1
$ python manege.py runserver 1103

根据他的提示,输入用户名、邮箱、密码之后创建成功。我们在 http://127.0.0.1:1103/admin/ 输入刚刚创建的超级管理员用户名和密码进行后台登录:

从这里我们可以看到刚刚使用 shell 创建的一个 Article 条目:

描述