Django内置之Admin

Admin

Admin是什么?其实就是Django内置的Admin是对于model中对应的数据表进行增删改查提供的组件

简单来说,它是django内部提供后台管理,对数据库表实现增删改查。

  • 连接数据源【sqlite,mysql】,手动填写
  • admin实现增删改查

如何看待Admin?

假设开发一个新闻发布系统, 需要两部分,即主站和后台

  • 第一期:开发主站,其中的内容和数据做简单的增删改查用Admin实现
  • 第二期:后期自己开发后台。

django-admin是前后端不分离的,即内部系统

依赖的app

 依赖APP:
        django.contrib.auth
        django.contrib.contenttypes
        django.contrib.messages
        django.contrib.sessions
 模板的context_processors:
        django.contrib.auth.context_processors.auth
        django.contrib.messages.context_processors.messages
 中间件:
        django.contrib.auth.middleware.AuthenticationMiddleware 
        django.contrib.messages.middleware.MessageMiddleware

# 创建admin账户
python manage.py createsuperuser

1.配置的路由

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

2.定制Admin

在admin.py中只需要讲Mode中的某个类注册,即可在Admin中实现增删改查的功能,如:

admin.site.register(models.Depart)
admin.site.register(models.UserInfo)

但是,这种方式比较简单,如果想要进行更多的定制操作,需要利用ModelAdmin进行操作,如:

方式一:
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd',)
	admin.site.register(models.UserInfo, UserAdmin) # 第一个参数可以是列表      
    
方式二:
    @admin.register(models.UserInfo)                # 第一个参数可以是列表
    class UserAdmin(admin.ModelAdmin):
        list_display = ('user', 'pwd',)

解释配置方式

admin.site.register(models.Depart)                 ->  models.Depart + ModelAdmin
admin.site.register(models.Depart, DepartAdmin)   ->  models.Depart + DepartAdmin

ModelAdmin中提供了大量的可定制功能【相关配置】,如

1.list_display,列表时,定制显示的列。

class DepartAdmin(admin.ModelAdmin):
    list_display = ('id','title',"mine")
	
    # 自定义列名有两种方式
    # 方式一:
    @admin.display(description="自定义列")
    def mine(self, obj):
        return "内容"
    # 方式二:
    mine.short_description = "自定义列"

2.list_display_links,列表时,定制列可以点击跳转。

class DepartAdmin(admin.ModelAdmin):
    list_display = ('id','title',"mine")
    list_display_links =["id"]

3.list_editable,列表时,可以编辑的列

class DepartAdmin(admin.ModelAdmin):
    list_display = ('id','title',"mine")
   	list_editable = ['title']

4.action,列表时,定制action中的操作

class DepartAdmin(admin.ModelAdmin):
    list_display = ('id','title',"mine")
   	
    # 定制Action行为具体方法
    def func(self, request, queryset):
        print(self, request, queryset)
        print(request.POST.getlist('_selected_action'))
    func.short_description = "中文显示自定义Actions"
    actions = [func, ]

5.search_fields,列表时,模糊搜索的功能

class UserInfoAdmin(admin.ModelAdmin):
    list_display = ('id','username', 'pwd',"depart")
    search_fields = ('username', 'depart')

6.form = ModelForm —> 针对编辑页面 根据需求看到相对应的表单

class UserInfoModelForm(forms.ModelForm):
    class Meta:
        model = models.UserInfo
        fields = ["username","pwd"]


class UserInfoAdmin(admin.ModelAdmin):
    list_display = ('id','username', 'pwd',"depart")
    form = UserInfoModelForm

7.preserve_filters,详细页面,删除、修改,更新后跳转回列表后,是否保留原搜索条件

8.制HTML模板

add_form_template = None
change_form_template = None
change_list_template = None
delete_confirmation_template = None
delete_selected_confirmation_template = None
object_history_template = None
posted @ 2024-10-17 16:44  清风拂山岗(小高同学)  阅读(1)  评论(0编辑  收藏  举报