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. ...
随机推荐
- 如何配置阿里Maven镜像
1.下载maven的zip解压,官方下载地址为:http://maven.apache.org/download.cgi 选择需要下载maven的版本就好了 2.到下载的maven路径下,conf/s ...
- angular 学习笔记(2) ng-repeat遍历json
视图: <div ng-app="myApp" ng-controller="myCtrl"> <ul> <li ng-repea ...
- MATLAB之画确定区域内不重合的随机圆
MATLAB之画确定区域内不重合的随机圆 程序要求:在确定区域内,画互不重合的圆. 知识点: (1)A=p'; 转置运算 (2)ones(a,b)产生a行b列全1数组 (3)rand(a,b)产生a行 ...
- ArcGIS 从FileGDB中导出数据异常 000732
错误代码:000732 产生原因:文件夹命名时起名为“xxx.gdb”,造成是系统识别异常.
- unhandled event loop exception解决方案
今天突然遇到这个问题,打开ADT就报unhandled event loop exception, 原因是ATI显卡的HydraDM.exe HydraDM64.exe进程somehow跟ADT起了冲 ...
- JS案例练习:图片切换+切换模式
先附图: CSS样式部分: <style> *{;} body{font-family:'Microsoft YaHei';} .menu{margin:20px auto 0; widt ...
- ADO数据库编程详解(C++)----初级入门篇
一.概述 ADO即Microsoft ActiveXData Object,是Microsoft继ODBC之后,基于OLE DB技术的一种数据库操作技术,使您能够编写通过 OLE DB提供者对在数据库 ...
- Hadoop之—— WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
[hadoop@hadoop000 hadoop]$ ldd --version ldd (GNU libc) 2.12 Copyright (C) Free Software Foundation, ...
- C#实现正则表达式
如果想了解正则表达式的基础知识:http://www.cnblogs.com/alvin-niu/p/6430758.html 一.C#中的Regex类 1.在C#中开发正则表达式,首先要引用Syst ...
- 初学python,感受和C的不同
从开始看Python到现在也有半个多月了,前后看了Python核心编程和Dive into Python两本书.话说半个月看两本,是个人都知道有多囫囵吞枣,这也是因为我暂时没有需求拿这个做大型开发,主 ...