python开发个人博客_Django个人博客开发(二)

前一部分,我们已经成功创建了博客项目,是时候正是施工了...

这一部分的主要内容:

· 了解Django的开发模式

· 配置数据库

· 创建你的博客APP

· 创建模型

一、Django的MVC模式/MTV模式(摘自《The Django Book》):

Django紧紧地遵循MVC模式,可以称得上是一种MVC框架。 以下是Django中M、V和C各自的含义:

· M:数据存取部分,由django数据库层处理;

· V:选择显示哪些数据要显示以及怎样显示的部分,由视图和模板处理;

· C:根据用户输入委派视图的部分,由Django框架根据URLconf设置,对给定URL调用适当的Python函数。

由于C由框架自行处理,而Django里更关注的是模型(Model)、模板(Template)和视图(Views),Django也被称为MTV框架。在MTV开发模式中:

· M代表模型(Model):即数据存取层。该层处理与数据相关的所有事务:如何存取、如何验证有效性、包含哪些行为以及数据之间的关系等;

· T代表模板(Template):即表现层。该层处理与表现相关的决定:如何在页面或其他类型文档中进行显示。

· V代表视图(View),即业务逻辑层。该层包含存取模型及调取恰当模板的相关逻辑。你可以把它看作模型与模板之间的桥梁。

二、配置数据库和创建新的APP:

之前我们已经知道,Django的MTV开发模式中M代表模型(Model),即处理与数据相关的所有事务,存储数据必然要用到数据库,所以第一步,我们需要对此进行配置。

在之前创建项目时,Django为我们生成了一个setting.py文件,打开它并找到如下行:

DATABASES = {

'default': {

'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.

'NAME': '', # Or path to database file if using sqlite3.

'USER': '', # Not used with sqlite3.

'PASSWORD': '', # Not used with sqlite3.

'HOST': '', # Set to empty string for localhost. Not used with sqlite3.

'PORT': '', # Set to empty string for default. Not used with sqlite3.

}

}

Django支持很多种数据库,如MySQL、PostgreSQL、Oracle、SQLite3等。这里为了方便选用SQLite3,它是一款开源、嵌入式关系型数据库。我使用的是Python 2.6,其内置了sqlite3模块,可以很方便地使用。对之前的settings.py做如下修改:

'ENGINE': 'django.db.backends.sqlite3'

'NAME': 修改为你的数据库文件的路径

保存配置,返回到项目根目录下,运行 python manage.py shell,执行如下命令:

>>> from django.db import connection

>>> cursor = connection.cursor()

这里,请确保你设置的数据库文件的目录已经的的确确存在了。如果运行以上命令没有出错的话,表明你的数据库配置是正确的。

接下来我们创建一个应用并将其命名为blog:

[danny@localhost dblog]$ python manage.py startapp blog

执行完成后可以发现目录下多出一个文件夹,这个目录里包含了这个app的模型和视图:

[danny@localhost blog]$ ls -l

total 12

-rw-r--r--. 1 danny danny 0 Nov 2 20:50 __init__.py

-rw-r--r--. 1 danny danny 57 Nov 2 20:50 models.py

-rw-r--r--. 1 danny danny 383 Nov 2 20:50 tests.py

-rw-r--r--. 1 danny danny 26 Nov 2 20:50 views.py

再次编辑settings.py,在INSTALLED_APPS里添加你的应用名称,即“blog”:

INSTALLED_APPS = (

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.sites',

'django.contrib.messages',

'django.contrib.staticfiles',

'blog',

三、创建模型:

一切的准备工作都已就绪,现在就该正式开始规划怎么存储博客的数据了,即模型的定义。

Django模型是用Python代码形式表述的数据在数据库中的定义。对数据层来说它等同于CREATE TABLE语句,只不过执行的是Python代码而不是SQL,而且还包含了比数据库字段定义更多的含义。Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述。

回到我们的博客上,一个博客包含标题、作者、发表的时间、分类、标签等内容;而作者肯定有姓名和一些基本的联系方式;分类和标签则可以简单一些,只需要名字就足够了......

下面我们就来描述它:打开刚才创建的blog应用的models.py文件,并输入如下内容:

from django.db import models

class Tag(models.Model):

tag_name = models.CharField(max_length=20)

create_time = models.DateTimeField(auto_now_add=True)

def __unicode__(self):

return self.tag_name

class Classification(models.Model):

name = models.CharField(max_length=20)

def __unicode__(self):

return self.name

class Author(models.Model):

name = models.CharField(max_length=30)

email = models.EmailField(blank=True)

website = models.URLField(blank=True)

def __unicode__(self):

return u'%s' % (self.name)

class Article(models.Model):

caption = models.CharField(max_length=30)

subcaption = models.CharField(max_length=50, blank=True)

publish_time = models.DateTimeField(auto_now_add=True)

update_time = models.DateTimeField(auto_now=True)

author = models.ForeignKey(Author)

classification = models.ForeignKey(Classification)

tags = models.ManyToManyField(Tag, blank=True)

content = models.TextField()

这里,每个模型相当于单个数据库表,而每个属性也就是这个表中的一个字段。每个数据模型都是 django.db.models.Model 的子类,它的父类 Model 包含了所有必要的和数据库交互的方法。其它的知识点这里就不说了,如果需要进一步了解,可以参考Django的官方文档。

保存并关闭,返回项目根目录下,执行 python manage.py validate,如果返回“0 errors found”,说明你的模型的语法和逻辑都正确。再执行 python manage.py sqlall blog,可以得到如下输出:

BEGIN;

CREATE TABLE "blog_tag" (

"id" integer NOT NULL PRIMARY KEY,

"tag_name" varchar(20) NOT NULL,

"create_time" datetime NOT NULL

)

;

CREATE TABLE "blog_classification" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(20) NOT NULL

)

;

CREATE TABLE "blog_author" (

"id" integer NOT NULL PRIMARY KEY,

"name" varchar(30) NOT NULL,

"email" varchar(75) NOT NULL,

"website" varchar(200) NOT NULL

)

;

CREATE TABLE "blog_article_tags" (

"id" integer NOT NULL PRIMARY KEY,

"article_id" integer NOT NULL,

"tag_id" integer NOT NULL REFERENCES "blog_tag" ("id"),

UNIQUE ("article_id", "tag_id")

)

;

CREATE TABLE "blog_article" (

"id" integer NOT NULL PRIMARY KEY,

"caption" varchar(30) NOT NULL,

"subcaption" varchar(50) NOT NULL,

"publish_time" datetime NOT NULL,

"update_time" datetime NOT NULL,

"author_id" integer NOT NULL REFERENCES "blog_author" ("id"),

"classification_id" integer NOT NULL REFERENCES "blog_classification" ("id"),

"content" text NOT NULL

)

;

CREATE INDEX "blog_article_cc846901" ON "blog_article" ("author_id");

CREATE INDEX "blog_article_337f0fda" ON "blog_article" ("classification_id");

COMMIT;

很明显,你的模型已经变成了SQL语句,确认无误后,最后执行python manage.py syncdb即可将创建的模型同步至数据库。这里系统可能会提示你添加一个超级用户,按步骤添加即可,这个用户可以用于在之后登录Django的站点管理。

这一部分内容就到这里,如需系统学习,可以参考《The Django Book》第五章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值