一、创建项目test1及应用booktest
创建应用booktest
二、安装应用
在test1/settings.py中INSTALLED_APPS下添加应用的名称就可以完成安装
初始项目的INSTALLED_APPS如下图:
在元组中添加一个新的项,当前示例为booktest
'booktest',
三、设计模型
1.定义模型类
- 模型类定义在models.py文件中,继承自models.Model类
- 说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长
- 图书表结构设计:
- 表名:BookInfo
- 图书名称:btitle
- 图书发布日期:bpub_date
- 英雄表结构设计:
- 表名:HeroInfo
- 英雄姓名:hname
- 英雄性别:hgender
- 英雄简介:hcontent
- 所属图书:hbook
- 图书-英雄的关系为一对多
- 根据设计,在models.py中定义模型类如下:
from django.dbimport models
classBookInfo(models.Model):
btitle =models.CharField(max_length=20)
bpub_date =models.DateField()
def __str__(self):
return "%d" % self.pk
classHeroInfo(models.Model):
hname =models.CharField(max_length=20)
hgender =models.BooleanField()
hcontent = models.CharField(max_length=100)
hBook =models.ForeignKey('BookInfo')
def __str__(self):
return "%d" % self.pk
2.迁移
- 默认采用sqlite3数据库
- 迁移前目录结构如下图:
- 迁移由两步完成
- 1.生成迁移文件:根据模型类生成创建表的语句
- 2.执行迁移:根据第一步生成的语句在数据库中创建表
- 生成迁移文件命令:python manage.py makemigrations
- 执行迁移命令:python manage.py migrate
- 迁移后目录结构如下图:
3.数据操作
- 进入项目的shell,进行简单的API操作
- 按ctrl+d或输入quit()可以退出shell
python manage.py shell
- 首先引入booktest/models中的类:
frombooktest.models import BookInfo,HeroInfo
- 查询所有图书信息:
BookInfo.objects.all()
- 因为当前并没有数据,所以返回空列表
- 新建图书对象:
b=BookInfo()
b.btitle="射雕英雄传"
from datetime import date
b.bpub_date=date(1990,1,10)
b.save()
注:多个图书对象需要多次退出多次新建对象,否则覆盖,因为这里数据库是sqlite3
四、视图
1.定义视图
- 打开booktest/views.py文件,定义视图index如下
from django.shortcuts import render
from .models import BookInfo
#首页,展示所有图书
def index(reqeust):
#查询所有图书
booklist = BookInfo.objects.all()
#将图书列表传递到模板中,然后渲染模板
return render(reqeust, 'booktest/index.html', {'booklist': booklist})
#详细页,接收图书的编号,根据编号查询,再通过关系找到本图书的所有英雄并展示
def detail(reqeust, id):
#根据图书编号对应图书
book = BookInfo.objects.get(pk=id)
#将图书信息传递到模板中,然后渲染模板
return render(reqeust, 'booktest/detail.html', {'book': book})
2.配置URLconf
- 1.在booktest/应用下创建urls.py文件,定义代码如下
from django.conf.urls import url
#引入视图模块
from . import views
urlpatterns = [
#配置首页url
url(r'^$', views.index),
#配置详细页url,\d+表示多个数字,小括号用于取值,建议复习下正则表达式
url(r'^(\d+)$',views.detail),
]
- 2.包含到项目中:打开test1/urls.py文件,test1/urls.py文件完整代码如下
fromdjango.conf.urls import include, url
from django.contrib import admin
urlpatterns= [
url(r'^admin/',include(admin.site.urls)),
url(r'^',include('booktest.urls')),
]
五、模板
创建模板
为应用booktest下的视图index创建模板index.html,目录结构如下图:
- 设置查找模板的路径:打开test1/settings.py文件,设置TEMPLATES的DIRS值
'DIRS': [os.path.join(BASE_DIR,'templates')],
定义模板
创建templates/booktest/index.html文件如下
<html>
<head>
<title>首页</title>
</head>
<body>
<h1>图书列表</h1>
<ul>
{#遍历图书列表#}
{%for book in booklist%}
<li>
{#输出图书名称,并设置超链接,链接地址是一个数字#}
<ahref="{{book.id}}">{{book.btitle}}</a>
</li>
{%endfor%}
</ul>
</body>
</html>
创建templates/booktest/detail.html文件如下
<html>
<head>
<title>详细页</title>
</head>
<body>
{#输出图书标题#}
<h1>{{book.btitle}}</h1>
<ul>
{#通过关系找到本图书的所有英雄,并遍历#}
{%for hero inbook.heroinfo_set.all%}
{#输出英雄的姓名及描述#}
<li>{{hero.hname}}---{{hero.hcontent}}</li>
{%endfor%}
</ul>
</body>
</html>
最终文件如下:
六、开发服务器
运行服务器命令:pythonmanage.py runserver
七、在浏览器地址栏中输入网址
http://127.0.0.1:8000/
网页显示效果如下图,视图被成功执行了