Django站点管理详解:从配置到权限控制

Noah
Noah
发布时间:2026-10-13| 3人浏览过
原创

本文详细解析Django自动管理界面的配置流程,涵盖INSTALLED_APPS、MIDDLEWARE及URL映射设置。深入讲解admin.py中模型注册方法,以及如何通过Meta类、verbose_name和__unicode__自定义显示效果。最后阐述用户权限体系,包括活动、成员及超级用户标志,并说明组权限分配机制,帮助开发者构建安全高效的后台管理系统。

管理界面是网站基础设施的关键组成部分。它基于网页形式,仅限受信任的管理员操作,允许用户添加、编辑和删除网站内容。Django内置了自动管理界面,该功能通过读取模型中的元数据,生成一个功能强大且即开即用的管理界面,使网站管理者能够立即开展工作。

Django的管理员模块属于标准库django.contrib的一部分。该包还包含其他几个实用模块:

django.contrib.auth

django.contrib.sessions

django.contrib.comments

我们将分几个部分详细讲解Django管理界面(admin)的使用方法。

配置

实际上,admin的配置通常无需过多干预,因为Django在创建项目和app时会自动生成相关配置。如果不需要,可以将其注释掉。若要使用admin,需检查以下几个关键点:

1. 在INSTALLED_APPS设置文件中需包含

'django.contrib.admin'
'django.contrib.auth',
'django.contrib.contenttypes'
'django.contrib.sessions'

因为admin模块依赖

2. 在MIDDLEWARE_CLASSES属性中需包含

'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.auth.middleware.AuthenticationMiddleware'.

同样是因为依赖

3. 运行python manage.py makemigrations和python manage.py migrate命令,用于为admin等模块创建新的数据库表。

由于apps中包含了auth模块,系统会要求创建一个超级用户。在此之前,可以使用python manage.py createsuperuser命令创建一个超级用户。操作非常简单,只需根据提示输入相关信息即可。

4. 在urls.py中设置admin映射,这通常也是系统自动添加的。

from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
  #...
  (r'^admin/', include(admin.site.urls)),
  #...
)

完成以上步骤后,运行runserver,即可通过/admin/这个URL访问admin界面。不过,此时的admin界面除了用户和用户组之外,没有其他内容。

admin.py文件

在每个app下,系统会自动创建admin.py文件。该文件的编写直接决定了admin界面的显示内容。

1. 对model类进行注册

2.

from django.contrib import admin
from mysite.books.models import Publisher,Author, Book
admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

这是最基本的数据添加功能。当在project文件夹中添加新文件时,需要重启server才能生效。这样就能在admin主界面中看到定义的数据模型。此外,若要使admin界面中的添加数据功能生效,需确保MIDDLEWARE_CLASSES中包含'django.contrib.messages.middleware.MessageMiddleware'。这样我们就能在admin界面轻松操作数据库内容,系统会自动同步到数据库。

自定义admin模块的显示

通过上述设置,我们得到了一个基本满足需求的admin界面,但显示较为单一。基本显示内容的设置应在models文件中进行。例如:

class Author(models.Model):
  first_name = models.CharField(max_length=30)
  last_name = models.CharField(max_length=40)
email =models.EmailField(blank=True)

只需在字段声明中设置blank=True,默认值为False,即可允许email字段为空。

Field函数中的verbose_name属性可以控制该字段在admin界面中以何种名称显示。

Meta内部类中的verbose_name可为模型起一个更易读的名字,ordering可以决定数据以何种方式排列显示。

__unicode__的返回值可以决定表在admin界面中以何种名称显示。

权限管理

由于使用超级用户登录,你可以创建、编辑和删除任何对象。然而,不同环境对权限有不同的要求,系统不允许所有人都是超级用户。管理工具提供了一个用户权限系统,通过它可以根据用户需求指定其权限,从而实现部分访问系统的目的。

用户账户应当是通用的、独立于管理界面之外仍可使用。但我们目前将其视为管理界面的一部分。在第十四章,我们将讲述如何将用户账户与你的网站(不仅仅是管理工具)集成在一起。

你通过管理界面编辑用户及其许可,就像编辑其他对象一样。我们在本章前面浏览用户和用户组区域时已经见过这些。如你所想,用户对象包含标准的用户名、密码、邮箱地址和真实姓名,同时还有关于使用管理界面的权限定义。首先,有一组三个布尔型标记:

活动标志,用于控制用户是否已激活。如果一个用户账户的这个标记处于关闭状态,而用户尝试登录时,即使密码正确,也无法登录系统。

成员标志,用于控制该用户是否可以登录管理界面。由于用户系统可用于控制公众页面,此标志可用于区分公众用户和管理用户。

超级用户标志,赋予用户在管理界面中添加、修改和删除任何项目的权限。如果一个用户账户拥有此标志,那么所有权限设置(即使没有)都会被忽略。

普通的活跃、非超级用户的管理用户可以根据一套设定好的许可进入。管理界面中每种可编辑的对象(如:books、authors、publishers)都有三种权限:创建许可、编辑许可和删除许可。给用户授权许可,即表明该用户可以进行许可描述的操作。

创建用户时,它没有任何权限,具体权限由你决定。例如,你可以给用户添加和修改publishers的权限,而不给他删除的权限。请注意,这些权限定义在模块级别上,而不是对象级别上。举个例子,你可以让小强修改任何图书,但不能让他仅修改由机械工业出版社出版的图书。

权限管理系统也控制编辑用户和权限。如果你给某人编辑用户的权限,他可以编辑自己的权限,这种能力可能并非你希望看到的。赋予一个用户修改用户的权限,本质上就是把他变成超级用户。

你也可以给组中分配用户。一个组简化了给组中所有成员应用一套许可的动作。在给用户特定权限时,组非常有用。

总结

以上就是本文关于Django站点管理详解的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。