1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        Django入門案例:圖書管理系統(tǒng)

        共 6517字,需瀏覽 14分鐘

         ·

        2021-12-10 00:00

        大家好,歡迎來到 Crossin的編程教室 !


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


        無需寫sql,不需寫前端,利用Django自帶的Admin和ORM框架就能輕松實現(xiàn)一個多對多表關系的增刪改查。

        開發(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)建項目和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

        操作后目錄結構:

        安裝應用

        在 booktest\booktest\settings.py 中找到INSTALLED_APPS這一項,修改為:

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

        設計模型

        表結構:

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

        出版社表 Publish:name 、 city 、 email

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

        以下是表格關聯(lián)說明:

        修改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()

        生成本地數(shù)據(jù)庫文件

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

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

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

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

        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,?"獨孤九劍",?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);

        后臺管理

        管理界面本地化:

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

        創(chuàng)建管理員:

        python?manage.py?createsuperuser

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

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

        注冊模型類

        打開booktest\booktest\admin.py文件,編寫如下代碼

        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()]

        自定義管理頁模板

        修改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文件拷貝到該目錄下并修改:

        修改為如下內容:

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

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

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

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

        啟動項目

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

        python?manage.py?runserver

        打開http://127.0.0.1:8000/admin

        操作演示

        查詢所有作者所寫的書:

        查詢每本書所屬的出版社和作者:

        查詢每個出版社所出的書:

        修改作者信息:

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

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

        支持搜索和過濾:

        以上就是整個圖書管理系統(tǒng)的開發(fā)過程。

        如果文章對你有幫助,歡迎轉發(fā)/點贊/收藏~

        作者:小小明

        來源:快學Python(kxpython)



        _往期文章推薦_

        在知乎上學Python-Web開發(fā)篇




        如需了解付費精品課程教學答疑服務
        請在Crossin的編程教室內回復: 666

        ?

        瀏覽 60
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            熟练中出-波多野结衣 | 国产成人三级一区二区在线观看一 | 裸体无遮挡胸谢立琪 | 吴梦梦无码一区二区三区首发新作 | 日韩第九页 | 美女操逼网站免费 | 国产做受91 一片二片 思思热在线观看视频 | 欧美日韩卡一卡二在线播放视频 | 欧美日韩一区不卡 | 亲子伦A片免费 |