文档章节

使用Django开发一个图书管理系统 03----迈出第一步,建立项目

luckTom
 luckTom
发布于 2014/11/13 10:07
字数 1262
阅读 695
收藏 0

精选30+云产品,助力企业轻松上云!>>>

BOOKMS是一个公司内部的图书管理系统。

本系列用多次迭代方法,逐步实现一个图书管理系统BOOKMS。

本文主要介绍使用PyCharm建立Django项目,然后建立核心的领域模型。

 

一.建立项目

首先我们要迈出我们的第一步,使用PyCharm建立我们的BOOKMS项目,注意路径里不能有中文,项目类型选择Django。

因为我们项目后台管理使用admin,所以这里我们直接启用Django admin模块

到这里我们就在图上的目录里创建了一个基本的项目,可以点击运行然后到 http://127.0.0.1:8000/看看,当然一个华丽丽的错误。

从模型开始开发似乎是个好主意。一方面模型是整个应用的核心,实现了应用的业务数据和对业务数据进行操作的约束,而视图和模板只是向用户提供操作和展现这些数据的界面;另一方面模型相对于系统的其他部分更加稳定,将模型先确定下来有助于系统其他部分的实现。DDD(领域驱动设计)更进一步将模型中的核心对象抽取出来作为“领域模型”。

从BOOKMS来看,图书(Book) 应该是模型中的核心对象之一。就让我们先来实现Book模型。

Django约定必须要创建app才能使用模型。这也是Django的哲学之一:
Django认为一个project包含很多个Django appl;project提供配置文件,比如数据库连接信息、 安装的app清单、模板路径等等;而一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。
app可以在多个project之间很容易的复用。比如Django自带的注释系统和自动管理界面。

接下来我们添加一个app:bookapp

cmd命令行到bookms目录然后执行

python manage.py startapp bookapp(这里也可以使用pycharm执行 但是觉得不太好用)

最终目录是这样的:

二.用代码定义模型

class Book(models.Model):
    class Meta:
        verbose_name = '图书'
        verbose_name_plural = verbose_name
    isbn          = models.CharField('ISBN',max_length=13,unique=True)
    title           = models.CharField('书名',max_length=200)
    subtitle           = models.CharField('副标题',max_length=200,blank=True)
    pages           = models.IntegerField('页数',blank=True)
    author          = models.CharField('作者',max_length=60)
    translator          = models.CharField('译者',max_length=60,blank=True)
    price           = models.CharField('定价',max_length=60,blank=True)
    publisher       = models.CharField('出版社',max_length=200,blank=True)
    pubdate         = models.CharField('出版日期',max_length=60,blank=True)
    cover_img        = models.URLField('封面图',blank=True)
    summary        = models.TextField ('内容简介',blank=True,max_length=2000)
    author_intro        = models.TextField ('作者简介',blank=True,max_length=2000)

    def __unicode__(self):
        return str(self.title)

模型如上面代码,字段是参照豆瓣API的返回的(以后我们的图书肯定是从豆瓣获取数据啦……)。

三.部署模型到数据库

Django认为所以的事情都需要你的确认,所以我们的project还需要一些配置才能工作。这里我们在bookms项目建立一个db目录然后把我们前一篇里弄的那个bookms.db文件放进来。

然后修改配置文件settings.py, 将DATABASES改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', 
        'NAME': 'db/bookms.db',                      
        'USER': '',                      
        'PASSWORD': '',                  
        'HOST': '',                      
        'PORT': '',                      
    }
}

然后修改配置文件settings.py,使我们的bookapp生效,将INSTALLED_APPS改为:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'BOOKMS.bookapp',
)

只是在最后加入一行 'BOOKMS.bookapp',前面那堆东西是因为我们开启了admin模块。

然后修改一下:

LANGUAGE_CODE = 'zh-CN'

TIME_ZONE = 'Asia/Shanghai'

让这玩意变成中文的。

然后我们来验证一下模型:

cmd命令行到bookms目录然后执行

python manage.py validate
0 errors found

然后可以来看看这个模型会被生成什么样的sql,同样在命令行执行:

 
python manage.py sqlall bookapp

BEGIN;
CREATE TABLE "bookapp_book" (
    "id" integer NOT NULL PRIMARY KEY,
    "isbn" varchar(13) NOT NULL UNIQUE,
    "title" varchar(200) NOT NULL,
    "subtitle" varchar(200) NOT NULL,
    "pages" integer NOT NULL,
    "author" varchar(60) NOT NULL,
    "translator" varchar(60) NOT NULL,
    "price" varchar(60) NOT NULL,
    "publisher" varchar(200) NOT NULL,
    "pubdate" varchar(60) NOT NULL,
    "cover_img" varchar(200) NOT NULL,
    "summary" text NOT NULL,
    "author_intro" text NOT NULL
)
;
COMMIT;

最后将模型导入数据库:

python manage.py syncdb

Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table bookapp_book

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'lt'): admin
E-mail address: admin@test.com
Warning: Password input may be echoed.
Password: 123456
Warning: Password input may be echoed.
Password (again): 123456
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.

因为我们启用了admin模块所以这里步骤稍微复杂一点,要建立一个默认的管理员账户。

最后我们再次run系统并浏览http://127.0.0.1:8000/admin/终于可以看到界面了,用admin和123456登录看看成果吧。

四.将项目放到SVN进行版本控制

PyCharm已经集成了很多的版本控制,这里我们使用svn。

luckTom
粉丝 5
博文 18
码字总数 142
作品 0
南京
技术主管
私信 提问
加载中
请先登录后再评论。
Linux-基础学习(四)-部署图书管理系统项目

部署图书管理项目需要以下软件 项目文件(django项目文件夹) 数据库文件(django项目对应的数据库文件) centos7(linux本体) nginx(反向代理以及静态文件收集) uWSGI(代理服务器与后端的...

osc_0q2mvgjv
2019/04/09
1
0
Django——图书管理系统

基于Django的图书管理系统 1.主体功能 2.界面展示 图书馆首页: 添加书籍页面: 其他页面与上述两页类似,不做赘述。 3.项目详情 3.1 Django的简介 是一个由Python编写的具有完整架站能力的开...

Huang_Yc
2018/08/23
0
0
Django——图书管理系统

基于Django的图书管理系统 1.主体功能 2.界面展示 图书馆首页: 添加书籍页面: 其他页面与上述两页类似,不做赘述。 3.项目详情 3.1 Django的简介 是一个由Python编写的具有完整架站能力的开...

Huang_Yc
2018/08/23
0
0
Django——图书管理系统

基于Django的图书管理系统 1.主体功能 2.界面展示 图书馆首页: 添加书籍页面: 其他页面与上述两页类似,不做赘述。 3.项目详情 3.1 Django的简介 是一个由Python编写的具有完整架站能力的开...

Huang_Yc
2018/08/23
0
0
【Python3.6+Django2.0+Xadmin2.0系列教程之一(入门篇-上)】环境搭建及项目创建

由于工作需要,接触了大半年时间的Django+xadmin框架,一直没空对这块对进行相关的梳理。最近在同事的怂恿下,就在这分享下笔者的学习及工作经验吧。 好了,话不多说,下面开始进入正题: 转...

osc_lmvsge82
2018/04/16
3
0

没有更多内容

加载失败,请刷新页面

加载更多

题解-洛谷P4724 【模板】三维凸包

洛谷P4724 【模板】三维凸包 给出空间中 \(n\) 个点 \(p_i\),求凸包表面积。 数据范围:\(1\le n\le 2000\)。 这篇题解因为是世界上最逊的人写的,所以也会有求凸包体积的讲解。 三位向量的...

osc_srnunz15
38分钟前
11
0
关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach

关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach 这个问题出自《动手学深度学习pytorch》中RNN 第六章6.4节内容,如下图所示: 当时看到这个注释,我是一脸懵逼,(...

osc_rl6hs0bo
39分钟前
11
0
为什么 wait 方法要在 synchronized 中调用?

作者:Yujiaao https://segmentfault.com/a/1190000019962661 一个有难度的 Java 问题,wait 和 notify。 它们是在有 synchronized 标记的方法或 synchronized 块中调用的,因为 wait 和 no...

Java技术栈
39分钟前
18
0
【退役贴】真·蒟蒻的acm感悟&回忆

窝是一只打过铁费了很大力气仍然只能大四拿铜的辣鸡的辣鸡的辣鸡…… 窝是一只打过铁费了很大力气仍然只能大四拿铜的辣鸡的辣鸡的辣鸡…… 窝是一只打过铁费了很大力气仍然只能大四拿铜的辣鸡...

osc_sqfqhs81
39分钟前
14
0
查询反模式 - GroupBy、HAVING的理解

为了最简单地说明问题,我特地设计了一张这样的表。    一、GROUP BY单值规则   规则1:单值规则,跟在SELECT后面的列表,对于每个分组来说,必须返回且仅仅返回一个值。   典型的表现...

osc_n87a5jpv
40分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部