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()
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)
=======================================我的=========
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()
==============================
https://mubu.com/doc/3g4b4BrizW

浙公网安备 33010602011771号