### 设计介绍
* 本示例完成“图书-英雄”信息的维护,需要存储两种数据:图书、英雄
* 图书表结构设计:
* 表名:BookInfo
* 图书名称:btitle
* 图书发布时间:bpub_date
* 英雄表结构设计:
* 表名:HeroInfo
* 英雄姓名:hname
* 英雄性别:hgender
* 英雄简介:hcontent
* 所属图书:hbook
* 图书-英雄的关系为一对多
* * * * *
### 数据库配置
* 在一个项目中可以创建一到多个应用,每个应用进行一种业务处理
* 创建应用的命令:
`python manage.py startapp booktest`
* 应用的目录结构如下图
![](https://box.kancloud.cn/4d8d5c7e6bf173d8e127db98c20e78d9_184x147.png)
#### 定义模型类
* 有一个数据表,就有一个模型类与之对应
* 打开models.py文件,定义模型类
* 引入包from django.db import models
* 模型类继承自models.Model类
* 说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长
* 当输出对象时,会调用对象的str方法
~~~
#!usr/bin/python
# -*- coding: utf-8 -*-
from django.db import models
class BookInfo(models.Model):
# 定义类属性是为了映射数据库表结构
btitle = models.CharField(max_length=20)
bpub_date = models.DateTimeField()
def __str__(self):
return self.btitle.encode('utf-8') # 不转码 后台会报错
class HeroInfo(models.Model):
hname = models.CharField(max_length=10)
hgender = models.BooleanField()
hcontent = models.CharField(max_length=1000)
hbook = models.ForeignKey(BookInfo)
def __str__(self):
return self.hname.encode('utf-8')
~~~
#### 生成数据表
* 激活模型:编辑settings.py文件,将booktest应用加入到installed_apps中
![](https://box.kancloud.cn/0d5768d3bd3d918f6e383f2afa1c4b5c_393x213.png)
* 生成迁移文件:根据模型类生成sql语句
~~~
python manage.py makemigrations
~~~
* 迁移文件被生成到应用的migrations目录
![](https://box.kancloud.cn/558ae317ba2109d0b7c5c9d9a92fa42e_188x72.png)
* 执行迁移:执行sql语句生成数据表
~~~
python manage.py migrate
~~~
#### 测试数据操作
* 进入python shell,进行简单的模型API练习
~~~
python manage.py shell
~~~
* 进入shell后提示如下:
![](https://box.kancloud.cn/e6a394d1c9a0c80fea1328e64c708e57_652x104.png)
* 引入需要的包:
~~~
from booktest.models import BookInfo,HeroInfo
from django.utils import timezone
from datetime import *
~~~
* 查询所有图书信息:
~~~
BookInfo.objects.all()
~~~
* 新建图书信息:
~~~
b = BookInfo()
b.btitle="射雕英雄传"
b.bpub_date=datetime(year=1990,month=1,day=10)
b.save()
~~~
* 查找图书信息:
~~~
b=BookInfo.objects.get(pk=1) # pk==primary key
~~~
* 输出图书信息:
~~~
b
b.id
b.btitle
~~~
* 修改图书信息:
~~~
b.btitle=u"天龙八部"
b.save()
~~~
* 删除图书信息:
~~~
b.delete()
~~~
#### 关联对象的操作
* 对于HeroInfo可以按照上面的操作方式进行
* 添加,注意添加关联对象
~~~
h=HeroInfo()
h.htitle=u'郭靖'
h.hgender=True
h.hcontent=u'降龙十八掌'
h.hBook=b
h.save()
~~~
* 获得关联集合:返回当前book对象的所有hero
~~~
b.heroinfo_set.all()
~~~
* 有一个HeroInfo存在,必须要有一个BookInfo对象,提供了创建关联的数据:
~~~
h=b.heroinfo_set.create(htitle=u'黄蓉',hgender=False,hcontent=u'打狗棍法')
h
~~~
- 系统编程
- 1.进程
- 1.1.fork
- 1.2.多个进程能否修改全局变量
- 1.3多次fork的问题
- 1.4.进程的创建-multiprocessing
- 1.5.进程的创建-Process子类
- 1.6.进程池Pool
- 1.7.进程间通信--Queue
- 2.线程
- 2.1.多线程-Threading
- 2.2.threading注意点
- 2.3.多线程-共享全局变量
- 2.4.线程和进程的对比
- 2.5.同步
- 2.6.互斥锁
- 2.7.多线程-非共享数据
- 2.8.死锁
- 2.9.同步应用
- 2.10.生产者与消费者模式
- 2.11.ThreadLocal
- 2.12.异步
- 2.13.GIL的问题
- 网络编程
- 1.网络概述-udp
- 1.1.TCP/IP
- 1.2.端口
- 1.3.ip地址
- 1.4.socket简介
- 1.5.UDP介绍
- 1.6.udp网络程序-发送数据
- 1.7.udp网络程序-发送、接收数据
- 1.8.udp网络程序-端口问题
- 1.9.udp绑定信息
- 2.0.udp网络通信过程
- 2.1.udp应用:echo服务器
- 2.2.udp应用:聊天室
- 2.3.udp总结
- 2.4.udp综合-模拟QQ
- 2.TFTP下载和上传
- 3.TCP/IP
- 3.1.打开浏览器访问百度的过程
- web服务器
- 1.1.MyWebServer.py
- 1.2.MyWebFramework.py
- 正则
- 1.1.re模块
- 1.2.字符
- 1.3.原始字符串
- 1.4.表示数量
- 1.5.表示边界
- 1.6.匹配分组
- 1.7.贪婪和非贪婪
- 数据结构和算法
- 1.引入概念
- 1.1.第一次尝试
- 1.2.算法的提出
- 1.3.第二次尝试
- 1.4.算法效率衡量
- 1.5.算法分析
- 1.6.常见时间复杂度
- 1.7.python内置类型性能分析
- 1.8.数据结构
- 2.顺序表
- 2.1.顺序表的形式
- 2.2.顺序表的结构和实现
- 2.3.顺序表的操作
- 2.4.python中的顺序表
- 3.链表
- 3.1.单向链表
- 3.2.单向循环链表
- 3.3.双向链表
- 4.栈
- 4.1.栈的结构实现
- 5.队列
- 5.1.队列的实现
- 5.2.双端队列
- 6.排序和搜索
- 6.1.冒泡排序
- 6.2.选择排序
- 6.3.插入排序
- 6.4.快速排序
- 6.5.哈希排序
- 6.6.归并排序
- 6.7.常见排序算法效率比较
- 6.8.搜索
- 7.树与树算法
- 7.1.二叉树
- 7.2.二叉树的遍历
- 初识Django
- 1.小白
- 2.初次尝试
- 3.管理站点
- 4.视图
- 5.模板
- django模型
- 1.定义模型
- 2.模型成员
- 3.模型查询
- 4.自连接
- django视图
- django模板
- django高级
- django第三方
- django-git