django之admin管理工具

admin组件

admin是django提供的基于web的管理工具

>如何使用:

1、激活管理工具

通常会在生成项目时在urls.py中自动设置好

 from django.urls import path,re_path
#from django.conf.urls import url
from django.contrib import admin urlpatterns =[
path('admin/', admin.site.urls),
# url(r"^admin/", admin.site.urls), 旧版本写法
]

2、创建用户

通过命令  python manage.py createsuperuser 来创建超级用户

然后在浏览器中访问127.0.0.1:8000/admin/ 就会出现登录界面。

3、注册数据模型到admin

from app01.models import Book

#在admin中注册模型中的某个类,即可在admin中实现增删改查
#简单使用
admin.site.register(Book) #获得更多的定制操作,需要利用ModelAdmin进行配置
#定制用法
class BookConfig(admin.ModelAdmin):
list_display = ('title', 'price','publish') #定制展示哪些列的内容 admin.site.register(Book,BookConfig)

常用的定制功能示例

 from django.contrib import admin

 # Register your models here.

 from app02.models import *

 class BookConfig(admin.ModelAdmin):
#定制展示那些列
def show_authors(self,obj):
print(obj.authors.all())
return "/".join([obj.name for obj in obj.authors.all()])
list_display = ('title','price','publishDate','publisher','show_authors')
#定制可以点击跳转的列
list_display_links = ['price']
#定制右侧快速筛选功能
list_filter=['publisher']
#定制搜索查询
search_fields = ['title','price']
#定制可以编辑的列
list_editable = ['title']
#定制htnl模板
# change_list_template = 'mylist.html' #按price排序 降序
ordering = ['-price'] #批量初始化
def path_init(self,request,queryset):
queryset.update(price=111)
path_init.short_description = '批量修改价格为111' #对actiond的描述,可以不写
actions = [path_init,] admin.site.register(Book,BookConfig)
admin.site.register(Author)
admin.site.register(Publish)

admin.py

admin工作过程

1、加载所有app下的admin.py文件

2、在admin中注册模型类

3、基于二级分发设计url路由

admin的url配置

 from django.contrib import admin
from django.urls import path,re_path from django.shortcuts import HttpResponse def test01(request):
return HttpResponse('test01....')
def test02(request):
return HttpResponse('test02...')
def test03(request):
return HttpResponse('test03...')
def test04(request):
return HttpResponse('test04...')
def test05(request):
return HttpResponse('test05...') def list_view(request):
return HttpResponse('查询') def add_view(request):
return HttpResponse("添加") def change_view(request,id):
return HttpResponse('修改') def delete_view(request,id):
return HttpResponse('删除') def get_urls2():
temp=[
path('',list_view),
path('add/',add_view),
re_path('(\d+)/change/',change_view),
re_path('(\d+)/delete/',delete_view),
]
return temp def get_urls():
print('----->',admin.site._registry) #{Book:BookConfig,....}
temp = []
for model,config_obj in admin.site._registry.items():
model_name = model._meta.model_name
app_label = model._meta.app_label
temp.append(
path("%s/%s/"%(app_label,model_name),(get_urls2(),None,None)),
)
return temp urlpatterns = [
path('admin/', admin.site.urls), #一级分发
# path('index/',([
# path('test01/',test01),
# path('test02/',test02),
# ],None,None)),
# #二级分发
path('index/',([
path('name/',([
path('alex/',test03),
path('egon/',test04)
],None,None)),
path('shop/',([path('apple/',test05)],None,None)),
],None,None)), #二级分发的应用
path('yuan/',(get_urls(),None,None)), ]

二级分发url

补充知识点:

>实现单例模式的方式

1、使用__new__

2、使用装饰器(decorator)

3、使用元类(metaclass)

4、基于模块实现单例

>通过模型类对象获取类名和应用名(字符串)

Book._meta.model_name ----->'book'

Book._meta.app_label-------->'app01'

上一篇:Jenkins 环境搭建


下一篇:Linux--Tail命令