s111 stark组件
内容回顾:
1. 类当做key
2. django中的model所在app名称、以及小写类名。
def index(request):
# print(m1.UserInfo,m1.UserInfo._meta.app_label,m1.UserInfo._meta.model_name)
# print(m2.Role,m2.Role._meta.app_label,m2.Role._meta.model_name)
# 获取当前models类所在app名称、以及小写类名。
_registry = {
m1.UserInfo:'1',
m2.Role:'2',
}
for k,v in _registry.items():
print(k._meta.app_label,k._meta.model_name)
所在app名称 模块名(类名)
return HttpResponse('...')app01 userinfo
app02 role
今日内容:
1. stark介绍
快速完成对N张表增删改查+自定义复杂操作。
2. 单例模式
3. 路由系统
4. 启动后、路由加载前定制一段代码。
5. 参考django admin源码编写组件。
内容详细:
1. stark介绍
快速完成对N张表增删改查+自定义复杂操作。
2. 单例模式
这么写:
stark.py
class Adminstark(object):
pass
site = Adminstark()
调用实例:
import stark
stark.site
stark.site

单例模式/lewen.py
class AdminSite(object): def __init__(self):
self._registry = {} obj1 = AdminSite() 2.单例模式/lemi.py import lewen
lewen.obj1._registry['k2'] = 666
print(lewen.obj1) 2.单例模式/kevin.py
import lewen lewen.obj1._registry['k1'] = 123
import lemi print(lewen.obj1)
print(lewen.obj1._registry) 虽然导入了两次,但内存地址一样
# <lewen.AdminSite object at 0x0000026419BB7A58>
# <lewen.AdminSite object at 0x0000026419BB7A58>
# {'k1': 123, 'k2': 666}
单例模式
任何去导入lewen模块的就会执行, obj1 = AdminSite() ,
因为单列模式是所有调用的共用一个对象,如果每次调用,经构造方法绑定的值不做存储,那么会后面调用模块设置的值覆盖掉。
可以在单列模式内部用一个静态字段存储每次的不同调用设置的值。
3. 路由系统
- include
- namespace

- 补充:
项目/urls.py
from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.stark.urls),
url(r'^rbac/', ([
url(r'^login/', views.login),
url(r'^logout/', views.logout),
url(r'^x1/', ([
url(r'^add/', views.add,name='n1'),
url(r'^change/', views.change,name='n2'),
],None,'xxx')),
],None,'rbac')),
]
app01/views.py
from django.shortcuts import render
from django.shortcuts import HttpResponse
from django.urls import reverse def login(request):
url1 = reverse('rbac:xxx:n1')
url2 = reverse('rbac:xxx:n2') print(url1)
print(url2)
return HttpResponse('login') def logout(request):
return HttpResponse('logout') def add(request):
return HttpResponse('add') def change(request):
return HttpResponse('change')
- 补充:
4. 启动后、路由加载前定制一段代码。
stark/service/stark.py 类似admin功能,提供表的注册
a. 创建一个stark app 组件
b. 编写ready方法
stark/app.py
from django.apps import AppConfig
class StarkConfig(AppConfig):
name = 'stark'
def ready(self):
"Override this method in subclasses to run code when Django starts."
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
程序启动时,会先去每个app中找stark.py文件并加载。
c. 其他app中创建stark.py
d. 程序启动时便会自动加载 stark.py


class StarkConfig(object):
def __init__(self, model_class,site):
self.model_class = model_class
self.site = site def func(self):
print(self.model_class) def run(self):
self.func() class AdminSite(object):
def __init__(self):
self._registry = {}
self.app_name = 'stark'
self.namespace = 'stark' def register(self,model_class,stark_config=None):
# model_class=models.Role
# stark_config=None
if not stark_config: # 判断是否有自定义的配置,
stark_config = StarkConfig # 没有就用,默认的
# model_class=models.Role
# stark_config=RoleConfig
self._registry[model_class] = stark_config(model_class,self)
"""
{
models.UserInfo: StarkConfig(models.UserInfo), # 封装:model_class=UserInfo,site=site对象
models.Role: RoleConfig(models.Role) # 封装:model_class=Role,site=site对象
}
"""
for k,v in self._registry.items():
v.run()
# models.UserInfo,StarkConfig对象
# models.Role,RoleConfig对象 site = AdminSite()
stark/service/stark.py

from django.apps import AppConfig class StarkConfig(AppConfig):
name = 'stark' def ready(self):
"Override this method in subclasses to run code when Django starts."
from django.utils.module_loading import autodiscover_modules
autodiscover_modules('stark')
stark/apps.py

app01/models.py
from django.db import models
class UserInfo(models.Model):
title = models.CharField(max_length=32) app01/stark.py
from stark.service.stark import site
from app01 import models
site.register(models.UserInfo)
app01/stark.py
s111 stark组件的更多相关文章
- 【django之stark组件】
一.需求 仿照django的admin,开发自己的stark组件.实现类似数据库客户端的功能,对数据进行增删改查. 二.实现 1.在settings配置中分别注册这三个app # Applicatio ...
- django 之 stark组件
----------------------------------------------------------------烦恼没完没了,内心动荡不安,呜呼哀哉. 一.有个特殊的需求,需要用sta ...
- 设计stark组件
设计stark组件 作者:Eric 微信:loveoracle11g 新建Django项目crm_1随便起名 然后再创建一个App manage.py@crm_1 > startapp star ...
- stark组件的分页,模糊查询,批量删除
1.分页组件高阶 2.整合展示数据showlist类 3.stark组件之分页 3.stark组件之search模糊查询 4.action批量处理数据 4.总结 1.分页组件高阶 1.分页的class ...
- stark组件配置,二层URL
1.django的admin配置 2 stark组件开发 3.2层url分发 4.小结 1.django的admin配置 model.py from django.db import models # ...
- CRM项目之stark组件
. stark也是一个app(用startapp stark创建),目标时把这个做成一个可以拔插的组件 . setting文件下INSTALLED_APPS 路径要配置好(app的注册) . 写好si ...
- stark组件开发之列表页面应用示例
已经解决的,自定义的扩展函数,功能.但是 不可能返回. 一个 固定的页面把! 应该是,点击那条 记录之后的编辑, 就会跳转到相应的,编辑页面.所以 这个标签的 <a href="/ ...
- Django之stark组件
现在让我说啥是stark组件,我也说不清楚.反正从今天讲的知识来看,今天完成的就是自己写一个模块,这个模块包含了admin后台管理工具的一些比较好用的功能,我们把它提炼出来,也就是相当于自己写一个ad ...
- CRM项目之stark组件(2)
那么从今天开始呢,我们就要开始设计属于我们自己的admin组件,起个名字就叫stark吧(当然你愿意叫什么都可以). stark组件之四步走 仿照admin组件实现流程,stark组件要实现四件事情: ...
随机推荐
- VBA 语句集400句
定制模块行为(1) Option Explicit '强制对模块内所有变量进行声明 Option Private Module '标记模块为私有,仅对同一工程中其它模块有用,在宏对话框中不显示 ...
- WDA-FPM-1-Roadmap(GAF)
转载:https://www.cnblogs.com/sapSB/p/10077564.html 首先要有个简单的认识: 1.FPM支持的几种UI配置界面接口: Object Instance Flo ...
- SecureCRT去除关闭Session的确认窗口提示
- js中常用的内部函数的使用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 正则表达式在JS中的使用
<script type="text/javascript"> /** *正则表达式在js中的第一种使用方式: * RegExp 通过构造器去使用正则表达式 需要对反斜 ...
- drupal 用法小结,drupal select ,query ,distinct
https://api.drupal.org/api/drupal/includes%21actions.inc/function/actions_do/7.x addFileds : 这个更全点: ...
- Analyzing Microarray Data with R
1) 熟悉CEL file 从 NCBI GEO (http://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE24460)下载GSE24460. 将得到 ...
- Access to the path 'C:\inetpub\wwwroot\mysite\images\savehere' is denied.
访问路径被拒绝 我解决了这个设置: IIS>应用程序池> [您的站点]>高级设置...>标识>内置帐户> LocalSystem
- Neuron network
关于神经网络你不能不知道的一切 作者|Kailash Ahirwar 编译|Sambodhi 编辑|Vincent AI前线导语:理解什么是人工智能,以及机器学习和深度学习是如何影响人工智能的,这是一 ...
- 10.Regular Expression Matching (String; Back-Track,DP)
Implement regular expression matching with support for '.' and '*'. '.' Matches any single character ...