Django框架创建图书管理系统的项目 admin后台站点管理
站点分为“内容发布(后台管理)”和“公共访问(前台管理)”两部分“内容发布”的部分负责添加、修改、删除内容,开发这些重复的功能是一件单调乏味、缺乏创造力的工作。因此, Django 会根据定义的模型类完全自动地生成管理模块Django 框架中有一个非常强大的应用功能: 自动管理界面。 常被Web平台管理者使用,去管理整个Web平台。
默认情况下,在settings.py 配置文件中INSTALLED_APPS 包含以下应用程序,为了后续的开发,默认这些应用程序都是包含在里面的。
(1)数据库迁移
使用这些Django 自带的应用程序,需要我们在数据库中创建一些数据表对应,然后才能使用它们。
python3 manage.py makemigrations
python3 manage.py migrate
(2). 创建管理员用户 python manage.py createsuperuser
启动服务器,通过“127.0.0.1:8000/admin” 访问,输入上面创建的用户名、密码完成登录 进入管理站点,默认可以对groups、users 进行管理
(3). 管理界面本地化 编辑settings.py 文件,设置编码、时区
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
(4)自定义模型加入后台管理
打开bookApp/admin.py 文件,注册模型
from django.contrib import admin
from .models import Book, Hero
class HeroInline(admin.StackedInline):
model = Hero
extra = 2
# 书籍自定义管理页面
class BookAdmin(admin.ModelAdmin):
# list_display:显示字段,可以点击列头进行排序
list_display = ['id', 'title', 'pub_date']
# list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['title', 'pub_date']
# search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['title']
# list_per_page:分页,分页框会出现在下侧
list_per_page = 3
inlines = [HeroInline]
# 人物自定义管理页面
class HeroAdmin(admin.ModelAdmin):
# 后台管理查询需要的设置信息
# list_display:显示字段,可以点击列头进行排序
list_display = ['id', 'name', 'sex', 'content', 'book']
# list_filter:过滤字段,过滤框会出现在右侧
list_filter = ['book']
# search_fields:搜索字段,搜索框会出现在上侧
search_fields = ['name']
# list_per_page:分页,分页框会出现在下侧
list_per_page = 3
# 后台管理添加需要设置的信息
# fields = ['book', 'name', 'content', 'gender']
fieldsets = [('基础信息', {'fields': ['book', 'name']}),
('详细信息', {'fields': ['content', 'gender']}), ]
# 后台管理的配置文件
# Register your models here.
admin.site.register(Book, BookAdmin)
admin.site.register(Hero, HeroAdmin)
models.py
from django.db import models
# Create your models here.
# 一个Book类对应一个数据库表
# 一个类属性对应一个数据库表的列属性
class Book(models.Model):
# # 默认情况下,会自动添加id这一列作为主键。
# title是字符串类型的, 并且最大的长度为20;
title = models.CharField(max_length=20)
pub_date = models.DateField()
# 字符串的友好展示, 在交互式环境测试的时候生效
def __repr__(self):
return '<Book: %s>' % (self.title)
# 字符串友好展示,在后台管理的时候生效
def __str__(self):
return self.title
# 自定义对应的表名,默认表名:bookApp_book
class Meta:
db_table = "books"
# 后台管理显示(单数)
verbose_name = "图书管理"
# 后台管理显示(复数)
verbose_name_plural = "图书管理"
class Hero(models.Model):
# 默认情况下,会自动添加id这一列作为主键。
name = models.CharField(max_length=20)
gender = models.BooleanField(default=True)
content = models.CharField(max_length=200)
# 一对多关系, 外键写在多的一端(Book:Hero=1:n)
# models.CASCADE叫级联删除,当书籍被删除后,关联的任务也会被删除
book = models.ForeignKey('Book', on_delete=models.CASCADE)
def __repr__(self):
return "<Hero %s>" % (self.name)
def __str__(self):
return self.name
def sex(self):
if self.gender:
return "男"
else:
return '女'
# 自定义对应的表名,默认表名:bookApp_book
class Meta:
db_table = "heros"
# 后台管理显示(单数)
verbose_name = "人物管理"
# 后台管理显示(复数)
verbose_name_plural = "人物管理"