Django的强大之处之一就是提供了便利的后台站点,在我们刚开始创建这个项目时,他就将这些配置好了。如果你在创建项目时,没有选择默认的项目模板,你就需要手动做如下操作。
- 添加
django.contrib.admin 和
它的依赖django.contrib.auth、django.contrib.contenttypes、django.contrib.messages、django.contrib.sessions到你的app设置INSTALLED_APPS中去。 - 在你的模板配置的OPTIONS属性中添加如下:django.contrib.auth.context_processors.auth和django.contrib.messages.context_processors.messages
-
在中间件注册中添加如下:django.contrib.auth.middleware.AuthenticationMiddleware,django.contrib.messages.middleware.MessageMiddleware。
- 主url定义路由
path('admin/', admin.site.urls)
接下来我们创建一个用户来登陆后台站点:输入指令python manage.py createsuperuser,接下来按提示输入账号、密码、邮箱即可。初次登陆进去的界面如下:
接下来我们要做的就是将我们定义好的model导入到后台,方便我们的管理。每个app下,django都为我们生成了一个admin.py文件,我们就可以在这里导入,其方式如下:
from django.contrib import admin
from .models import Student_home
# Register your models here.
admin.site.register(Student_home)
导入模型后,发现模型管理界面不是很人性化,我们可以自定义它。django提供admin.ModelAdmin类,我们可以定义其子类来设置界面的显示方式。常用的类属性如下:
-
list_display:列表形式,用于显示字段
-
list_filter:列表形式,用于过滤字段,过滤框会出现在右侧
-
search_fields:列表形式,用于搜索字段,搜索框会出现在上侧
-
list_per_page:整数形式,表示每页数据量
-
fields:列表形式,只修改的字段
-
fieldsets:列表形式,分组修改字段,这个属性和fields只能同时存在一个
-
list_display_links:列表形式,可使字段可被点击进入编辑界面
-
ordering:列表形式,设置默认排序的字段
-
list_editable:列表形式,设置默认可编辑的字段
-
date_hierarchy:详细时间分层筛选
下面是一个例子:
from django.contrib import admin
from .models import Student_home
# Register your models here.
class Studentadmin(admin.ModelAdmin):
list_per_page = 5
fieldsets = [
('基本信息',{'fields':['name','age','sex']}),
('联系信息',{'fields':['qq','tel']}),
('班期信息',{'fields':['period','course']}),
]
list_display = ['name','age','sex','qq','tel','period','course','c_time']
list_filter = ['sex','period','course']
search_fields = ['name','qq','tel','c_time']
list_display_links = ['name','age','sex','qq','tel','period','course','c_time']
admin.site.register(Student_home,Studentadmin)
注册方式还可以通过装饰器来,如下:
from django.contrib import admin
from .models import Student_home
# Register your models here.
@admin.register(Student_home)
class Studentadmin(admin.ModelAdmin):
list_per_page = 5
fieldsets = [
('基本信息',{'fields':['name','age','sex']}),
('联系信息',{'fields':['qq','tel']}),
('班期信息',{'fields':['period','course']}),
]
list_display = ['name','age','sex','qq','tel','period','course','c_time']
list_filter = ['sex','period','course']
search_fields = ['name','qq','tel','c_time']
list_display_links = ['name','age','sex','qq','tel','period','course','c_time']