django开发个人简易Blog——数据模型

提到数据模型,一定要说一下MVC,MVC框架是现代web开发中最流行的开发框架,它将数据与业务逻辑分开,减小了应用之间的高度耦合。个人非常喜欢MVC开发框架,除了具有上述特性,它使得web开发变得非常灵活,在ASP.NET上表现的尤为强烈,传统的ASP.NET开发常常用到好多臃肿的服务器端控件,定制起来非常麻烦而且具有局限性。近年来,MVC遍地开发,在java、php、ruby、.NET,甚至javascript中都有对应的MVC框架,当然了,django也是其中之一。

数据模型作为MVC的一部分,用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法,并且对数据直接访问的权力,而且不关心具体的业务逻辑。

今天,接着上一篇django开发个人简易Blog——构建项目结构,以本系统为例,说一下django中数据模型的设计及操作。

本系统采用mysql作为数据库存储。所以首先要保证安装了mysql,然后安装MySQLdb模块,可到这里下载相对应的windows或者linux目前的最新版本并安装,之后在命令窗口中输入 :

python
import MySQLdb

如果没有显示错误,则表示安装成功。

开启django自带的后台管理功能:

其实,django自带了一套功能完整可用的后台管理系统,是django.contrib包的一部分,并且可以灵活扩展我们增加的新的app功能。只需要运行几个简单的命令,就可以方便的将数据模型和mysql数据库建立联系。首先打开我们创建的项目中的settings.py文件,看到里面默认的配置中有这样的配置:

INSTALLED_APPS = (
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
)

每一个app都有自己的数据模型,例如上一篇中我们创建的blogapp,其目录下有models.py这个文件,就是用来定义数据模型的,而django自带的app,我们也可以在django的安装目录下找到。

因为要与mysql进行数据交互,所以首先要配置mysql的连接信息,类似于.NET中的连接字符串。配置信息在settings.py文件中,配置格式如下:

#windows版:
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,     #标识数据库引擎类型 也可以使postgresql、sqlite3、oracle
        ‘NAME‘:"mypythonblog",					  #数据库名称
        ‘USER‘: ‘xxxxxx‘,                      	  # 用户名 如果是sqlite3可以为空
        ‘PASSWORD‘: ‘xxxxxxxxxx‘,                 # 密码 如果是sqlite3可以为空
        ‘HOST‘: ‘localhost‘,                      # 服务器
        ‘PORT‘: ‘‘,								  # 端口 默认端口可以为空 mysql默认端口为3306
    }
}

#linux版 CentOS6.5
DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘:"mypythonblog",
        ‘USER‘: ‘root‘,                      	  # 用户名.
        ‘PASSWORD‘: ‘xxxxxxx‘,                    # 密码
        ‘HOST‘: ‘/var/lib/mysql/mysql.sock‘,      # mysql会通过Unix socket 来连接指定的套接字
        ‘PORT‘: ‘‘,
    }
}

进入这个项目的根目录,运行如下命令,启动交互解释器:python manage.py shell

输入如下代码:

from django.db import connection
cursor = connection.cursor()

如果没有出现错误,则说明数据库配置正常,否则,会提示具体的错误信息。

接下来到了至关重要的一步,将django自带的数据模型同步到数据库,这个过程中django会根据INSTALLED_APPS下设置的app,校验其正确性,并将模型同步到数据库,生成对应的表结构,要通过以下命令完成,进入项目根目录,也就是manage.py所在的目录:

python manage.py syncdb

运行命令后,出现如下内容:

从图中可以看出创建了9个数据表,并且提示是否为系统创建一个超级管理员,为了以后登录系统,我们输入yes。

之后按照提示输入用户名及密码即可。

如果一切顺利,说明数据模型已经同步至数据库中,我们打开urls.py文件,查看其中是否有url(r‘^admin/‘, include(admin.site.urls)),路由设置,并且保证未被注释。

最后,用python manage.py runserver 1989命令,在1989端口启动网站,当然也可以输入其它端口,或者不输入端口,即使用默认端口。打开浏览器,在浏览器中访问http://127.0.0.1:1989/admin ,出现如下登录界面:

输入刚刚创建的超级用户的用户名和密码,点击login按钮,即来到如下的管理界面:

通过这个管理界面,可以方便的对用户组和用户进行管理,并且有详细的日志记录。

到目前为止,一个可以验证用户权限并且可管理用户组和用户的后台管理系统就可以完美的运行了,简直太方便了。好了,下面开始添加与本系统相关的数据模型。

数据模型设计:

由于这只是一个简单的博客,并且功能有限,所以,数据模型也是比较简单的,仅包括文章表、分类表及评论表这三个表,至于用户验证的部分,使用django自带的用户表。

我们创建的blogapp中,有一个models.py的文件,模型的定义就在这个文件里,每一个数据模型对应一个类,只要这个类继承自models.Model。

“文章”模型定义,定义代码如下:

class fz_Article(models.Model):
    title = models.CharField(max_length=56,verbose_name=‘标题‘)
    content = models.TextField(verbose_name=‘文章内容‘)
    author = models.ForeignKey(User)   #User是django自带的用户模型定义 要首先引入 from django.contrib.auth.models import User
    tags = models.CharField(max_length=1023,verbose_name=‘标签‘,blank=True)
    classic = models.ForeignKey(fz_classic)
    publish_date = models.DateTimeField()
    ispublished = models.BooleanField()
    commentcount = models.IntegerField(blank=True)
    readcount = models.IntegerField(blank=True)

“分类”模型定义,代码如下:

class fz_classic(models.Model):
    name = models.CharField(max_length=56)
    articecount = models.IntegerField()

    def __unicode__(self):
        return self.name

“评论”模型定义,代码如下:

class fz_comment(models.Model):
    article = models.ForeignKey(fz_Article)
    comment_content = models.TextField()
    comment_date = models.DateField()
    email = models.EmailField()
    commentator = models.TextField()

模型的定义规则是什么,怎么定义,这些我就不说了,也没必要说,找一本书或者读几篇文章也就明白了。

开始安装自定义的模型,找到settings.py,将INSTALLED_APPS中设置的值,增加一项‘fengzhengBlog.blogapp‘,包名是fengzhengBlog,app名称是blogapp>

执行如下命令,检查模型定义的正确性:python manage.py validate,如果正确则会提示:0 errors found。

执行如下命令,生成模型所对应的sql语句:python manage.py sqlall blogapp。生成的sql如下:

BEGIN;
CREATE TABLE `blogapp_fz_classic` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `name` varchar(56) NOT NULL,
    `articecount` integer NOT NULL
)
;
CREATE TABLE `blogapp_fz_article` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `title` varchar(56) NOT NULL,
    `content` longtext NOT NULL,
    `author_id` integer NOT NULL,
    `tags` varchar(1023) NOT NULL,
    `classic_id` integer NOT NULL,
    `publish_date` datetime NOT NULL,
    `ispublished` bool NOT NULL,
    `commentcount` integer NOT NULL,
    `readcount` integer NOT NULL
)
;
ALTER TABLE `blogapp_fz_article` ADD CONSTRAINT `author_id_refs_id_a7f24472` FOR
EIGN KEY (`author_id`) REFERENCES `auth_user` (`id`);
ALTER TABLE `blogapp_fz_article` ADD CONSTRAINT `classic_id_refs_id_992b177f` FO
REIGN KEY (`classic_id`) REFERENCES `blogapp_fz_classic` (`id`);
CREATE TABLE `blogapp_fz_comment` (
    `id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
    `article_id_id` integer NOT NULL,
    `comment_content` longtext NOT NULL,
    `comment_date` date NOT NULL
)
;
ALTER TABLE `blogapp_fz_comment` ADD CONSTRAINT `article_id_id_refs_id_cbb24377`
 FOREIGN KEY (`article_id_id`) REFERENCES `blogapp_fz_article` (`id`);
CREATE INDEX `blogapp_fz_article_e969df21` ON `blogapp_fz_article` (`author_id`)
;
CREATE INDEX `blogapp_fz_article_3da92ebb` ON `blogapp_fz_article` (`classic_id`
);
CREATE INDEX `blogapp_fz_comment_0f1c6027` ON `blogapp_fz_comment` (`article_id_
id`);

COMMIT;

脚本中包括创建表结构,并且包括主外键的依赖关系,并且可以看到要生成的数据表被重命名成了“app名称_模型名称”。这个命令只是生成了sql,并没有在数据库中执行,要执行同步,还需要执行下面的命令:python manage.py syncdb。上面已经执行过一遍这个命令,再次执行,会将INSTALLED_APPS下,未同步至数据库的模型同步至数据库,已经在数据库中同步过的不做同步,即使,字段有修改,也不予同步。同步成功后,打开sql会发现里面已经出现了上面的模型所对应的表结构。

如果未同步过去,并且没有出现错误,可能是因为blogapp下存在migrations文件夹,删除后,再次执行命令即可。

接下来,启动网站,访问http://127.0.0.1:1989/admin/ 输入用户名和密码,进入管理页面,咦,什么情况,说好的安装什么app就会出现对应的管理功能呢,怎么依然只有Auth这个app的管理功能区。不用着急,blogapp目录下还有一个admin.py的文件,存在即有它存在的道理,它的作用就是注册这个app到后台管理中,并且还可以在这里设置一些与后台管理功能相关的功能,例如排序字段、可搜索字段等。复杂功能我都不要,只要最基本的就可以,打开admin.py,在其中加入如下代码:

from django.contrib import admin
from fengzhengBlog.blogapp.models import *  #导入模型定义
# Register your models here.

#注册模型到后台管理界面
admin.site.register(fz_Article)
admin.site.register(fz_comment)
admin.site.register(fz_classic)

保存后,刷新页面,出来了,Auth下面多出了Blogapp,可以对文章、类别、评论进行管理了。英文的界面,看着不太爽啊,找到settings.py中的LANGUAGE_CODE = ‘en-us‘改为LANGUAGE_CODE = ‘zh-CN‘,再刷新一看看吧。

最后生成的表结构如下:

blogapp_fz_article

blogapp_fz_classic:

blogapp_fz_comment:

以上就是通过定义数据模型,并通过命令同步至数据库,然后激活django自带的后台管理功能。到这里基本功能都是可用的,包括管理用户、用户组、管理文章、分类、评论都可以通过自带的后台管理界面来完成,当然了,能用并不代表好用,后面我会介绍怎么样开发自己的后台管理功能,以及如何展示。

django开发个人简易Blog——数据模型

时间: 2024-10-15 20:37:48

django开发个人简易Blog——数据模型的相关文章

django开发个人简易Blog—nginx+uwsgin+django1.6+mysql 部署到CentOS6.5

前面说完了此项目的创建及数据模型设计的过程.如果未看过,可以到这里查看,并且项目源码已经放大到github上,可以去这里下载. 代码也已经部署到sina sea上,地址为http://fengzheng.sinaapp.com/ 先跳过视图展示及表单处理的部分,先介绍一下如何部署. 标题中已经把部署环境介绍的很清楚了: 服务器:CentOS6.5 其实就是我的开发机 mysql:Server version: 5.1.73 Source distribution nginx版本: nginx/1

django开发个人简易Blog——构建项目结构

开发之前第一步,就是构造整个的项目结构.这就好比作一幅画,第一步就是描绘轮廓,有了轮廓,剩下的就是慢慢的填充细节.项目结构规划如下图: 项目结构描述: 本项目以fengzhengBlog为根目录. admin.blogapp是两个app目录,用于实现项目主要功能:包括模型定义.视图定义等 css.js.images分别为样式文件.js.图片的静态文件存放目录. template目录存放模板文件. ueEditor是富文本编辑器uEditor的目录. settings.py是全局配置文件,urls

Django初体验——搭建简易blog

前几天在网上看到了篇采用Django搭建简易博客的视频,好奇心驱使也就点进去学了下,毕竟自己对于Django是无比敬畏的,并不是很了解,来次初体验. 本文的操作环境:ubuntu.python2.7.Django1.8.6.Pycharm5.其实自从使用了ubuntu之后就很神奇的喜欢上了它,真的用起来方便很多. 1.Django项目文件并创建blog应用 (1)可以在终端中建立Django项目,使用django-admin startproject ...直接上图: 建立blog应用: (2)

再次用CodeIgniter实现简易blog

天变冷了,人也变得懒了不少,由于工作的需要,最近一直在学习CodeIgniter(CI)框架的使用,没有系统的从PHP基本语法学起,在网上靠百度谷歌,东拼西凑的实现了一些简单的功能.所以,老PHPer可以绕道了. PHP实现简易blog 参考该篇博客所实现的功能,重新用CI实现了一下. 主要实现文章的添加.查看.删除.搜索.这里面最难实现的是文章分页,看似简单的功能,却费了一些功夫. 当然,离一个完整的系统还有很多功能没开发,这里只是简单引用了bootstrap的样式. MVC模型      

Django开发BBS---51网络课程笔记(1)

51上有一个用Django开发BBS论坛的免费视频,就开发过程写个简要的笔记.课程地址:http://edu.51cto.com/course/course_id-2787.html 论坛的开发以"抽屉"http://dig.chouti.com/ 为原型.开发一个类似的BBS网站. 抽屉网站的主界面结构: 由此,在创建项目之前,确定数据的表结构: 首先,应当有一个发帖的表, 其次, 是哪个用户发的,应当创建一个用户表 再有,应当有一个评论表.评论表中有一个id与帖子表相连 还应当建立

CentOS6设置Django开发环境

今天在我的Centos6.5机器上安装 Django 开发环境,在安装完使用 "django-admin.py startproject myapp" 创建应用的时候报了下面的错误 $ django-admin.py startproject myapp Traceback (most recent call last): File "/home/jhadmin/myenv/bin/django-admin.py", line 2, in <module>

Django开发BBS---51网络课程笔记(目录)

这是51cto中bbs课程中的一个项目,这里写一下每节的目录: Django开发BBS---51网络课程笔记(1) 这部分主要介绍了数据库的搭建及站点管理 http://4440271.blog.51cto.com/4430271/1663863 Bootstrap开发 这不分主要讲前端的设计 http://4440271.blog.51cto.com/4430271/1663934 Django开发BBS---51网络课程笔记(2) 这部分主要讲view与前端的衔接部分 http://4440

django开发实战笔记-1-2017-03-19

Django 开发环境的搭建和创建 website工程 要开始 Django 开发,你需要从中掌握以下知识: 如何创建 Django 工程,并了解 Django 默认的工程目录结构 如何创建 Django APP 理解 Django 的MTV 模式,学会编写 Model.View.Template Django 如何处理静态文件,即各种 CSS,JS,以及图片文件等 一:环境配置 1.Centos [[email protected] myweb]# uname -a Linux localho

Django开发实战之URLconf详解

什么是URLconf? URLconf 就像是 Django 所支撑网站的目录. 它的本质是 URL 模式以及要为该 URL 模式调用的视图函数之间的映射表. 你就是以这种方式告诉 Django,对于这个 URL 调用这段代码,对于那个 URL 调用那段代码. 上篇文章(Django实战:构建一个blog)中我们新建了一个工程mysite,mysite/mysite/urls.py这个文件(自动创建的)就对应URLconf,我们查看一下这个文件,如下图所示: 这个文件必须暴露出一个urlpatt