這篇文章帶給大家的內容是關於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>]></queryset>
根據指定資訊查找
>>> 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:>]> >>> book1.heroinfo_set.create(hname='小狐狸',hgender=True,hcontent='肉眼看不见事务的本质,只有用心灵才能洞察一切') <heroinfo:></heroinfo:></heroinfo:></queryset>查詢人物資訊有兩種方式
1. 根據人物資料庫表直接尋找
>>> HeroInfo.objects.all() <queryset>, <heroinfo:>]></heroinfo:></queryset>2. 根據與資料物件的關係尋找
>>> book1 = BookInfo.objects.get(id=2) >>> book1.heroinfo_set.all() <queryset>, <heroinfo:>]> >>></heroinfo:></queryset>
使用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'
# \PycharmProjects\FristDjango\FristDjango\__init__.py import pymysql pymysql.install_as_MySQLdb()
python manage.py makemigrations python manage.py migrate
網站對資料庫的操作
#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]
以上是python中Django圖書人物適配系統的實作方法(後台)的詳細內容。更多資訊請關注PHP中文網其他相關文章!