效果图:

Handler类里处理的增删改查、路由分发、给URL设置别名等包括以后还要添加的很多功能,每一个数据库的类都需要,所以我们要把Handler提取成一个基类。提取成基类后,每一个数据表都可以继承这个基类,然后有需要的话可以在这个基类的基础上重写函数,定制自己的方法。

Handler下新增函数get_urls是为了解耦Stark类下的get_urls

一、stark组件

stark/service/core_func.py

from django.urls import re_path
from django.shortcuts import HttpResponse, render class StarkHandler(object):
def __init__(self, model_class, prev=None):
self.model_class = model_class
self.prev = prev def list_view(self, request):
"""
列表页面
:param request:
:return:
"""
data_list = self.model_class.objects.all()
return render(request, 'stark/data_list.html', {'data_list': data_list}) def add_view(self, request):
"""
添加页面
:param request:
:return:
"""
return HttpResponse('添加页面') def edit_view(self, request, pk):
"""
编辑页面
:param request:
:return:
"""
return HttpResponse('编辑页面') def delete_view(self, request, pk):
"""
删除页面
:param request:
:param pk:
:return:
"""
return HttpResponse('删除页面') def get_urls(self):
app_name, model_name = self.model_class._meta.app_label, self.model_class._meta.model_name
if self.prev:
patterns = [
re_path(r'^list/$', self.list_view, name="%s_%s_%s_list" % (app_name, model_name, self.prev)),
re_path(r'^add/$', self.add_view, name="%s_%s_%s_add" % (app_name, model_name, self.prev)),
re_path(r'^edit/(\d+)/$', self.edit_view, name="%s_%s_%s_edit" % (app_name, model_name, self.prev)),
re_path(r'^delete/(\d+)/$', self.delete_view,
name="%s_%s_%s_delete" % (app_name, model_name, self.prev)),
]
else:
patterns = [
re_path(r'^list/$', self.list_view, name="%s_%s_list" % (app_name, model_name,)),
re_path(r'^add/$', self.add_view, name="%s_%s_add" % (app_name, model_name,)),
re_path(r'^edit/(\d+)/$', self.edit_view, name="%s_%s_edit" % (app_name, model_name,)),
re_path(r'^delete/(\d+)/$', self.delete_view,
name="%s_%s_delete" % (app_name, model_name,)),
]
patterns.extend(self.extra_urls())
return patterns def extra_urls(self):
return [] class StarkSite(object):
def __init__(self):
self._registry = []
self.app_name = 'stark'
self.namespace = 'stark' def register(self, model_class, handler_class=None, prev=None):
"""
:param model_class: 是models中的数据库表对应的类。
:param handler_class: 处理请求的视图函数所在的类
:param prev: 生成URL的前缀
:return:
""" if not handler_class:
handler_class = StarkHandler
self._registry.append({'model_class': model_class, 'handler': handler_class(model_class, prev), 'prev': prev}) def get_urls(self):
patterns = []
for item in self._registry:
model_class = item['model_class']
handler = item['handler']
prev = item['prev']
app_name, model_name = model_class._meta.app_label, model_class._meta.model_name
if prev:
patterns.append(
re_path(r'^%s/%s/%s/' % (app_name, model_name, prev,), (handler.get_urls(), None, None)))
else:
patterns.append(re_path(r'^%s/%s/' % (app_name, model_name,), (handler.get_urls(), None, None))) return patterns @property
def urls(self):
return self.get_urls(), self.app_name, self.namespace site = StarkSite()

二、业务处理

web/stark.py

from django.urls import re_path

from django.shortcuts import HttpResponse
from stark.service.core_func import site, StarkHandler from web import models class DepartmentHandler(StarkHandler):
def extra_urls(self):
"""
增加额外的URL
:return:
"""
# 给部门增加了详情页:/stark/web/department/private/detail/1
return [
re_path(r'^detail/(\d+)', self.detail_view)
] def detail_view(self, request, pk):
return HttpResponse('详细页面') class UserInfoHandler(StarkHandler):
def get_urls(self):
"""
修改url
:return:
"""
# 用户信息只有list和add的url
patterns = [
re_path(r'^list/$', self.list_view),
re_path(r'^add/$', self.add_view),
] return patterns site.register(models.Department, DepartmentHandler, prev='private') # 给部门的url增加了前缀:/stark/web/department/private/
site.register(models.UserInfo, UserInfoHandler)

stark组件(2):提取公共视图函数、URL分发和设置别名的更多相关文章

  1. stark组件开发之提取公共视图函数

     路由问题, 已经解决! 然后就是视图函数的问题了: 不想重复写的解决途径就是, python  类的继承了! 写一个基类, 基类定义 增删改查. 然后其他的,全部去继承他! from django. ...

  2. 12 stark组件之pop,按钮,url,页面

    1.Window open() 方法 http://www.runoob.com/jsref/met-win-open.html 效果图   2.admin的pop添加按钮 3.stark之pop功能 ...

  3. stark组件配置,二层URL

    1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...

  4. 01_Django-介绍-项目结构-URL和视图函数

    01_Django-介绍-项目结构-URL和视图函数 视频:https://www.bilibili.com/video/BV1vK4y1o7jH 博客:https://blog.csdn.net/c ...

  5. stark组件之创建

    stark组件之需求 仿照Django中的admin , 开发了自己的stark组件,实现类似数据库客户端的功能,对数据进行增删改查 . stark之创建 1.在项目中 创建stark应用,app01 ...

  6. django系列3.3--view视图函数, render, reverse(未完待续)

    1.view视图函数 urls分发之后所用到的处理函数 2.render 用于渲染页面 在views.py中常用 from django.shortcuts import render, HttpRe ...

  7. Stark组件 (一)

    Stark组件构建 1.启动所有app下的stark.py文件,的配置实现步骤 1.创建一个Django项目crm,并创建  app1 ,app2, stark 三个app 2.在crm 项目的set ...

  8. stark组件之处理函数动态url构造(五)

    在这个组件中有内置的4个处理函数,它们都有自己对应的url,那么它们的url是怎么构造的呢? ... urlpatterns = [ re_path('list/$', self.wrapper(se ...

  9. stark - 4 ⇲ 视图函数

    ✘  list_view 处理表格(默认是显示表结构的所有字段) 1 list_display = self.get_list_display() # 4.1处理表头 header_list = [] ...

随机推荐

  1. Oracle权限管理

    一)用户Oracle中的用户分为二大类1)Oracle数据库服务器创建时,由系统自动创建的用户,叫系统用户,如sys.2)利用系统用户创建的用户,叫普通用户,如scott,hr,c##tiger,zh ...

  2. json java simple-json

    http://code.google.com/p/json-simple/wiki/EncodingExamples#Example_1-1_-_Encode_a_JSON_object javac ...

  3. svn报错cleanup failed–previous operation has not finished; run cleanup if it was interrupte...

    今天在svn提交的时候它卡顿了一下,我以为已经提交完了,就按了一下,结果就再也恢复不了,也继续不了了... 报错 cleanup failed–previous operation has not f ...

  4. MVC学习6 学习使用Code First Migrations功能 把Model的更新同步到DB中

     参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...

  5. Mavlink消息包解析

    Byte Index 字节索引 Content 内容 Value 值 Explanation 说明 0 包起始标志 v1.0: 0xFE (v0.9: 0x55) 指示新消息帧的开始.在v1.0版本中 ...

  6. 安装mysql-installer-community

    1.在官网上下载mysql-installer-community-5.6.25.0 2.选择MySQL Installer 3.选择Windows (x86, 32-bit), MSI Instal ...

  7. [转]Jetson TX1 开发教程(1)配置与刷机

    开箱 Jetson TX1是英伟达公司新出的GPU开发板,拥有世界上先进的嵌入式视觉计算系统,提供高性能.新技术和极佳的开发平台.在进行配置和刷机工作之前,先来一张全家福: 可以看到,Jetson T ...

  8. Keymob带你玩转新广告法下的移动营销

    2015年9月1日新广告法正式实施,对广告代言人.广告类别.广告语等都做了一系列新规定,堪称有史以来最严广告法.随着新广告法的实施,以往一些庸俗.夸张的广告也逐渐和大众说再见了. 2015年 “互联网 ...

  9. ubuntu 自动启动程序

    首先打开终端ctrl + alt + t sudo  -i 输入密码:ubuntu chmod 777 /etc/rc.local 打开  vi   /etc/rc.local 按  i  键进入输入 ...

  10. 【Python音乐生成】这是一个超棒的dataset

    http://colinraffel.com/projects/lmd/