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. ...
随机推荐
- [PHP]php发布和调用Webservice接口的案例
分两步走:1.服务端发布接口;2.客户端调用方法 1.服务端发布接口: 需要nusoap工具,下载地址:http://sourceforge.net/projects/nusoap/ 下载完和要发布接 ...
- Shell笔试题3
1.查找当前目录中所有大于500M的文件,把这些文件名写到一个文本文件中,并统计其个数.find ./ -size +500M -type f | tee file_list | wc -l 2.在目 ...
- pat1049. Counting Ones (30)
1049. Counting Ones (30) 时间限制 10 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue The task ...
- 打印机设置dns
1.登录打印机网页:打印机的ip 2.点击网络--网络标识--设置DNS
- Windows下 bat调用TSql问题
一.建立sql文件 在sql管理工具中写好sql文件,并保证能够正常运行,之后用unique编码保存. 二.建立一个bat文件osql -U登录用户 -P密码 -S服务器 <sql文件.sql ...
- js 数组对象去重
let hash = {}; let config = [ { name: 2, state: true, output: 'Y'}, { name: 3, state: true, output: ...
- 锁丶threading.local丶线程池丶生产者消费者模型
一丶锁 线程安全: 线程安全能够保证多个线程同时执行时程序依旧运行正确, 而且要保证对于共享的数据,可以由多个线程存取,但是同一时刻只能有一个线程进行存取. import threading v = ...
- 【mysql】mysql 配置
安装完mysql后, 要及得配置一下 /etc/mysql/my.cnf 配置字符编码为utf8 [client] default-character-set = utf8 [mysqld] defa ...
- Every ending is just a new beginning.
Every ending is just a new beginning.每次结束都是新的开始.
- 交互ajax
原生的js封装ajax1.创建ajax对象var oAjax=new XMLHttpRequest();//不兼容IE6var oAjax=new ActiveXobject('Microsoft.X ...