django之admin管理工具

admin组件

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

>如何使用:

1、激活管理工具

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

1 from django.urls import path,re_path
2 #from django.conf.urls import url      
3 from django.contrib import admin
4 
5 urlpatterns =[
6           path('admin/', admin.site.urls),
7          # url(r"^admin/", admin.site.urls),   旧版本写法
8 ]

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)

常用的定制功能示例

 1 from django.contrib import admin
 2 
 3 # Register your models here.
 4 
 5 from app02.models import *
 6 
 7 class BookConfig(admin.ModelAdmin):
 8     #定制展示那些列
 9     def show_authors(self,obj):
10         print(obj.authors.all())
11         return "/".join([obj.name for obj in obj.authors.all()])
12     list_display = ('title','price','publishDate','publisher','show_authors')
13     #定制可以点击跳转的列
14     list_display_links = ['price']
15     #定制右侧快速筛选功能
16     list_filter=['publisher']
17     #定制搜索查询
18     search_fields = ['title','price']
19     #定制可以编辑的列
20     list_editable = ['title']
21     #定制htnl模板
22     # change_list_template = 'mylist.html'
23 
24     #按price排序 降序
25     ordering = ['-price']
26 
27     #批量初始化
28     def path_init(self,request,queryset):
29         queryset.update(price=111)
30     path_init.short_description = '批量修改价格为111'  #对actiond的描述,可以不写
31     actions = [path_init,]
32 
33 
34 
35 admin.site.register(Book,BookConfig)
36 admin.site.register(Author)
37 admin.site.register(Publish)
admin.py

admin工作过程

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

2、在admin中注册模型类

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

admin的url配置

 1 from django.contrib import admin
 2 from django.urls import path,re_path
 3 
 4 from django.shortcuts import HttpResponse
 5 
 6 def test01(request):
 7     return HttpResponse('test01....')
 8 def test02(request):
 9     return HttpResponse('test02...')
10 def test03(request):
11     return HttpResponse('test03...')
12 def test04(request):
13     return HttpResponse('test04...')
14 def test05(request):
15     return HttpResponse('test05...')
16 
17 def list_view(request):
18     return HttpResponse('查询')
19 
20 def add_view(request):
21     return HttpResponse("添加")
22 
23 def change_view(request,id):
24     return HttpResponse('修改')
25 
26 def delete_view(request,id):
27     return HttpResponse('删除')
28 
29 def get_urls2():
30     temp=[
31         path('',list_view),
32         path('add/',add_view),
33         re_path('(\d+)/change/',change_view),
34         re_path('(\d+)/delete/',delete_view),
35     ]
36     return temp
37 
38 def get_urls():
39     print('----->',admin.site._registry)   #{Book:BookConfig,....}
40     temp = []
41     for model,config_obj in admin.site._registry.items():
42         model_name = model._meta.model_name
43         app_label = model._meta.app_label
44         temp.append(
45             path("%s/%s/"%(app_label,model_name),(get_urls2(),None,None)),
46         )
47     return temp
48 
49 
50 urlpatterns = [
51     path('admin/', admin.site.urls),
52     
53     #一级分发
54     # path('index/',([
55     #                 path('test01/',test01),
56     #                 path('test02/',test02),
57     #                  ],None,None)),
58     #
59 
60     #二级分发
61     path('index/',([
62                     path('name/',([
63                                    path('alex/',test03),
64                                     path('egon/',test04)
65                                 ],None,None)),
66                     path('shop/',([path('apple/',test05)],None,None)),
67                     ],None,None)),
68 
69     #二级分发的应用
70     path('yuan/',(get_urls(),None,None)),
71 
72 ]
二级分发url

 

补充知识点:

>实现单例模式的方式

1、使用__new__

2、使用装饰器(decorator)

3、使用元类(metaclass)

4、基于模块实现单例

 

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

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

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

 

posted @ 2019-01-14 19:47  南辕北辙的天空  阅读(190)  评论(0编辑  收藏  举报