(转)Django ====> 实战学习篇二 需求分析及设计,创建第一个模型---购物车的应用
#####购物车应用:
角色:买方,卖方
用例:买方----浏览产品,创建订单
卖方-----管理查品,管理订单,管理发货
界面设计:
买方:
- 目录页明显查品信息,可以选择一个产品,打开购物车界面,同时加入车
- 购物车界面,可以返回产品目录界面,也可以进入支付界面
- 订单界面,填写必要信息,确认后显示收据页面
- 收据页面,通知买方订单已经被接受
卖方:
- 登录界面,管理产品要登录系统,登录后显示菜单界面
- 包含产品维护和订单查看
- 创建长品界面,加入查品
- 产品信息页面,可修改或者删除
- 订单处理界面,可忽略或者处理
敏捷开发,尽快开始开发。迭代的过程中会逐渐明确,接下来第一轮迭代开发。
####创建第一个模型:
从模型开始是一个好的主义,模型是整个数据的核心,实现了应用数据的业务和对业务数据进行操作的约束,二模板和视图都是操作和显示这些数据的界面;还有就是模型相对于其他部分相对稳定,模型确定下来有助于其他部分的开发。
Depot应用来看,产品Product是模型中的关键部分,先来实现它。
Django 约定要建立app才能使用模型,django的哲学之一;
一个app是一套django的功能集合,包括模型和视图,以python包的形式存在;
app在多个project之间可以复用。
python manage.py startapp depotapp
在工程目录下创建一个depotapp目录
用Python代码定义数据库:出于以下原因 1. 效率。运行时扫描数据库能会带来性能问题。 2. 明确性。只通过Mode可l类就完全知道数据库中有哪些字段,而不需要再切换到migration或schema文件中去查看,更不需要去查看数据库结构。
3. 一致性。你看到的只是Python代码,完全不需要将大脑切换到”数据库模式“,能极大提高开发效率。 4. 版本控制。rails中的数据库结构版本保存在一个个的migration文件中,这简直就是版本管理的”反模式“。Django的方式是管理Model代码文件的版本。 5. 可扩展性。可以定义数据库中不存在的”字段类型“。比如Email,URL,等等。 当然,Django也提供从现有数据库表中自动扫描生成模型的工具。
编写下边的Model类:
from django.db import models class Product(models.Model): title = models.CharField(max_length=100) description = models.TextField() image_url = models.CharField(max_length=200) price = models.DecimalField(max_digits=8,decimal_places=2)
如同其他的orm,Id字段是默认声明的不需要单独处理
部署模型:
修改setting文件中的数据库和app部分如下:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'db/development.sqlite3', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } } 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', 'depot.depotapp', )
验证模型情况:
python manage.py validate
0 errors found
查看model生成的数据库:
python manage.py sqlall depotapp BEGIN; CREATE TABLE "depotapp_product" ( "id" integer NOT NULL PRIMARY KEY, "title" varchar(30) NOT NULL, "description" text NOT NULL, "image_url" varchar(200) NOT NULL, "price" decimal NOT NULL ) ; COMMIT;
将模型导入数据库:
python manage.py syncdb
完成第一个模型的创建
“某度”空间 http://hi.baidu.com/new/wenjiashe521
cnblogs空间 http://www.cnblogs.com/wenjiashe521/