<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          菜鳥(niǎo)入門!Django入門案例:圖書(shū)管理系統(tǒng)

          共 7278字,需瀏覽 15分鐘

           ·

          2021-12-11 05:33


          大家好,我是菜鳥(niǎo)哥!

          Web開(kāi)發(fā),也就是寫(xiě)網(wǎng)站,是Django的一大應(yīng)用方向。而Django就是目前最流行的python web框架之一。很多同學(xué)想了解這方面的學(xué)習(xí)案例,今天我們就給大家分享一個(gè):用Django實(shí)現(xiàn)圖書(shū)管理系統(tǒng)


          無(wú)需寫(xiě)sql,不需寫(xiě)前端,利用Django自帶的Admin和ORM框架就能輕松實(shí)現(xiàn)一個(gè)多對(duì)多表關(guān)系的增刪改查。

          開(kāi)發(fā)流程

          版本

          Django 3.1.1

          python 3.6.12

          (django)?E:\python_Projects\django_demo>pip?show?django
          Name:?Django
          Version:?3.1.1
          Summary:?A?high-level?Python?Web?framework?that?encourages?rapid?development?and?clean,?pragmatic?design.
          Home-page:?https://www.djangoproject.com/
          Author:?Django?Software?Foundation
          Author-email:[email protected]
          License:?BSD-3-Clause
          Location:?d:\anaconda3\envs\django\lib\site-packages
          Requires:?pytz,?asgiref,?sqlparse
          Required-by:

          (django)?E:\python_Projects\django_demo>python?-V
          Python?3.6.12?::?Anaconda,?Inc.

          django安裝:

          pip?install?Django?-i?https://pypi.tuna.tsinghua.edu.cn/simple

          -i https://pypi.tuna.tsinghua.edu.cn/simple 指定清華鏡像源,下載速度更快。

          指定 Django 的下載版本(3.1.1 可以改成你要的版本):

          pip?install?Django==3.1.1?-i?https://pypi.tuna.tsinghua.edu.cn/simple

          創(chuàng)建項(xiàng)目和APP

          django-admin?startproject?booktest
          cd?booktest
          django-admin?startapp?book_managerment

          帶路徑演示:

          (django)?E:\python_Projects\django_demo>django-admin?startproject?booktest
          (django)?E:\python_Projects\django_demo>cd?booktest
          (django)?E:\python_Projects\django_demo\booktest>django-admin?startapp?book_managerment

          操作后目錄結(jié)構(gòu):

          安裝應(yīng)用

          在 booktest\booktest\settings.py 中找到INSTALLED_APPS這一項(xiàng),修改為:

          INSTALLED_APPS?=?[
          ????'django.contrib.admin',
          ????'django.contrib.auth',
          ????'django.contrib.contenttypes',
          ????'django.contrib.sessions',
          ????'django.contrib.messages',
          ????'django.contrib.staticfiles',
          ????'book_managerment'
          ]

          設(shè)計(jì)模型

          表結(jié)構(gòu):

          書(shū)籍表 Book:title 、 price 、 pub_date 、 publish(外鍵,多對(duì)一) 、 authors(多對(duì)多)

          出版社表 Publish:name 、 city 、 email

          作者表 Author:name 、 age 、 au_detail、gender 、 tel 、 addr 、 birthday

          以下是表格關(guān)聯(lián)說(shuō)明:

          修改booktest\book_managerment\models.py,定義模型類如下:

          from?django.db?import?models

          class?Author(models.Model):
          ????name?=?models.CharField(max_length=32)
          ????age?=?models.SmallIntegerField()
          ????gender_choices?=?(
          ????????(0,?"女"),
          ????????(1,?"男"),
          ????????(2,?"保密"),
          ????)
          ????gender?=?models.SmallIntegerField(choices=gender_choices)
          ????tel?=?models.CharField(max_length=32)
          ????addr?=?models.CharField(max_length=64)
          ????birthday?=?models.DateField()


          class?Book(models.Model):
          ????title?=?models.CharField(max_length=32)
          ????price?=?models.DecimalField(max_digits=5,?decimal_places=2)
          ????pub_date?=?models.DateField()
          ????publish?=?models.ForeignKey("Publish",?on_delete=models.CASCADE)
          ????authors?=?models.ManyToManyField("Author")


          class?Publish(models.Model):
          ????name?=?models.CharField(max_length=32)
          ????city?=?models.CharField(max_length=64)
          ????email?=?models.EmailField()

          生成本地?cái)?shù)據(jù)庫(kù)文件

          • 生成遷移文件:根據(jù)模型類生成創(chuàng)建表的語(yǔ)句
          • 執(zhí)行遷移:根據(jù)第一步生成的語(yǔ)句在數(shù)據(jù)庫(kù)中創(chuàng)建表
          python?manage.py?makemigrations
          python?manage.py?migrate

          執(zhí)行后生成的文件:

          插入初始數(shù)據(jù)

          使用DataSource打開(kāi)db.sqlite3文件后,執(zhí)行以下sql語(yǔ)句:

          insert?into?book_managerment_publish(id,?name,?city,?email)
          values?(1,?"華山出版社",?"華山",?"[email protected]"),
          ???????(2,?"明教出版社",?"黑木崖",?"[email protected]");

          insert?into?book_managerment_author(id,?name,?age,?gender,?tel,?addr,?birthday)
          values?(1,?"令狐沖",?25,?1,?13432335433,?"華山",?"1994-5-23"),
          ???????(2,?"任我行",?58,?1,?13943454554,?"黑木崖",?"1961-8-13"),
          ???????(3,?"任盈盈",?23,?0,?13878934322,?"黑木崖",?"1996-5-20");

          INSERT?INTO?book_managerment_book(id,?title,?price,?pub_date,?publish_id)
          VALUES?(1,?"獨(dú)孤九劍",?200,?"2019-1-7",?1),
          ???????(2,?"吸星大法",?180,?"2019-1-7",?2),
          ???????(3,?"葵花寶典",?280,?"2019-3-15",?2);

          INSERT?INTO?book_managerment_book_authors(id,?book_id,?author_id)
          VALUES?(1,?1,?1),
          ???????(2,?1,?2),
          ???????(3,?2,?2);

          后臺(tái)管理

          管理界面本地化:

          • 將顯示的語(yǔ)言、時(shí)間等使用本地的習(xí)慣,這里的本地化就是進(jìn)行中國(guó)化,中國(guó)大陸地區(qū)使用簡(jiǎn)體中文,時(shí)區(qū)使用亞洲/上海時(shí)區(qū),注意這里不使用北京時(shí)區(qū)表示
          • 打開(kāi)booktest/booktest/settings.py文件,找到語(yǔ)言編碼、時(shí)區(qū)的設(shè)置項(xiàng),將內(nèi)容改為如下:
          LANGUAGE_CODE?=?'zh-Hans'
          TIME_ZONE?=?'Asia/Shanghai'

          創(chuàng)建管理員:

          python?manage.py?createsuperuser

          (我設(shè)置用戶名密碼均為admin)

          (django)?E:\python_Projects\django_demo\booktest>python?manage.py?createsuperuser
          用戶名?(leave?blank?to?use?'think'):?admin
          電子郵件地址:
          Password:
          Password?(again):
          密碼跟?用戶名?太相似了。
          密碼長(zhǎng)度太短。密碼必須包含至少 8 個(gè)字符。
          這個(gè)密碼太常見(jiàn)了。
          Bypass?password?validation?and?create?user?anyway??[y/N]:?y
          Superuser?created?successfully.

          注冊(cè)模型類

          打開(kāi)booktest\booktest\admin.py文件,編寫(xiě)如下代碼

          from?django.contrib?import?admin
          from?.models?import?*


          class?BookModal(admin.StackedInline):
          ????model?=?Book


          @admin.register(Publish)
          class?PublishAdmin(admin.ModelAdmin):
          ????inlines?=?[BookModal]
          ????list_display?=?('id',?'name',?'city',?'email',?'books')
          ????fields?=?('name',?'city',?'email')
          ????list_filter?=?['city']
          ????search_fields?=?['name',?'city']

          ????def?books(self,?obj):
          ????????return?[book.title?for?book?in?obj.book_set.all()]


          @admin.register(Book)
          class?BookAdmin(admin.ModelAdmin):
          ????list_display?=?('id',?'title',?'price',?'pub_date',?"publish_name",?"author")
          ????fields?=?('title',?'price',?'pub_date',?"authors")
          ????search_fields?=?['title',?'price',?'pub_date']

          ????def?author(self,?obj):
          ????????return?[author.name?for?author?in?obj.authors.all()]

          ????def?publish_name(self,?obj):
          ????????return?obj.publish.name

          ????filter_horizontal?=?('authors',)


          @admin.register(Author)
          class?AuthorAdmin(admin.ModelAdmin):
          ????list_display?=?('id',?'name',?'age',?'gender',?'tel',?'addr',?'birthday',?'books')
          ????fields?=?('name',?'age',?'gender',?'tel',?'addr',?'birthday')
          ????list_filter?=?['gender']
          ????search_fields?=?['name',?'age',?'gender',?'tel',?'addr',?'birthday']

          ????def?books(self,?obj):
          ????????return?[book.title?for?book?in?obj.book_set.all()]

          自定義管理頁(yè)模板

          修改booktest/booktest/settings.py中的TEMPLATES的DIRS為指定的路徑:

          TEMPLATES?=?[
          ????{
          ????????'BACKEND':?'django.template.backends.django.DjangoTemplates',
          ????????'DIRS':?[BASE_DIR?/?"templates"],
          ????????'APP_DIRS':?True,
          ????????'OPTIONS':?{
          ????????????'context_processors':?[
          ????????????????'django.template.context_processors.debug',
          ????????????????'django.template.context_processors.request',
          ????????????????'django.contrib.auth.context_processors.auth',
          ????????????????'django.contrib.messages.context_processors.messages',
          ????????????],
          ????????},
          ????},
          ]

          創(chuàng)建目錄booktest/templates/admin,將python安裝路徑下的Lib\site-packages\django\contrib\admin\templates\admin下的base_site.html文件拷貝到該目錄下并修改:

          修改為如下內(nèi)容:

          {%?extends?"admin/base.html"?%}

          {%?block?title?%}圖書(shū)后臺(tái)管理系統(tǒng){%?endblock?%}

          {%?block?branding?%}
          ????<h1?id="site-name"><a?href="{%?url?'admin:index'?%}">圖書(shū)后臺(tái)管理系統(tǒng)a>h1>
          {%?endblock?%}

          {%?block?nav-global?%}{%?endblock?%}

          啟動(dòng)項(xiàng)目

          執(zhí)行一下命令后:

          python?manage.py?runserver

          打開(kāi)http://127.0.0.1:8000/admin

          操作演示

          查詢所有作者所寫(xiě)的書(shū):

          查詢每本書(shū)所屬的出版社和作者:

          查詢每個(gè)出版社所出的書(shū):

          修改作者信息:

          修改書(shū)籍信息,可管理所歸屬的作者:

          修改出版社信息,可管理所出版的每本書(shū):

          支持搜索和過(guò)濾:

          以上就是整個(gè)圖書(shū)管理系統(tǒng)的開(kāi)發(fā)過(guò)程。

          福利時(shí)間

          我們的傳統(tǒng)項(xiàng)目?每個(gè)月給鐵桿粉絲送書(shū)的活動(dòng)又來(lái)啦的,這次送出的7好書(shū)。11月上榜的Top7位同學(xué),都是常來(lái)留言區(qū)指導(dǎo)工作的粉絲,再次感謝小伙伴的一路相隨,歡迎大家常來(lái),混面熟。


          這次送出的圖書(shū)是“Go語(yǔ)言區(qū)塊鏈應(yīng)用開(kāi)發(fā)”。一共7本,中獎(jiǎng)的同學(xué)公眾號(hào)后臺(tái)輸入:小助手,速來(lái)聯(lián)系他,提交你的快遞信息。




          推薦閱讀:

          入門:?最全的零基礎(chǔ)學(xué)Python的問(wèn)題? |?零基礎(chǔ)學(xué)了8個(gè)月的Python??|?實(shí)戰(zhàn)項(xiàng)目?|學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評(píng),電影《后來(lái)的我們》?|?38年NBA最佳球員分析?|? ?從萬(wàn)眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個(gè)海量小姐姐素描圖?|碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!


          AI:?會(huì)做詩(shī)的機(jī)器人?|?給圖片上色?|?預(yù)測(cè)收入?|?碟中諜這么火,我用機(jī)器學(xué)習(xí)做個(gè)迷你推薦系統(tǒng)電影


          小工具:?Pdf轉(zhuǎn)Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁(yè)保存為pdf!|??再見(jiàn)PDF提取收費(fèi)!?|?用90行代碼打造最強(qiáng)PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換?|?制作一款釘釘?shù)蛢r(jià)機(jī)票提示器!?|60行代碼做了一個(gè)語(yǔ)音壁紙切換器天天看小姐姐!


          年度爆款文案

          點(diǎn)閱讀原文,看200個(gè)Python案例

          瀏覽 25
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产男女AV | 一级婬片A片AAAA毛片A级 | 能看的操逼视频 | 欧美日日日日 | 含羞草一区二区三区 |