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')