day18 stark组件开发之动态生成url
思路:
项目目录
在两个app中创建表结构
app01/models.py
from django.db import models
# Create your models here.
class Depart(models.Model):
"""
部门表
"""
title = models.CharField(verbose_name='部门名称', max_length=32)
class UserInfo(models.Model):
"""
用户表
"""
name = models.CharField(verbose_name='姓名', max_length=32)
age = models.CharField(verbose_name='年龄', max_length=32)
email = models.CharField(verbose_name='邮箱', max_length=32)
depart = models.ForeignKey(verbose_name='部门', to='Depart',on_delete=models.CASCADE)
app02/models.py
from django.db import models
# Create your models here.
class Host(models.Model):
"""
主机表
"""
host = models.CharField(verbose_name='主机名', max_length=32)
ip = models.GenericIPAddressField(verbose_name='IP')
class Role(models.Model):
"""
角色
"""
title = models.CharField(verbose_name='角色名称', max_length=32)
设置路由
from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url
from stark.service.v1 import site
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^stark/', site.urls),
]
stark组件编写动态生成url代码
stark/service/v1.py
# -*- encoding: utf-8 -*-
"""
@File : v1.py
@Time : 2022/1/16 19:59
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from django.conf.urls import url
from django.shortcuts import HttpResponse
class StarkSite(object):
def __init__(self):
self._registry = []
self.app_name = 'stark'
self.namespace = 'stark'
def register(self, model_class, handler_class):
"""
:param model_class: 是models中的数据库表对应的类。 models.UserInfo
:param handler_class: 处理请求的视图函数所在的类
:return:
"""
"""
self._registry = [
{'model_class':models.Depart,'handler':DepartHandler(models.Depart)},
{'model_class':models.UserInfo,'handler':UserInfoHandler(models.UserInfo)}
{'model_class':models.Host,'handler': HostHandler(models.Host) }
]
"""
self._registry.append({'model_class': model_class, 'handler': handler_class(model_class)})
def get_urls(self):
patterns = []
for item in self._registry:
model_class = item['model_class']
handler = item['handler']
app_label, model_name = model_class._meta.app_label, model_class._meta.model_name
patterns.append(url(r'%s/%s/list/$' % (app_label, model_name,), handler.changelist_view))
patterns.append(url(r'%s/%s/add/$' % (app_label, model_name,), handler.add_view))
patterns.append(url(r'%s/%s/change/(\d+)/$' % (app_label, model_name,), handler.change_view))
patterns.append(url(r'%s/%s/del/(\d+)/$' % (app_label, model_name,), handler.change_view))
return patterns
@property
def urls(self):
return self.get_urls(), self.app_name, self.namespace
site = StarkSite()
在stark项目的apps.py文件加上下面的代码,ready函数的作用是让Django在启动时自动扫描每一个app下面的stark.py文件
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules
class StarkConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'stark'
def ready(self):
autodiscover_modules('stark')
不同的app编写调用自动生成url模块
app01/stark.py
# -*- encoding: utf-8 -*-
"""
@File : stark_simon.py
@Time : 2022/1/16 20:09
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from django.shortcuts import HttpResponse
from stark.service.v1 import site
from app01 import models
class DepartHandler(object):
def __init__(self, model_class):
self.model_class = model_class
def changelist_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('部门列表页面')
def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
pass
def change_view(self, request, pk):
"""
编辑页面
:param request:
:param pk:
:return:
"""
pass
def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
pass
site.register(models.Depart, DepartHandler)
class UserInfoHandler(object):
def __init__(self, model_class):
self.model_class = model_class
def changelist_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('用户列表页面')
def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
pass
def change_view(self, request, pk):
"""
编辑页面
:param request:
:param pk:
:return:
"""
pass
def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
pass
site.register(models.UserInfo, UserInfoHandler)
app02/stark.py
# -*- encoding: utf-8 -*-
"""
@File : stark_simon.py
@Time : 2022/1/16 20:10
@Author : simon
@Email : 294168604@qq.com
@Software: PyCharm
"""
from django.shortcuts import HttpResponse
from stark.service.v1 import site
from app02 import models
class HostHandler(object):
def __init__(self, model_class):
self.model_class = model_class
def changelist_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('主机列表页面')
def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
pass
def change_view(self, request, pk):
"""
编辑页面
:param request:
:param pk:
:return:
"""
pass
def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
pass
site.register(models.Host, HostHandler)
class RoleHandler(object):
def __init__(self, model_class):
self.model_class = model_class
def changelist_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('角色列表页面')
def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
pass
def change_view(self, request, pk):
"""
编辑页面
:param request:
:param pk:
:return:
"""
pass
def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
pass
site.register(models.Role, RoleHandler)
页面效果
分类:
crm系统开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具