day84 CRM admin-url 仿admin

admin-url

urls.py

针对Food表,url:
http://127.0.0.1:8000/admin/app02/food/
                http://127.0.0.1:8000/admin/app02/food/add/
                http://127.0.0.1:8000/admin/app02/food/1/change/
                http://127.0.0.1:8000/admin/app02/food/2/delete/

+++++++++++++++++++++++++++++++++++++++
url分发:
    url(r'index',([],None,None))


from django.conf.urls import url
from django.contrib import admin
from django.shortcuts import HttpResponse,render,redirect

def test(request,page):
    return HttpResponse(page)

def listview(request):

    return HttpResponse("listview....")

def addview(request):

    return HttpResponse("addview")

def changeview(request,id):

    return HttpResponse("changeview")

def delview(request,id):

    return HttpResponse("delview")

def get_urls2():
    temp = [
        url(r"^$", listview),
        url(r"add/$", addview),
        url(r"(\d+)/change/$", changeview),
        url(r"(\d+)/delete/$", delview),
    ]
    return temp

def get_urls():
    temp=[]
    for model,config_obj in admin.site._registry.items():    #config_obj model对应的配置类对象 (可以是默认配置类也可以是自定义配置类)
        model_name = model._meta.model_name   #模型表的名称
        app_label = model._meta.app_label     #模型表所在app的名称
        print(model_name, app_label)
        temp.append(url(r'{}/{}/'.format(app_label,model_name),(get_urls2(),None,None)))
    return temp

urlpatterns = [
    url(r'stark',(get_urls(),None,None)),
    url(r'testadmin',([
        url(r'test1',([
            url(r'testa',([
                    url(r'(test1a)',test),
                          ],None,None)),
            url(r'(testb)',test),
            url(r'(testc)',test),
            ],None,None))
        ],None,None))
]
思考:
  将url作为分组参数传递是否可行?

 

注册app时

'stark.apps.StarkConfig',

项目下apps.py

from django.apps import AppConfig

from django.utils.module_loading import autodiscover_modules

class StarkConfig(AppConfig):
    name = 'stark'

    def ready(self):     #此固定函数会在项目启动时执行
        autodiscover_modules("stark")

 

 

仿admin

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01.apps.App01Config',
    'app02.apps.App02Config',
    'stark.apps.StarkConfig',
]

 

 urls.py

from django.conf.urls import url
from django.contrib import admin
from stark.service.sites import site

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

 

 

stark:(实现admin的模块app,使用app主要是为了在settings中注册)

 

stark/service/sites.py

from django.conf.urls import url
from django.shortcuts import HttpResponse,render,redirect

class ModelStark(object):
    """
    默认配置类
    """
    list_display = []

    def __init__(self,model):
        self.model = model

    def listview(self,request):

        print(self) # 当前访问模型表的配置类对象
        print(self.model) # 当前访问模型表

        data_list=self.model.objects.all()

        print("list_display:",self.list_display)

        return render(request,"list_view.html",locals())

    def addview(self, request):

        return HttpResponse("addview")

    def changeview(self, request,id):

        return HttpResponse("changeview")

    def delview(self, request,id):

        return HttpResponse("delview")

    def get_urls(self):
        temp = [
            url(r"^$", self.listview),
            url(r"add/$", self.addview),
            url(r"(\d+)/change/$", self.changeview),
            url(r"(\d+)/delete/$", self.delview),

        ]
        return temp

    @property
    def urls(self):
        return self.get_urls(), None, None


class AdminSite(object):
    """
    stark组件的全局类
    """

    def __init__(self):
        self._registry = {}

    def register(self, model, admin_class=None):
        # 设置配置类
        if not admin_class:
            admin_class = ModelStark

        self._registry[model] = admin_class(model)

    def get_urls(self):
        temp = []

        for model,config_obj in self._registry.items():
            model_name = model._meta.model_name
            app_label = model._meta.app_label
            temp.append(url(r'{}/{}/'.format(app_label,model_name),config_obj.urls))
        return temp

    @property
    def urls(self):
        return self.get_urls(),None,None

site = AdminSite()
sites.py

 

APP:

 

app01/stark.py

from stark.service.sites import site,ModelStark
from app01.models import *

class BookConfig(ModelStark):
    list_display=["title","price"]

site.register(Book,BookConfig)
site.register(Publish)
site.register(Author)
stark.py

 

 

 

=======================================我的=========

from django.conf.urls import url
from django.shortcuts import HttpResponse, render, redirect


class ModelStark(object):
    """
    默认配置类
    """
    list_display = []

    def __init__(self, model):
        self.model = model


class AdminSite(object):
    """
    stark组件的全局类
    """

    def __init__(self):
        self._registry = {}

    def register(self, model, admin_class=None):
        # 设置配置类
        if not admin_class:
            admin_class = ModelStark

        self._registry[model] = admin_class(model)

    def listview(self, request, model_obj=None):

        data_list = model_obj.objects.all()

        return render(request, "list_view.html", locals())

    def addview(self, request, model_obj=None):
        print(model_obj)
        data_list = model_obj.objects.all()
        return render(request, "list_view.html", locals())

    def changeview(self, request, id, model_obj=None):
        print(model_obj)
        data_list = model_obj.objects.filter(id=id)
        return render(request, "list_view.html", locals())

    def delview(self, request, id, model_obj=None):
        print(model_obj)
        data_list = model_obj.objects.filter(id=id)
        return render(request, "list_view.html", locals())

    def get_urls2(self, model):
        model_obj = model

        temp = [
            url(r"^$", self.listview, {"model_obj": model_obj}),
            url(r"add/$", self.addview, {"model_obj": model_obj}),
            url(r"(\d+)/change/$", self.changeview, {"model_obj": model_obj}),
            url(r"(\d+)/delete/$", self.delview, {"model_obj": model_obj}),

        ]
        return temp

    def get_urls(self):
        temp = []
        for model, config_obj in self._registry.items():
            model_name = model._meta.model_name
            app_label = model._meta.app_label
            temp.append(url(r'{}/{}/'.format(app_label, model_name), (self.get_urls2(model), None, None)))
        return temp

    @property
    def urls(self):
        return self.get_urls(), None, None


site = AdminSite()
sites.py

 

 ==============================

https://mubu.com/doc/3g4b4BrizW

posted @ 2018-08-28 17:34  eailoo  阅读(83)  评论(0)    收藏  举报