当前位置:   article > 正文

Django创建图书管理项目(完整版_django 创建一个图书demo

django 创建一个图书demo

一、创建项目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/

网页显示效果如下图,视图被成功执行了


 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/629712
推荐阅读
相关标签
  

闽ICP备14008679号