zoukankan      html  css  js  c++  java
  • day 82 URL分发

    一 、admin 流程 

          (1)  启动
               autodiscover_modules('admin', register_to=site)
               
          (2)  注册
               单例模式
               admin.site=AdminSite(): 单例对象
               
               class AdminSite(object):
                    def __init__(self, name='admin'):
                            self._registry = {} 
                            
                    def register(self, model, admin_class=None, **options):
                        if not admin_class:
                              admin_class = ModelAdmin
                              
                        self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book)}
                               
               
               admin.site.register(Book)  #  admin.site._registry={Book:ModelAdmin(Book)}
               admin.site.register(Publish)  #  admin.site._registry={Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)}
               
               class Authoconfig(admin.ModelAdmin):
                    pass
                    
               admin.site.register(Author,Authoconfig)  #  admin.site._registry={Book:ModelAdmin(Book),Publish:ModelAdmin(Publish),Author:Authoconfig(Author)}
               

     

    二 、设计URL

    为每个app下的model设计增删改查4个URL,以book为例。

      127.0.0.1:8000/admin/app01/book/

      127.0.0.1:8000/admin/app01/book/add

      127.0.0.1:8000/admin/app01/book/1/change/

      127.0.0.1:8000/admin/app01/book/1/delete

     

    三 、URL分发

    案例 

    二级路由

    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views
    from django.shortcuts import HttpResponse
    
    def test01(request):
        return HttpResponse('TEST01')
    
    def test02(request):
        return HttpResponse('TEST02')
    
    def test03(request):
        return HttpResponse('TEST03')
    
    
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^query/',views.query),
    
        url('^yuan/',([
            url('^test01/',test01),
            url('^test02/',test02),
            url('^test03/',test03),
                ],None,None))
    
    ]
    

      

     

    三级路由

    def test001(request):
        return HttpResponse('TEST001')
    
    def test002(request):
        return HttpResponse('TEST002')
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^query/',views.query),
    
        url('^yuan/',([
            url('^test01/',([
    
                url('^test001/', test001),
                url('^test002/', test002),
            ],None,None)),
            url('^test02/',test02),
            url('^test03/',test03),
                ],None,None))
    

      

     四、URL 注册

    需求: 为每个app下的

    def test002(request):
        return HttpResponse('TEST002')
    
    def get_urls():
        temp =[]
        temp.append(url("app01/book",test002))
        print(temp)
        return temp
        print(temp)
    
    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        # url(r'^Xadmin/',([get_urls(),],None,None)),
        url(r'^Xadmin/',(get_urls(),None,None)),
        url(r'^query/',views.query),
        #
        # url('^yuan/',([
        #     url('^test01/',([
        #
        #         url('^test001/', test001),
        #         url('^test002/', test002),
        #     ],None,None)),
        #     url('^test02/',test02),
        #     url('^test03/',test03),
        #         ],None,None))
    
    ]
    

      

    结果:

    第二种方法 。

    def  list_view(request):
        return HttpResponse('list_view')
    
    def  add_view(request):
        return HttpResponse('add_view')
    
    def  change_view(request):
        return HttpResponse('change_view')
    
    def  delete_view(request):
        return HttpResponse('delete_view')
    
    def get_url2():
        temp =[]
        temp.append(url(r'^$',list_view))
        temp.append(url(r'^add/$',add_view))
        temp.append(url(r'^(d+)/change/$',change_view))
        temp.append(url(r'^(d+)/delete/$',delete_view))
    
    def get_urls():
        print(admin.site._registry)
    
        temp =[]
        for  model,admin_class_obj in admin.site._registry.items():
            app_name = model.meta.app_label
            model_name = model.meta.model_name
    
            temp.append(url(r'^{0}/{1}/'.format(app_name,model_name),(get_url2(),None,None)),)
        return temp

    类 的名字 如何写:

     类的app名字 :

    输出的结果:

     五 、URL的分发

     


    def list_view(request):
    return HttpResponse("list_view")

    
    

    def add_view(request):
    return HttpResponse("add_view")

    
    

    def change_view(request,id):
    return HttpResponse("change_view")

    
    

    def delete_view(request,id):
    return HttpResponse("delete_view")



    def get_urls_2(): temp=[] temp.append(url(r"^$",list_view)) temp.append(url(r"^add/$",add_view)) temp.append(url(r"^(d+)/change/$",change_view)) temp.append(url(r"^(d+)/delete/$",delete_view)) return temp
    def get_urls(): print(admin.site._registry) # {Book:modelAdmin(Book),.......} temp=[] for model,admin_class_obj in admin.site._registry.items(): app_name=model._meta.app_label model_name=model._meta.model_name temp.append(url(r'^{0}/{1}/'.format(app_name,model_name), (get_urls_2(),None,None)),) return temp

      

    admin 文件

    from django.contrib import admin
    
    # Register your models here.
    from .models import *
    from django.utils.safestring import mark_safe
    
    class BookConfig(admin.ModelAdmin):
    
        def deletes(self):
            return mark_safe('<a href =''> 删除</a>')
    
        list_display = ["title", "price", "publishDate", 'publish', deletes]
        list_display_links = ["price"]
        list_filter = ["price", "title", "authors", "publish"]
        list_editable = ["title", ]
    
        search_fields = ["title", "price"]
    
    admin.site.register(Book,BookConfig)
    
    print('1====>',admin.site._registry)
    
    admin.site.register(Publish)
    admin.site.register(Author)
    admin.site.register(AuthorDetail)
    print('2====>',admin.site._registry)
    

      

    打印出来的结果

    1====> {<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x00000257050332B0>, <class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x0000025705055CF8>, <class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x000002570506B9B0>}
    2====> {<class 'django.contrib.auth.models.Group'>: <django.contrib.auth.admin.GroupAdmin object at 0x00000257050332B0>, <class 'django.contrib.auth.models.User'>: <django.contrib.auth.admin.UserAdmin object at 0x0000025705055CF8>, <class 'app01.models.Book'>: <app01.admin.BookConfig object at 0x000002570506B9B0>, <class 'app01.models.Publish'>: <django.contrib.admin.options.ModelAdmin object at 0x000002570506B978>, <class 'app01.models.Author'>: <django.contrib.admin.options.ModelAdmin object at 0x000002570506BA20>, <class 'app01.models.AuthorDetail'>: <django.contrib.admin.options.ModelAdmin object at 0x000002570506BA58>}
    

      

    六、自定义Xadmin  之注册

    service 目录下的xadmin文件

    from django.conf.urls import url
    from django.shortcuts import HttpResponse,render,redirect
    class ModelXadmin(object):
        def __init__(self,model,site):
    
            self.model=model
            self.site=site
    
        def list_view(self, request):
            print("self.model",self.model)
    
            data_list=self.model.objects.all()
            print("data_list",data_list)
            return render(request, 'list_view.html',{"data_list":data_list})
    
        def add_view(self, request):
            return render(request, 'add_view.html')
    
        def change_view(self, request, id):
            return render(request, 'change_view.html')
    
        def delete_view(self, request, id):
            return render(request, 'delete_view.html')
    
        def get_urls2(self):
            temp = []
    
            temp.append(url(r"^$", self.list_view))
            temp.append(url(r"^add/$", self.add_view))
            temp.append(url(r"^(d+)/change/$", self.change_view))
            temp.append(url(r"^(d+)/delete/$", self.delete_view))
    
            return temp
    
        @property
        def urls2(self):
            return self.get_urls2(), None, None
    
    
    class XadminSite(object):
        def __init__(self, name='admin'):
            self._registry = {}
    
    
        def get_urls(self):
    
            print(self._registry)  # {Book:modelAdmin(Book),.......}
    
            temp = []
            for model, admin_class_obj in self._registry.items():
                app_name = model._meta.app_label
                model_name = model._meta.model_name
    
                temp.append(url(r'^{0}/{1}/'.format(app_name, model_name), admin_class_obj.urls2), )
    
    
                '''
                url(r"app01/book",ModelXadmin(Book,site).urls2)
                url(r"app01/publish",ModelXadmin(Publish,site).urls2)
                url(r"app02/order",ModelXadmin(Order,site).urls2)
                
                '''
            return temp
    
        @property
        def urls(self):
    
            return self.get_urls(),None,None
    
        def register(self, model, admin_class=None, **options):
            if not admin_class:
                     admin_class = ModelXadmin
    
            self._registry[model] = admin_class(model, self) # {Book:ModelAdmin(Book),Publish:ModelAdmin(Publish)}
    
    site=XadminSite()
    

      

    app01 下的xadmin文件

    from django.contrib import admin
    
    # Register your models here.
    
    
    from Xadmin.service.Xadmin import site,ModelXadmin
    
    print("app01 Xadmin")
    
    from app01.models import *
    
    class BookConfig(ModelXadmin):
        list_display=["title","prcie"]
    
    site.register(Book,BookConfig)
    
    
    class BookConfig(ModelXadmin):
        list_display=["name"]
    site.register(Publish,BookConfig)
    
    
    
    site.register(Author)
    site.register(AuthorDetail)
    

      app02 下的xadmin文件

    from Xadmin.service.Xadmin import site
    
    from app02.models import *
    
    site.register(Order)
    site.register(Food)
    
    print("_registry",site._registry)
    

      

    views文件

    from django.conf.urls import url
    from django.contrib import admin
    
    
    from Xadmin.service.Xadmin import site
    urlpatterns = [
        url(r'^admin/',  admin.site.urls),
        url(r'^Xadmin/', site.urls),
    ]
  • 相关阅读:
    常用坐标系椭球参数整理
    ArcEngine编辑保存错误:Unable to create logfile system tables
    ArcEngine:The XY domain on the spatial reference is not set or invalid错误
    dockManager中DockPanel的刷新问题!
    ibatis实现Iterate的使用
    mongodb用子文档做为查询条件的两种方法
    Eclipse中的文件导航插件StartExplorer
    mongoVUE的增删改查操作使用说明
    什么是脏读,不可重复读,幻读
    转:Maven常用命令
  • 原文地址:https://www.cnblogs.com/mengbin0546/p/9126817.html
Copyright © 2011-2022 走看看