admin管理系统介绍:Django自带的
- 后台管理系统是管理人员使用,不是给客户使用
- 此应用默认是开启的
INSTALLED_APPS = ['django.contrib.admin']
urlpatterns = [
path('admin/', admin.site.urls),
]
需要有下面几个步骤:同步数据库,建立用户,输入用户名,输入邮箱,输入密码
在django同步数据库的时候会自动创建相关的一些数据库用来储存admin账户,浏览器访问/admin/即可进入后台管理系统
python manager.py makegirations
python manager.py migrate
python manager.py createsuperuser
Username: admin
Email address: admin@example.com
Password: **********
Password (again): *********
Superuser created successfully.
基本使用
默认管理后台,是不会加载应用的APP模型,需要手动配置,步骤如下:
-
建立模型
-
增加模型到管理后台
-
测试使用
- 浏览器查看效果
python
# 创建自己的模型
class Student(models.Model):
name = models.CharField(max_length=20)
age = models.IntegerField()
class Meta:
db_table='t_student'
python
# 在子应用.admin.py文件中注册模型
from django.contrib import admin
from .models import Student
admin.site.register(Student)
之后就可以修改了
修改后台管理的前端显示方式
在字段上设置verbose_name属性标明即可
在模型Meta内部类中设置verbose_name属性即可
重新模型类的__str__
方法即可
python
class Student(models.Model):
# 增加 verbose_name
name = models.CharField(max_length=20, verbose_name='姓名')
# 增加 help_text
age = models.IntegerField(help_text='大于18', verbose_name='年龄')
def __str__(self):
return f'{self.name}({self.age})'
# 增加 Meta 类
class Meta:
# verbose_name_plural : 复数形式
verbose_name_plural = verbose_name = '学生'
设置应用名
在子应用下的 apps.py中设置verbose_name属性即可
python
class TestAppConfig(AppConfig):
verbose_name = '子应用名'
关联关系的使用
后台管理系统对于有关联关系的模型,也有着友好的支持
添加方式也很简单,会简单电脑操作即可
自定义管理类admin
python
class StudentAdmin(admin.ModelAdmin):
# 显示的属性列表, 值是 属性名
list_display = ['name', 'age']
# 排序的 属性 列表 , 默认是升序,如果需要降序:['-age']
ordering = ['age']
admin.site.register(Student, StudentAdmin)
装饰器注册类
该装饰器使用的是 admin.register , 不是 admin.site.register
python
@admin.register(Student)
class StudentAdmin(admin.ModelAdmin):
list_display = ['name', 'age']
ordering = ['age']
自定义管理类的属性
-
empty_value_display
- 属性为空时,在网页上显示的内容,默认是: -
-
fields
- 管理的字段
-
exclude
- 不管理的字段
-
filter_horizontal
- 多对多关系,默认是 select多选框,一般使用 filter_horizontal 或者 filter_vertical
python
@admin.register(Food)
class FoodAdmin(admin.ModelAdmin):
list_display = ['name', 'is_main']
filter_horizontal = ['restaurant']
官方文档查找即可
自定义批量操作
python
@admin.register(Waiter)
class WaiterAdmin(admin.ModelAdmin):
list_display = ['name','induction','restaurant']
actions = ['add_Waiter']
# 参数固定不要修改了,可以改,但是必须有三个
def add_Waiter(modeladmin, request, queryset):
list = ['小林','大山','小川','小田']
for name in list:
queryset.create(name=name)
add_Waiter.short_description = "批量添加(固定的)"
# 其他写法
'''
# 定义动作函数
def age_add_one(modeladmin, request, queryset):
queryset.update(age=F('age')+1)
# 给动作函数添加描述
age_add_one.short_description = "年龄增加一岁"
class StudentAdmin(admin.ModelAdmin):
# 在当前自定义管理类中,添加新的动作:age_add_one
actions = [age_add_one]
admin.site.register(Student, StudentAdmin)
'''
覆盖原模板
如果我们要在admin管理页面中,增加自己的功能,那么我们需要覆盖admin的默认模板
官网地址:Django 管理站点 | Django 文档 | Django
admin管理模板目录
django库下的 contrib/admin/templates/admin
目录,可以查看django自带的所有模板
可以覆盖的模板
contrib/admin/templates/admin
中的模板并非每个应用程序或每个模型都可以被覆盖。以下情况可以:
actions.html
app_index.html
change_form.html
change_form_object_tools.html
change_list.html
change_list_object_tools.html
change_list_results.html
date_hierarchy.html
delete_confirmation.html
object_history.html
pagination.html
popup_response.html
prepopulated_fields_js.html
search_form.html
submit_line.html
自定义模板
需要修改admin的哪个内置模板,则继承哪个模板,并且在其基础上进行修改,我们以app_index.html为例:
原始模板:
html
{% extends "admin/index.html" %}
{% load i18n %}
{% block bodyclass %}{{ block.super }} app-{{ app_label }}{% endblock %}
{% if not is_popup %}
{% block breadcrumbs %}
<div class="breadcrumbs">
<a href="{% url 'admin:index' %}">{% translate 'Home' %}</a>
›
{% for app in app_list %}
{{ app.name }}
{% endfor %}
</div>
{% endblock %}
{% endif %}
{% block sidebar %}{% endblock %}
自定义编写模板
html
{% extends "admin/app_index.html" %}
{% block sidebar %}
<a href="{% url 'children:customize' %}">自定义功能页面</a>
{% endblock %}
个人感觉没有太大的必要狂看,如果真的需要在重回博客寻找写法,常用点应该是自己写父模板自己继承