stark组件(1):动态生成URL
项目启动时自动生成URL
效果图:


知识点:
- Django启动前通过apps下的ready方法执行一个可以生成URL的py文件
- include函数主要返回有三个元素的一个元组。第一个是url配置(urlpatterns),第二个是app(app_name),第三个是命名空间(namespace)。
- 通过单例模式,我们反复操作一个对象。
项目名:stark_practice
业务app:web
stark app:stark
一、在业务表中生成数据库
web/models.py
from django.db import models class Department(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)
department = models.ForeignKey(verbose_name='部门', to='Department', on_delete=models.CASCADE)
二、加载django项目时自动执行stark文件
stark.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') # 执行名为stark的py文件
三、stark组件
stark/service/core_function.py
from django.urls import re_path 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中的数据库表对应的类。
:param handler_class: 处理请求的视图函数所在的类
:return:
"""
"""
self._registry = [
{'model_class': model.Department,'handler':DepartmentHandler(models.Department)},
{'model_class': model.UserInfo,'handler':UserInfo(models.UserInfo)},
{'model_class': model.Host,'handler':Host(models.Host)},
]
"""
# 注意:handler_class接收的第一个参数是数据库表对应的类
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_name = model_class._meta.app_label # 获取当前类所在的app
model_name = model_class._meta.model_name # 获取当前类所在的表名称
patterns.append(re_path(r'%s/%s/list' % (app_name, model_name), handler.list_view))
patterns.append(re_path(r'%s/%s/add' % (app_name, model_name), handler.add_view))
patterns.append(re_path(r'%s/%s/edit' % (app_name, model_name), handler.edit_view))
patterns.append(re_path(r'%s/%s/delete' % (app_name, model_name), handler.delete_view)) return patterns @property
def urls(self):
return self.get_urls(), self.app_name, self.namespace site = StarkSite()
四、使用strak组件
web/stark.py
from django.shortcuts import HttpResponse
from stark.service.core_func import site from web import models class DepartmentHandler(object):
def __init__(self, model_class):
self.model_class = model_class def list_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('列表页面') def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
return HttpResponse('添加页面') def edit_view(self, request):
"""
编辑页面
:param request:
:return:
"""
return HttpResponse('编辑页面') def delete_view(self, request):
"""
删除页面
:param request:
:return:
"""
return HttpResponse('删除页面') class UserInfoHandler:
def __init__(self, model_class):
self.model_class = model_class def list_view(self, request):
"""
列表页面
:param request:
:return:
"""
return HttpResponse('列表页面') def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
return HttpResponse('添加页面') def edit_view(self, request):
"""
编辑页面
:param request:
:return:
"""
return HttpResponse('编辑页面') def delete_view(self, request):
"""
删除页面
:param request:
:return:
"""
return HttpResponse('删除页面') site.register(models.Department, DepartmentHandler)
site.register(models.UserInfo, UserInfoHandler)
五、注册URL
stark_practice/urls.py
from django.contrib import admin
from django.urls import path, re_path from stark.service.core_func import site urlpatterns = [
path('admin/', admin.site.urls),
re_path(r'^stark/', site.urls), ]
stark组件(1):动态生成URL的更多相关文章
- 使用<jsp:include>,不想写死URL,动态生成URL的解决的方法
JSP中文件包括有2种方式,静态包括和动态包括. 静态包括使用<%@ include file="" %>.动态包括使用<jsp:include page=&qu ...
- stark - 注册表、生成url
一.配置 stark组件开发,仿django自带得admin组件. 1. startapp stark 2. settings: 'stark.apps.StarkConfig' 3. 启动就执行 f ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- 一种根据URL参数条件动态生成URL的方法
最近做了一个产品列表页类似于搜索列表页, 功能比较简单,比搜索页复杂的逻辑在于,生成各个查询条件的URL.我们的链接如下: http://xxx.xxx.xxx/product/list.html?s ...
- 关于动态生成data组件
/*! * WeX5 v3 (http://www.justep.com) * Copyright 2015 Justep, Inc. * Licensed under Apache License, ...
- laravel发送邮件模板中点击的链接url动态生成
邮件模板里有url链接,生成链接有三种方式(目前总结出这三种方式)这个链接可以是: http://www.xxx.com/active?id=xxx&token=xxx 这种形式是把url ...
- ASP.NET MVC之视图生成URL(二)
前言 上一节我们讲述了MVC中从控制器到视图传递数据的四种方式,想必大家早已掌握了,那我们继续往下走. 话题 在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分 ...
- ASP.NET MVC之视图生成URL
在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分情况下都是通过链接来实现,当然这是一种非常不错的选择,为什么不说这是最好的选择呢?因为它也有其弊端,我们看看如 ...
- Django- 反向生成url
Django中提供了一个关于URL的映射的解决方案, 1.客户端的浏览器发起一个url请求,Django根据URL解析,把url中的参数捕获,调用相应的试图,获取相应的数据,然后返回给客户端显示 2. ...
随机推荐
- 性能测试学习第九天_脚本编写以及controller场景
创建java脚本 环境配置: 安装jdk(lr11最高支持java1.6) 配置环境变量 在lr选择java Vuser协议 脚本结构: 一般在init中编写初始化脚本,在action中编写业务流程, ...
- 程序员从初级到中级10个秘诀——摘自CSDN
程序员从初级到中级10个秘诀 1.学习先进的搜索技术.手段和及策略 2.帮助别人 教别人始终是学习一切东西的最好方法之一.相对而言,由于你在开发领域还是个新手,认为自己没什么可教给人家的,这可以理解. ...
- Java学习笔记--继承和多态(上)
1.通过继承来开发超类(superclass) 2.使用super 关键词唤起超类的构造方法 3.在超类中覆盖方法 4.区分override和overload 5.在Object类中探索toStrin ...
- java 多线程之取消与关闭
要使线程安全,快速,可靠的停下来并不是一件容易的事情.java并没有提供任何机制来安全的终止线程.但是java提供了中断(interrupt)使一个线程可以终止另一个线程的当前工作 每个线程都有一个b ...
- 程序运行的cpu时间
time.clock() 测量CPU时间,比较精准,通过比较程序运行前后的CPU时间差,得出程序运行的CPU时间.
- Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单
如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...
- Centos内核调优参考
net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_keepalive_time = 600 net.i ...
- COGS 1191. [Tyvj Feb11] 猫咪的进化
★ 输入文件:neko.in 输出文件:neko.out 简单对比时间限制:1 s 内存限制:128 MB [背景] 对于一只猫咪来说,它是有九条命的.但是并不是所有的猫咪都是这样,只 ...
- [转载]AngularJS入门教程03:迭代器
我们在上一步做了很多基础性的训练,所以现在我们可以来做一些简单的事情喽.我们要加入全文检索功能(没错,这个真的非常简单!).同时,我们也会写一个端到端测试,因为一个好的端到端测试可以帮上很大忙.它监视 ...
- World Wind Java开发之十——AnalyticSurface栅格渲染(转)
http://blog.csdn.net/giser_whu/article/details/43017881 1.AnalyticSurfaceDemo ArcGIS下对栅格的各种分级渲染效果是非常 ...