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. ...
随机推荐
- Dede友情链接和分页列表和内容分页去掉小圆点LI标签
我用了一个比较老式的模板,友情链接和列表页底下的一段分页导航会自动获取LI标签,导致错位.每段文字前还多出一个可恶的黑色实心小圆点,心想肯定是LI标签在搞怪,于是把模板文件和样式文件都翻看了一个底朝天 ...
- PHP中文手册1
1.入门 关于换行 PHP 会在输出时自动删除其结束符 ?>后的一个换行.该功能主要是针对在一个页面中嵌入多段 PHP 代码或者包含了无实质性输出的 PHP 文件而设计,与此同时也造成了一些疑惑 ...
- C#实现对EXCEL指定单元格进行操作
using System; using System.Collections.Generic; using System.Text; using Microsoft.Office.Interop.Ex ...
- JAVA4大线程池
不知不觉中我们电脑的硬件设施越来越好,从双核四线程普及到如今四核八线比比皆是.互联网发展至今,讲究的就是快,less is more,而且大数据的诞生和各种种类繁多的需求处理,单线程的程序逐渐不能满足 ...
- 使用HTML5 canvas做地图(3)图片加载平移放大缩小
终于开始可以写代码了,手都开始痒了.这里的代码仅仅是在chrome检测过,我可以肯定的是IE10以下浏览器是行不通,我一直在考虑,是不是使用IE禁止看我的篇博客,就是这群使用IE的人,给我加了很多工作 ...
- Android compress 压缩 会不会失真
微信的缩略图要求是不大于32k,这就需要对我的图片进行压缩.试了几种方法,一一道来. 代码如下 ByteArrayOutputStream baos = new ByteArrayOutputStre ...
- javascript HTML静态页面传值的四种方法
一:JavaScript静态页面值传递之URL篇能过URL进行传值.把要传递的信息接在URL上.Post.htm 代码如下: <input type="text" name= ...
- php:生成的时间与本地电脑的时间不匹配
如题,在php中我发现在数据库中的时间跟电脑上的时间没有同步 本地时间: 数据库中,生成的时间: 很明显,时分秒是对应不上去的,那么我们只要在php.ini中找到 这里被注释掉了,那我们就改成这样: ...
- GridView的 PreRender事件与 RowCreated、RowDataBound事件大乱斗
GridView的 PreRender事件与 RowCreated.RowDataBound事件大乱斗 之前写了几个范例,做了GridView的 PreRender事件与 RowCreated.Row ...
- linux 命令——45 free(转)
free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...