pythondjango图书_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)

使用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()

]>

根据指定信息查找

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

, ]>

>>> book1.heroinfo_set.create(hname='小狐狸',hgender=True,hcontent='肉眼看不见事务的本质,只有用心灵才能洞察一切')

查询人物信息有两种方式

1. 根据人物数据库表直接查找

>>> HeroInfo.objects.all()

, ]>

2. 根据与数据对象的关系查找

>>> book1 = BookInfo.objects.get(id=2)

>>> book1.heroinfo_set.all()

, ]>

>>>

使用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)

书籍信息只显示标题,和人物信息只显姓名,不利于查看,修改注册的表结构

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值