Django创建图书管理项目(完整版
一、創(chuàng)建項(xiàng)目test1及應(yīng)用booktest
?
?
創(chuàng)建應(yīng)用booktest
?
二、安裝應(yīng)用
在test1/settings.py中INSTALLED_APPS下添加應(yīng)用的名稱(chēng)就可以完成安裝
初始項(xiàng)目的INSTALLED_APPS如下圖:
在元組中添加一個(gè)新的項(xiàng),當(dāng)前示例為booktest
'booktest',
?
三、設(shè)計(jì)模型
1.定義模型類(lèi)
- 模型類(lèi)定義在models.py文件中,繼承自models.Model類(lèi)
- 說(shuō)明:不需要定義主鍵列,在生成時(shí)會(huì)自動(dòng)添加,并且值為自動(dòng)增長(zhǎng)
- 圖書(shū)表結(jié)構(gòu)設(shè)計(jì):
- 表名:BookInfo
- 圖書(shū)名稱(chēng):btitle
- 圖書(shū)發(fā)布日期:bpub_date
- 英雄表結(jié)構(gòu)設(shè)計(jì):
- 表名:HeroInfo
- 英雄姓名:hname
- 英雄性別:hgender
- 英雄簡(jiǎn)介:hcontent
- 所屬圖書(shū):hbook
- 圖書(shū)-英雄的關(guān)系為一對(duì)多
- 根據(jù)設(shè)計(jì),在models.py中定義模型類(lèi)如下:
?
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.遷移
- 默認(rèn)采用sqlite3數(shù)據(jù)庫(kù)
- 遷移前目錄結(jié)構(gòu)如下圖:
- 遷移由兩步完成
- 1.生成遷移文件:根據(jù)模型類(lèi)生成創(chuàng)建表的語(yǔ)句
- 2.執(zhí)行遷移:根據(jù)第一步生成的語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建表
- 生成遷移文件命令:python manage.py makemigrations
- 執(zhí)行遷移命令:python manage.py migrate
- 遷移后目錄結(jié)構(gòu)如下圖:
?
3.數(shù)據(jù)操作
- 進(jìn)入項(xiàng)目的shell,進(jìn)行簡(jiǎn)單的API操作
- 按ctrl+d或輸入quit()可以退出shell
python manage.py shell
- 首先引入booktest/models中的類(lèi):
frombooktest.models import BookInfo,HeroInfo
- 查詢(xún)所有圖書(shū)信息:
BookInfo.objects.all()
- 因?yàn)楫?dāng)前并沒(méi)有數(shù)據(jù),所以返回空列表
- 新建圖書(shū)對(duì)象:
b=BookInfo()
b.btitle="射雕英雄傳"
from datetime import date
b.bpub_date=date(1990,1,10)
b.save()
?
注:多個(gè)圖書(shū)對(duì)象需要多次退出多次新建對(duì)象,否則覆蓋,因?yàn)檫@里數(shù)據(jù)庫(kù)是sqlite3
?
四、視圖
1.定義視圖
- 打開(kāi)booktest/views.py文件,定義視圖index如下
?
from django.shortcuts import render
from .models import BookInfo
?
#首頁(yè),展示所有圖書(shū)
def index(reqeust):
???#查詢(xún)所有圖書(shū)
???booklist = BookInfo.objects.all()
???#將圖書(shū)列表傳遞到模板中,然后渲染模板
???return render(reqeust, 'booktest/index.html', {'booklist': booklist})
?
#詳細(xì)頁(yè),接收?qǐng)D書(shū)的編號(hào),根據(jù)編號(hào)查詢(xún),再通過(guò)關(guān)系找到本圖書(shū)的所有英雄并展示
def detail(reqeust, id):
???#根據(jù)圖書(shū)編號(hào)對(duì)應(yīng)圖書(shū)
???book = BookInfo.objects.get(pk=id)
???#將圖書(shū)信息傳遞到模板中,然后渲染模板
???return render(reqeust, 'booktest/detail.html', {'book': book})
?
2.配置URLconf
- 1.在booktest/應(yīng)用下創(chuàng)建urls.py文件,定義代碼如下
?
from django.conf.urls import url
#引入視圖模塊
from . import views
urlpatterns = [
??? #配置首頁(yè)url
???url(r'^$', views.index),
??? #配置詳細(xì)頁(yè)url,\d+表示多個(gè)數(shù)字,小括號(hào)用于取值,建議復(fù)習(xí)下正則表達(dá)式
???url(r'^(\d+)$',views.detail),
]
?
- 2.包含到項(xiàng)目中:打開(kāi)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')),
]
?
五、模板
?
創(chuàng)建模板
為應(yīng)用booktest下的視圖index創(chuàng)建模板index.html,目錄結(jié)構(gòu)如下圖:
- 設(shè)置查找模板的路徑:打開(kāi)test1/settings.py文件,設(shè)置TEMPLATES的DIRS值
'DIRS': [os.path.join(BASE_DIR,'templates')],
?
定義模板
創(chuàng)建templates/booktest/index.html文件如下
?
<html>
<head>
??? <title>首頁(yè)</title>
</head>
<body>
<h1>圖書(shū)列表</h1>
<ul>
??? {#遍歷圖書(shū)列表#}
??? {%for book in booklist%}
??? <li>
???? {#輸出圖書(shū)名稱(chēng),并設(shè)置超鏈接,鏈接地址是一個(gè)數(shù)字#}
????? <ahref="{{book.id}}">{{book.btitle}}</a>
??? </li>
??? {%endfor%}
</ul>
</body>
</html>
?
創(chuàng)建templates/booktest/detail.html文件如下
?
<html>
<head>
??? <title>詳細(xì)頁(yè)</title>
</head>
<body>
{#輸出圖書(shū)標(biāo)題#}
<h1>{{book.btitle}}</h1>
<ul>
??? {#通過(guò)關(guān)系找到本圖書(shū)的所有英雄,并遍歷#}
??? {%for hero inbook.heroinfo_set.all%}
??? {#輸出英雄的姓名及描述#}
???<li>{{hero.hname}}---{{hero.hcontent}}</li>
???{%endfor%}
</ul>
</body>
</html>
?
最終文件如下:
?
?
六、開(kāi)發(fā)服務(wù)器
運(yùn)行服務(wù)器命令:pythonmanage.py runserver
?
七、在瀏覽器地址欄中輸入網(wǎng)址
http://127.0.0.1:8000/
網(wǎng)頁(yè)顯示效果如下圖,視圖被成功執(zhí)行了
?
總結(jié)
以上是生活随笔為你收集整理的Django创建图书管理项目(完整版的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数组排序(冒泡、排序)
- 下一篇: Flask入门之上传文件到本地服务器