念念不忘,必有回响!繁华似锦觅安宁,淡云流水度此生--------潇洒若梦&&浮生执铭
潇洒浮生
因为你 我愿意热爱整个世界

admin 站点

  Django最强大的部分之一是自动管理界面。 它从您的模型中读取元数据,以提供快速,以模型为中心的界面,受信任的用户可以在其中管理您网站上的内容。 管理员的建议用途仅限于组织的内部管理工具。 它不是用于构建整个前端。

管理员有许多用于自定义的钩子,但要注意尝试专门使用这些钩子。 如果您需要提供一个更加以流程为中心的接口来抽象出数据库表和字段的实现细节,那么可能是时候编写自己的视图了。

在本文档中,我们将讨论如何激活,使用和自定义Django的管理界面。

概观

在startproject使用的默认项目模板中启用了admin。

供参考,以下是要求:
1.将'django.contrib.admin'添加到您的INSTALLED_APPS设置中。
2.管理员有四个依赖项--django.contrib.auth,django.contrib.contenttypes,django.contrib.messages和django.contrib.sessions。如果这些应用程序不在您的INSTALLED_APPS列表中,请添加它们。
3.添加django.contrib.auth.context_processors.auth和django.contrib.messages.context_processors.messages在你的模板定义以及django.contrib.auth.middleware.AuthenticationMiddleware和Django的的DjangoTemplates后端的“context_processors”选项.contrib.messages.middleware.MessageMiddleware到MIDDLEWARE。默认情况下这些都是活动的,因此如果您手动调整设置,则只需执行此操作。
4.确定应在管理界面中编辑哪些应用程序模型。
5.对于每个模型,可以选择创建一个ModelAdmin类,该类封装了该特定模型的自定义管理功能和选项。
6.实例化一个AdminSite并告诉它每个模型和ModelAdmin类。
7.将AdminSite实例挂钩到您的URLconf中。

完成这些步骤后,您将能够通过访问您将其挂钩到的URL(/ admin /,默认情况下)来使用您的Django管理站点。如果需要创建要登录的用户,可以使用createsuperuser命令。

 

ModelAdmin对象

class ModelAdmin [来源]
ModelAdmin类是管理界面中模型的表示。 通常,这些文件存储在应用程序中名为admin.py的文件中。 让我们看一下ModelAdmin的一个非常简单的例子:

from django.contrib import admin
from myproject.myapp.models import Author

class AuthorAdmin(admin.ModelAdmin):
    pass
admin.site.register(Author, AuthorAdmin)

你需要一个ModelAdmin对象吗?

在前面的示例中,ModelAdmin类尚未定义任何自定义值(尚未)。 因此,将提供默认管理界面。 如果您对默认管理界面感到满意,则根本不需要定义ModelAdmin对象 - 您可以在不提供ModelAdmin描述的情况下注册模型类。 前面的示例可以简化为:

from django.contrib import admin
from myproject.myapp.models import Author

admin.site.register(Author)

注册装饰器

register(*models, site=django.admin.sites.site)

还有一个用于注册ModelAdmin类的装饰器:

from django.contrib import admin
from .models import Author

@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
    pass

它给了一个或多个模型类来注册ModelAdmin。 如果您使用的是自定义AdminSite,请使用site关键字参数传递它:

from django.contrib import admin
from .models import Author, Editor, Reader
from myproject.admin_site import custom_admin_site

@admin.register(Author, Reader, Editor, site=custom_admin_site)
class PersonAdmin(admin.ModelAdmin):
    pass

如果必须在其__init __()方法中引用模型管理类,则不能使用此装饰器,例如 super(PersonAdmin,self).__ init __(* args,** kwargs)。 你可以使用super().__ init __(* args,** kwargs)。

发现管理文件

当您在INSTALLED_APPS设置中放入'django.contrib.admin'时,Django会自动在每个应用程序中查找管理模块并将其导入。
class apps.AdminConfig
这是admin的默认AppConfig类。 它在Django启动时调用autodiscover()。
class apps.SimpleAdminConfig
此类的工作方式与AdminConfig类似,不同之处在于它不调用autodiscover()。
autodiscover()
此函数尝试在每个已安装的应用程序中导入管理模块。 预计此类模块将向管理员注册模型。

通常,您不需要直接调用此函数,因为当Django启动时AdminConfig会调用它。

如果您使用的是自定义AdminSite,则通常会将所有ModelAdmin子类导入代码并将其注册到自定义AdminSite。 在这种情况下,为了禁用自动发现,您应该在INSTALLED_APPS设置中添加“django.contrib.admin.apps.SimpleAdminConfig”而不是“django.contrib.admin”。

ModelAdmin options

posted on 2018-11-15 10:21  潇洒浮生  阅读(114)  评论(0编辑  收藏  举报

levels of contents