django-admindjango-admin入门


备注

Django Admin是Django Web框架的CRUD接口。它主要是自动生成的,但可以广泛定制。但是,您必须记住,它仅为受信任的用户设计并具有其限制。在任何情况下,您都不得向不受信任的用户授予管理员访问权限

Django Admin提供了高级别的自定义功能,但请注意不要过多地定制自定义细节。如果您这样做,可能是时候创建自己的自定义界面而不使用Django Admin了。

资源

版本

发布日期
1.10 2106年8月1日
1.9 2015年12月1日
1.8 2015-04-01
1.7 2014年9月2日
1.6 2013年11月6日
1.5 2013年2月26日
1.4 2012-03-23
1.3 2011-03-23
1.2 2010-05-17
1.1 2009-07-29
1.0 2008-09-03

设置Django Admin

开始使用Django管理员所需的一切都已经在Django的默认项目布局中进行了设置。这包括:

# settings.py

# `django.contrib.admin` and its dependancies.
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    ...,
]

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    ...
]

TEMPLATES = [
    {
        ...,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                ...
            ],
        },
    },
]
 

小心urls.py 是在Django> = 1.9比旧版本略有不同。

1.9
from django.conf.urls import url
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]
 
1.9
from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
]
 

带有include 版本仍然可以在Django 1.9中使用,但已弃用,将来会被删除。

如果尚未完成,则必须应用基本迁移:

$ python manage.py migrate
 

要访问管理员,您还必须创建一个超级用户:

$ python manage.py createsuperuser
 

完成后,您可以运行您的服务器:

$ python manage.py runserver
 

并访问管理页面http://127.0.0.1:8000/admin/

将模型添加到管理页面

当您在应用程序中创建自己的模型时,仍需要注册它们才能在管理页面中使用。

这是在admin 子模块中完成的。如果您的应用是使用manage.py startapp 创建的,则admin.py 文件应该已经存在于您的应用模块中。否则创建它。

#myapp/admin.py
from django.contrib import admin
from myproject.myapp.models import MyModel

admin.site.register(MyModel)
 

所有选项都在ModelAdmin子类上定义。一些选择:

class MyCustomAdmin(admin.ModelAdmin):
    list_display = ('name','age','email')  # fields to display in the listing
    empty_value_display = '-empty-'        # display value when empty 
    list_filter = ('name', 'company')      # enable results filtering
    list_per_page = 25                     # number of items per page 
    ordering = ['-pub_date', 'name']       # Default results ordering

# and register it 
admin.site.register(MyModel, MyCustomAdmin)
 

注册模型的更简洁方法是使用admin.register 装饰器:

@admin.register(MyModel)
class MyCustomAdmin(admin.ModelAdmin)
    ...
 

自定义django用户管理模型

from django.contrib.auth.models import User    
class UserAdmin(admin.ModelAdmin):
    list_display = ('email', 'first_name', 'last_name')
    list_filter = ('is_staff', 'is_superuser')
    
admin.site.unregister(User) 
admin.site.register(User, UserAdmin)
 

我们需要在注册自定义UserAdmin之前取消注册,因为在django用户模型管理员已注册,所以我们需要首先在admin.py中注销用户模型然后我们可以使用自定义ModelAdmin注册用户模型

从管理员页面中删除模型

Django Admin默认注册了一些模型。在某些情况下,您可能希望从管理页面中删除模型。

这是在admin 子模块中完成的。如果您的应用程序使用manage.py startapp 创建,则admin.py 文件应该已经存在于您的应用程序模块中。否则创建它。

#myapp/admin.py
from django.contrib import admin
from django.contrib.auth.models import User

admin.site.unregister(User)