5.1 将Model注册到管理后台
2025-02-17
5.1.1 启用管理后台的准备工作
Django提供的管理后台位于 django.contrib.admin包中。查看目录结果可以了解也是一个应用,是Django框架内置的应用
启动管理后台(Admin),需要做一些准备工作
1. settings.py文件中的配置
Django项目在启动的时候会根据settings.py文件中定义的INSTALLED_APPS加载应用,由于Admin也是一个应用,所以,想要使用它就需要把django.contrib.admin加入INSTALLED_APPS中。添加Admin应用是Django的默认行为,这一步在创建项目生成目录结构的时候就已经完成了
Admin应用有四个依赖应用,它们都位于django.contrib包中,所以,同样需要将它们加入INSTALLED_APPS中。
django.contrib.auth:用户与权限认证应用
django.contrib.contenttypes:对Model提供更高层次抽象接口的应用,同时auth应用也需要依赖它
django.contrib.sessions:保存用户状态的会话应用
django.contrib.messages:消息应用
上面的四个应用默认会在创建项目的时候自动添加,不需要额外配置
有些应用需要与中间件配合,所以需要在MIDDLEWARE中加入需要的中间件
django.contrib.sessions.middleware.SessionMiddleware:实现会话应用的会话中间件
django.middleware.common.CommonMiddleware:对URL执行重写的中间件
django.contrib.auth.middleware.AuthenticationMiddleware:验证用户身份的认证中间件
django.contrib.messages.middleware.MessageMiddleware:用来支持消息应用的中间件。
上面的中间件也是自动添加的
需要注意:中间件的顺序非常重要,改变其定义的顺序可能会导致应用不可用
TEMPLATES是关于模板相关的配置,要使用管理后台,需要在DjangoTemplates后端的context_processors(上下文处理器)选项中添加。
django.contrib.auth.context_processors.auth:用来在模板中访问用户和权限的上下文处理器
django.contrib.messages.context_processors.messages:用来支持消息应用的上下文处理器
模板的配置同样是由Django来完成的,所以,不需要对这里进行改动
2. 应用数据库迁移
使用Django提供的数据库迁移命令创建各个应用定义的数据表。这在创建项目的时候已经完成了,所以,不需要重复操作
3.创建用户并授予访问权限
在管理后台中可以实现对Model实例对象的增加、删除和修改,这是非常简单且方便的,但同时这又是非常危险的,不应该每个用户都有这样的权限。由于还没有介绍Django内置的权限认证系统,因此这里只需要知道“超级用户”拥有所有的权限。在之前创建项目的内容中,使用了manage的createsuperuser命令创建名称为admin的超级用户,接下来就以这个用户登录管理后台并对Model进行操作。至此,启用管理后台功能的准备工作就已经结束了。这些都是Django的默认配置项,不需要做任何修改。如果没有特殊的要求或限制,应该遵循Django的建议,开启后台管理功能。
5.1.2 实现Model的注册
在创建一个app的时候,会定义Topic和Comment两个Model,现在,将它们注册到管理后台
注册Model的方法
1. 在admin.py文件中声明
- 把自定义的Model注册到管理后台就是要告诉Django哪些Model需要显示出来,即声明它们
- 使用 manage 的startapp命令在创建post应用的时候会自动创建admin.py文件,要把自定义的Model注册到管理后台需要在admin.py文件中声明
from django.contrib import admin
from post.models import Topic, Comment
admin.site.register([Topic, Comment])2. 设置管理后台的路由
Django项目的路由配置由settings.py文件的ROOT_URLCONF变量指定,对应于my_bbs项目就是my_bbs/urls.py文件
默认情况下Django会在Model的名字后面加上字母s显示。如果要自定义这个名称,可以在Model的Meta中声明
class Topic(BaseModel):
class Meta:
verbose_name = u'话题'
verbose_name_plural = u'话题'
class Comment(BaseModel):
class Meta:
verbose_name = u'话题评论'
verbose_name_plural = u'话题评论'对管理后台的操作比较简单,略过