【Django入门】——Django后台管理实战简介

一般所有web应用都需要有一个后台,该后台一般由超级管理员使用,为什么要给超级管理员提供这样一个功能呢?这样才能随心所欲删帖啊!哈哈哈!

1. 本地化设置

为了进行Django后台的修改,方便起见,需要先将后台显示的语言改成中文,将时区改为上海时间,这可以通过修改settings.py文件来实现。

# settings.py
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'  # 使用中文

# TIME_ZONE = 'UTC'
TIME_ZONE = 'Asia/Shanghai'  # 使用中国时间

2. 创建管理员

python manage.py createsuperuser

使用上述命令来创建超级管理员用户。

(virtualenv4_django) william@ubuntu:~/django_intro/test1$ python manage.py createsuperuser
用户名 (leave blank to use 'william'): admin
电子邮件地址: admin@python-guru.com
Password: 
Password (again): 
Superuser created successfully.

启动Django项目

python manage.py runserver

打开浏览器,在网址栏输入127.0.0.1:8000/admin后回车

在这里插入图片描述

输入管理员用户的用户名和密码以登录:

在这里插入图片描述

3. 自定义管理页面

为了能在后台管理各个数据表,需要先在后台管理页面将数据表显示出来,然后根据需求,再修改用于管理各数据表的页面。

3.1 显示管理页面

显示管理界面是指,在Django的后台管理页面将各个数据表显示出来,可以让有权限的用户通过图形化的方式操作各个数据表。这可以通过在admin.py中注册模型类来实现:

# admin.py
from django.contrib import admin
from booktest.models import BookInfo  # 导入模型类

# Register your models here.
admin.site.register(BookInfo)  # 注册模型类

注册完成后,刷新通过超级管理员登录的Django后台页面,如下图所示可将book_info数据表显示在了后台。

在这里插入图片描述

成功显示后,存在的一个问题是,如果你点击book_info数据表对应的后台界面按钮,会发现数据记录是一个对象名称。

在这里插入图片描述

实际上,由下列代码可知:上述显示的数据表中的记录就是对象的字符串表示形式。

>>> from booktest.models import BookInfo
>>> book = BookInfo.objects.get(book_title='天龙八部')
>>> str(book)
'BookInfo object (2)'

因此,为了使得数据表中的记录显示得更加友好,可以在models.py文件中重写数据表BookInfo类的__str__()方法,使之返回可读性更高的信息,在这里返回的是图书的名称。

# models.py
from django.db import models


# Create your models here.

# 创建图书类
class BookInfo(models.Model):
    """图书模型类"""
    # 图书名称,CharField说明是该类属性是一个字符串,max_length指定最大长度
    book_title = models.CharField(max_length=20)

    # 出版日期,DateField说明该类属性是一个日期
    book_pub_date = models.DateField()

    def __str__(self):
    	"""覆盖对BookInfo实例化对象使用str()的返回值"""
        return self.book_title  # 返回书名

在重写models.py文件中BookInfo类的__str__()方法后,刷新页面,可见Django后台book_info对应数据表的界面显示已经变化。
在这里插入图片描述

3.2 设置管理页面

进一步地,你可能会觉得在显示数据表book_info的记录时,仅显示book_title字段信息不足,你可能会希望像在数据库中一样,显示一条记录的所有字段,此时你可以通过在admin.py中自定义模型管理类来实现该需求:

# admin.py
from django.contrib import admin
from booktest.models import BookInfo, HeroInfo


# 自定义模型管理类,实现自定义BookInfo的后台管理界面
class BookInfoAdmin(admin.ModelAdmin):
    """图书模型管理类"""
    list_display = ['id', 'book_title', 'book_pub_date']


# Register your models here.
admin.site.register(BookInfo, BookInfoAdmin)
admin.site.register(HeroInfo)

即:

  • 首先,从当前应用booktestmodels包中导入book_info数据表对应的模型类BookInfo
  • 然后,通过继承类admin.ModelAdmin来自定义模型管理类BookInfoAdmin,并同时为该类定义一个为列表的类属性(名称必须为list_display),且列表元素为希望展示展示的全部字段;
  • 最后,调用admin.site中的register注册book_info数据表对应的模型类和自定义模型管理类BookInfoAdmin
    在这里插入图片描述
    接下来,请移步【Django入门】——视图函数的使用学习Django中视图函数的使用。

猜你喜欢

转载自blog.csdn.net/weixin_37780776/article/details/107326065