视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
python中Django图书人物适配系统的实现方法(后台)
2020-11-27 14:11:36 责编:小采
文档


本篇文章给大家带来的内容是关于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 79 #默认端口号:8000

访问http://127.0.0.1:79/,可以看见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:79/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)

使用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 [<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]

下载本文
显示全文
专题