首頁 >後端開發 >Python教學 >python中Django圖書人物適配系統的實作方法(後台)

python中Django圖書人物適配系統的實作方法(後台)

不言
不言轉載
2018-11-15 15:18:212927瀏覽

這篇文章帶給大家的內容是關於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

python中Django圖書人物適配系統的實作方法(後台)

#修改語言,時區(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用戶登陸後台管理時,將只有增加群組的選項。

python中Django圖書人物適配系統的實作方法(後台)

建立自己的應用程式(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)

使用sqlite3檔案類型資料庫

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'

需要對項目的__init__.py檔進行設定

# \PycharmProjects\FristDjango\FristDjango\__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)

python中Django圖書人物適配系統的實作方法(後台)書籍資訊只顯示標題,和人物資訊只顯示姓名,不利於查看,修改註冊的表結構

#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)

python中Django圖書人物適配系統的實作方法(後台)如何在圖書表中直接新增人物,網頁顯示效果:如果跳到圖書詳情的頁面,可以直接新增人物

新增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圖書人物適配系統的實作方法(後台)

#

以上是python中Django圖書人物適配系統的實作方法(後台)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除