文档章节

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

luckTom
 luckTom
发布于 2014/11/13 10:07
字数 1262
阅读 499
收藏 0
点赞 0
评论 0

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。

本文转载自:http://www.cnblogs.com/lt1983/archive/2012/05/16/2503640.html

共有 人打赏支持
luckTom
粉丝 5
博文 18
码字总数 142
作品 0
南京
技术主管
第二章:入门

第二章:入门 由于现代Web开发环境由多个部件组成,安装Django需要几个步骤。 这一章,我们将演示如何安装框架以及一些依赖关系。 因为Django就是纯Python代码,它可以运行在任何Python可以运...

阿帆提 ⋅ 2016/11/10 ⋅ 0

4 款基于 Django 框架的开源软件推荐

Django 是一款高性能的Python web框架,鼓励快速开发和干净、务实的设计。 Django 项目是一个定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django的重点是尽可...

老枪 ⋅ 2011/05/13 ⋅ 4

使用Django开发一个图书管理系统 05---改造界面

BOOKMS是一个公司内部的图书管理系统。 本系列用多次迭代方法,逐步实现一个图书管理系统BOOKMS。 本文主要介绍使用bootstrap美化前台页面和修改admin模块的添加图书模块时使用豆瓣api获取数...

luckTom ⋅ 2014/11/13 ⋅ 0

Django学习1---安装Django,创建、启动项目

最近在自己独立开发一套运维管理系统,在一些python的web框架中选择了Django进行开发,在这里把开发过程中的一些操作记录下来,供自己回顾,也供初学django的朋友们参考! 本例是基于python3...

icenycmh ⋅ 2017/11/27 ⋅ 0

《Python高效开发实战》实战演练——开发Django站点1

6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。 6.12.1 建立项目 在进行Django开发之前需要先...

woIwoI ⋅ 2016/11/17 ⋅ 0

《Python高效开发实战》实战演练——开发Django站点1

6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。 6.12.1 建立项目 在进行Django开发之前需要先...

柯南和由美 ⋅ 2016/11/28 ⋅ 0

《Python高效开发实战》实战演练——开发Django站点1

实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。 6.12.1 建立项目 在进行Django开发之前需要先用d...

woIwoI ⋅ 2017/01/11 ⋅ 0

《Python高效开发实战》实战演练——开发Django站点1

6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程。本节通过建立一个消息录入页面演示Django的开发流程及相关技术。 6.12.1 建立项目 在进行Django开发之前需要先...

woIwoI ⋅ 2016/11/28 ⋅ 0

CentOS6+Apache2+Django1.4的配置

环境: OS:CentOS 6.2 x64 Apache:2 Python:2.6 Django:1.4.2 场景: 我的应用名称是beaver,放在下面的位置: /var/www/cgi-bin/beaver 需求: 使用wsgi,把Django项目,发布到apache下。...

K-X ⋅ 2012/11/07 ⋅ 0

Django学习--003--视图

1.首先新建一个项目,进入想要建立项目的文件夹,使用下面命令: 注:the-site为项目名称,可以自己命名。 2.成功后,会出现使用tree命令,会出现如下文件结构。 注:Django 1.8.x 以上的,还...

clgo ⋅ 2016/04/26 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 33分钟前 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 53分钟前 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部