zoukankan      html  css  js  c++  java
  • 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'

  • 相关阅读:
    程序编译的四个阶段
    c++的符号表的肤浅认识
    git高级用法之cheery-pick
    rust 使用国内镜像,快速安装方法
    protobuf 的enum与string转换
    c++ 获取GMT 时间和字符串
    proto3 不支持内建类型的非空判断即 hasXXX
    cmake 中的 compile_commands.json 文件
    整数划分问题(记忆化搜索和DP方法)
    查找系列合集-二分查找
  • 原文地址:https://www.cnblogs.com/zhang-yl/p/10268695.html
Copyright © 2011-2022 走看看