Linux自动化运维——Python(15)(Django框架创建图书管理系统的项目 admin后台站点管理 )

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 = "人物管理"

猜你喜欢

转载自blog.csdn.net/weixin_43215948/article/details/107530340
今日推荐