本篇文章給大家帶來的內容是關于python中Django圖書人物適配系統的實現方法(后臺),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
Django
Python下有許多款不同的 Web 框架。Django是重量級選手中最有代表性的一位。許多成功的網站和APP都基于Django。
Django是一個開放源代碼的Web應用框架,由Python寫成。
Django基礎
版本:Django 1.10
使用Pycharm創建新項目Django,命名為FirstDjango
有FirstDjango目錄,templates目錄,manage.py文件
運行manage.py文件類似flask_script命令行
python manage.py makemigrations #相當于初始化數據庫表 python manage.py migrate #相當于數據庫遷移命令,這里的數據庫存儲都是放在db.sqlite3文件里 python manage.py createsuperuser #創建超級用戶,生成db.sqlite3文件 python manage.py runserver 7899 #默認端口號:8000
訪問http://127.0.0.1:7899/,可以看見It worked頁面,但還沒有真正的運行APP
修改語言,時區(setting.py)
# LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' # TIME_ZONE = 'UTC' TIME_ZONE = 'Asia/Shanghai'
Django不同于flask,不需要在每次修改代碼時,重啟程序。
http://127.0.0.1:7899/admin/,可以訪問到后臺管理
這里可以添加新用戶和新的組,新的用戶、組可以被分配權力,但不能執行超級用戶的分發權限的功能
示例:給add_group組添加‘Can add group ’
創建用戶normal,隸屬add_group組,勾選職員狀態(指明用戶是否可以登錄到這個管理站點)。
使用normal用戶登陸后臺管理時,將只有增加組的選項。
創建自己的應用(app) -- book
terminal輸入
python manage.py startapp book
會在當前項目里生成book/目錄
創建好自己的應用文件后,首先在項目里注冊應用setting.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'book', ]
開始寫數據庫結構(model.py)
首先確定數據庫表有哪些:書籍、人物。
然后確定每個表的結構,書籍的屬性有:id,標題,出版時間,摘要,封面。人物屬性:id,姓名,性別,簡介,所屬書籍。
最后確定表之間的關系:一個書籍里面有多個人物,人物數據庫表寫外鍵
在django框架結構里,不需要像flask寫反向引用
# book/models.py from django.db import models # Create your models here. class BookInfo(models.Model): # 這里不需要寫id,Django框架默認會生成id,并作為主鍵pk btitle = models.CharField(max_length=100,unique=True,verbose_name='書籍標題') # 表示在后臺管理中這一欄的中文顯示 bpub_time = models.DateField(verbose_name='出版時間') # bcontent = models.TextField(default='摘要',verbose_name='書籍摘要') # bimg = models.ImageField(default=None,upload_to='static/uploads/') class Meta: ##表示這個數據庫表在后臺中的中文顯示,因為英語區分單復數,所以需要寫上單復數的中文顯示 verbose_name = '書籍信息' verbose_name_plural = '書籍信息' def __str__(self): return '%s' %(self.btitle) class HeroInfo(models.Model): hname = models.CharField(max_length=50,verbose_name='人物姓名') hgender = models.BooleanField(default=True,verbose_name='人物性別') # 任務簡介 hcontent = models.TextField(verbose_name='人物簡介') # 多的一端寫外鍵 hbook = models.ForeignKey(BookInfo,verbose_name='所屬書籍') @property def gender(self): if self.hgender: return '男' else: return '女' class Meta: verbose_name = '人物信息' verbose_name_plural = '人物信息' def __str__(self): return '%s' %(self.hname)
Django默認使用sqlit3數據庫,可在項目的setting.py文件中查看
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), } }
寫好應用book的models.py文件后,我們開始創建數據庫
python manage.py makemigrations python manage.py migrate
如何進入sqlite3數據庫表
python manage.py shell #打開類似數據庫交互命令的窗口
1. 數據庫的增添數據
>>> from book.models import BookInfo,HeroInfo >>> from datetime import date >>> book1 = BookInfo(btitle='小王子',bpub_time=date(1942,5,13)) >>> book1.save()
2. 數據庫的查找
>>> BookInfo.objects.all() <QuerySet [<BookInfo: 小王子>]>
根據指定信息查找
>>> book = BookInfo.objects.get(id=1) >>> book.btitle '小王子'
3.數據庫數據的修改
>>> book1.btitle = '安徒生童話' >>> book1.save() >>> book = BookInfo.objects.get(id=1) >>> book.btitle '安徒生童話'
4. 數據庫數據的刪除
>>> book = BookInfo.objects.get(id=1) >>> book.delete() (1, {'book.HeroInfo': 0, 'book.BookInfo': 1}) >>> book = BookInfo.objects.all() >>>
5. 數據庫表之間的關聯
首先,創建沒有外鍵的數據庫表信息
>>> book1 = BookInfo(btitle='小王子',bpub_time=date(1942,5,13)) >>> book2 = BookInfo(btitle='睡美人',bpub_time=date(1952,6,29)) >>> book1.save() >>> book2.save()
然后,創建外鍵所在的數據庫表信息
1. 根據數據表結構直接創建人物
>>> hero1 = HeroInfo(hname='小王子',hgender=True,hcontent='小王子沒有被成人那騙人的世界所征服',hbook=book1) >>> hero1 = HeroInfo(hname='玫瑰花',hgender=False,hcontent='玫瑰花的虛榮心傷害了小王子對她的感情',hbook=book1) >>> hero1.save() >>> hero2.save()
2. 根據已知的書籍對應的人物信息中添加人物
>>> book1 = BookInfo.objects.get(id=2) >>> book1.heroinfo_set.all() <QuerySet [<HeroInfo: 玫瑰花>, <HeroInfo: 小王子>]> >>> book1.heroinfo_set.create(hname='小狐貍',hgender=True,hcontent='肉眼看不見事務的本質,只有用心靈才能洞察一切') <HeroInfo: 小狐貍>
查詢人物信息有兩種方式
1. 根據人物數據庫表直接查找
>>> HeroInfo.objects.all() <QuerySet [<HeroInfo: 玫瑰花>, <HeroInfo: 小王子>]>
2. 根據與數據對象的關系查找
>>> book1 = BookInfo.objects.get(id=2) >>> book1.heroinfo_set.all() <QuerySet [<HeroInfo: 玫瑰花>, <HeroInfo: 小王子>]> >>>
使用mysql文件類型數據庫
修改setting.py文件中的數據庫配置
# Database # https://docs.djangoproject.com/en/1.10/ref/settings/#databases DATABASES = { 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 'ENGINE': 'django.db.backends.mysql', 'NAME': 'firstdjango', #數據庫名稱,若沒有的話,先在數據庫中建立 'USER': 'root', 'PASSWORD': 'sheen', 'HOST': 'localhost', 'PORT': '3306', } }
這里若直接初始化數據庫會報錯
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named 'MySQLdb'
需要對項目的__init__.py文件進行設置
# PycharmProjectsFristDjangoFristDjango\__init__.py import pymysql pymysql.install_as_MySQLdb()
終端運行命令,在mysql數據庫中,就可以查看到所有的表信息
python manage.py makemigrations python manage.py migrate
通過命令對數據庫的操作尤不方便,我們通過后臺管理的網頁來實現對數據庫的操作
首先需在admin.py文件中注冊數據庫表
#book/admin from django.contrib import admin from book.models import BookInfo,HeroInfo # Register your models here. admin.site.register(BookInfo) admin.site.register(HeroInfo)
書籍信息只顯示標題,和人物信息只顯姓名,不利于查看,修改注冊的表結構
#book/admin.py from django.contrib import admin from book.models import BookInfo,HeroInfo # Register your models here. class BookInfoAdmin(admin.ModelAdmin): list_display = ['btitle','bpub_time'] class HeroInfoAdmin(admin.ModelAdmin): list_display = ['hname','hgender','hcontent','hbook'] #顯示欄 list_filter = ['hbook'] #過濾器 search_fields = ['hname','hbook'] #搜索欄 list_per_page = 2 #每頁顯示多少條數據 admin.site.register(BookInfo,BookInfoAdmin) admin.site.register(HeroInfo,HeroInfoAdmin)
如何在圖書表中直接添加人物,網頁顯示效果:如果跳轉到圖書詳情的頁面,可以直接添加人物
添加HeroInline類,修改BookInfoAdmin類
# book/admin.py class HeroInline(admin.TabularInline): model = HeroInfo extra = 2 #每次增加兩個添加人物的表單 class BookInfoAdmin(admin.ModelAdmin): list_display = ['btitle','bpub_time'] inlines = [HeroInline]
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com