stark - 注册表、生成url
一、配置
stark组件开发,仿django自带得admin组件。
1. startapp stark
2. settings: 'stark.apps.StarkConfig'
3. 启动就执行
from django.apps import AppConfig
from django.utils.module_loading import autodiscover_modules class StarkConfig(AppConfig):
name = 'stark' # 程序启动时,扫描app下得指定文件(stark.py)并执行
def ready(self):
autodiscover_modules('stark')
4.models.py (一对一,一对多,多对多)
from django.db import models # Create your models here. class Author(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
age = models.IntegerField() # 与AuthorDetail建立一对一的关系
authorDetail = models.OneToOneField(to="AuthorDetail",to_field="nid", on_delete=models.CASCADE) def __str__(self):
return self.name class AuthorDetail(models.Model):
nid = models.AutoField(primary_key=True)
birthday = models.DateField()
telephone = models.BigIntegerField()
addr = models.CharField(max_length=64) def __str__(self):
return str(self.telephone) class Publish(models.Model):
nid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
city = models.CharField(max_length=32)
email = models.EmailField() def __str__(self):
return self.name class Book(models.Model):
nid = models.AutoField(primary_key=True)
title = models.CharField(verbose_name='名称', max_length=32)
publishDate = models.DateField()
price = models.DecimalField(verbose_name='价格', max_digits=5,decimal_places=2) # 与Publish建立一对多的关系,外键字段建立在多的一方
publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE)
# 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
authors = models.ManyToManyField("Author") def __str__(self):
return self.title
models.py
makemigrations
migrate
createsuperuser (yuan yuan1234)
5.admin.py
from django.contrib import admin # Register your models here. from .models import * class BookConfig(admin.ModelAdmin):
list_display = ['title', 'price', 'publish']
list_filter = ['title', 'publish', 'authors']
# list_display_links = ['price']
def patch_init(self, request, queryset):
print(queryset) # <QuerySet [<Book: shu 2>, <Book: gOy>]>
queryset.update(price=100) patch_init.short_description = '批量初始化' actions = [patch_init] admin.site.register(Book, BookConfig)
admin.site.register(Author)
admin.site.register(AuthorDetail)
admin.site.register(Publish)
admin.py

二、注册表
知识点:
单例对象,全局得!
site = StarkSite()
注册:{ ... }
self._registry[model] = stark_class(model,self)
stark.site.register(Book, BookConfig)
stark.site.register(Publish)
print(stark.site._registry)
{<class 'app01.models.Book'>: <app01.stark.BookConfig object at 0x000002423EC9F710>,
<class 'app01.models.Publish'>: <stark.service.stark.ModelStark object at 0x000002423EC9F748>,
stark/service/stark.py (单例)
class ModelStark(object):
list_display = [] def __init__(self, model, site):
self.model = model
self.site = site class StarkSite(object):
def __init__(self):
self._registry = {} def register(self, model, stark_class=None):
if not stark_class:
stark_class = ModelStark self._registry[model] = stark_class(model,self) site = StarkSite()
app01/stark.py
from stark.service import stark
from .models import * class BookConfig(stark.ModelStark):
pass stark.site.register(Book, BookConfig)
stark.site.register(Publish)
stark.site.register(Author)
stark.site.register(AuthorDetail) print(stark.site._registry) """
{<class 'app01.models.Book'>: <app01.stark.BookConfig object at 0x000002423EC9F710>,
<class 'app01.models.Publish'>: <stark.service.stark.ModelStark object at 0x000002423EC9F748>,
<class 'app01.models.Author'>: <stark.service.stark.ModelStark object at 0x000002423EC9F898>,
<class 'app01.models.AuthorDetail'>: <stark.service.stark.ModelStark object at 0x000002423EC9FCC0>} """
三、生成url
知识点:
1. url分发:
url(r'^stark/', ([],None,None))
url(r'^stark/', stark.site.urls)
@property
def urls(self):
return self.get_urls(), None, None
2. 用户可以自定制配置页面,所以调用配置类 stark_class_obj.urls2
# 分发增删改查
temp.append(url(r'%s/%s/'%(app_label,model_name), stark_class_obj.urls2))
3. 名称空间,之后可以反向解析,灵活应用
model_name = self.model._meta.model_name
app_label = self.model._meta.app_label # print(model_name, app_label)
"""
book app01
publish app01
author app01
authordetail app01
"""
temp.append(url(r'add/', self.add_view, name="%s_%s_add" % (app_label, model_name)))
temp.append(url(r'(\d+)/delete/', self.delete_view, name="%s_%s_delete" % (app_label, model_name)))
temp.append(url(r'(\d+)/change/', self.change_view, name="%s_%s_change" % (app_label, model_name)))
temp.append(url(r'^$', self.list_view, name="%s_%s_list" % (app_label, model_name)))
4.ModelStark
ModelStark()
self.model:用户访问的模型表

urls.py
from django.conf.urls import url
from django.contrib import admin from stark.service import stark urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^stark/', stark.site.urls)
]
stark/service/stark.py (url分发)
from django.conf.urls import url
from django.shortcuts import HttpResponse, reverse, redirect class ModelStark(object):
list_display = [] def __init__(self, model, site):
self.model = model
self.site = site def add_view(self, request):
return HttpResponse('add_view') def delete_view(self, request, delete_id):
return HttpResponse('delete_view') def change_view(self, request, change_id):
return HttpResponse('change_view') def list_view(self, request):
return HttpResponse('list_view') def get_urls2(self):
temp = [] model_name = self.model._meta.model_name
app_label = self.model._meta.app_label # print(model_name, app_label)
"""
book app01
publish app01
author app01
authordetail app01
"""
temp.append(url(r'add/', self.add_view, name="%s_%s_add" % (app_label, model_name)))
temp.append(url(r'(\d+)/delete/', self.delete_view, name="%s_%s_delete" % (app_label, model_name)))
temp.append(url(r'(\d+)/change/', self.change_view, name="%s_%s_change" % (app_label, model_name)))
temp.append(url(r'^$', self.list_view, name="%s_%s_list" % (app_label, model_name))) return temp @property
def urls2(self): return self.get_urls2(), None, None class StarkSite(object):
def __init__(self):
self._registry = {} def register(self, model, stark_class=None):
if not stark_class:
stark_class = ModelStark self._registry[model] = stark_class(model,self) def get_urls(self):
temp = [] # 模型表,配置类对象
for model, stark_class_obj in self._registry.items():
# print(model,'---',stark_class_obj)
"""
<class 'app01.models.Book'> --- <app01.stark.BookConfig object at 0x000001F03A8BF7F0>
<class 'app01.models.Publish'> --- <stark.service.stark.ModelStark object at 0x000001F03A8BF748>
"""
model_name = model._meta.model_name
app_label = model._meta.app_label # 分发增删改查
temp.append(url(r'%s/%s/'%(app_label,model_name), stark_class_obj.urls2))
"""
path('app01/userinfo/',UserConfig(Userinfo,site).urls2),
path('app01/book/',ModelStark(Book,site).urls2),
"""
return temp
@property
def urls(self):
return self.get_urls(), None, None
site = StarkSite()
stark - 注册表、生成url的更多相关文章
- stark - 3 ⇲自动生成URL及视图
以往建立了一张表,需要 1.为每张表创建4个url 2.为每张表创建4个视图函数 urlpatterns = [ url('^role/list/$',role.role_list,name='rol ...
- stark组件(1):动态生成URL
项目启动时自动生成URL 效果图: 知识点: Django启动前通过apps下的ready方法执行一个可以生成URL的py文件 include函数主要返回有三个元素的一个元组.第一个是url配置(ur ...
- MVC系列学习(十)-生成URL与表单
本次学习,在路由配置信息中,有两个路由规则,在网站第一次启动的时候,注册了两个路由表 1.动态生成url A.在路由规则中,因为Default在前面,所以最新找到该路由表,此时不管 自己定义的控制器名 ...
- stark组件开发之自动生成URL
app01\model.py from django.db import models # Create your models here. class Depart(models.Model): i ...
- bat生成vbs通过注册表禁用或启用USB端口
在网上找到的资料,经过自己简单的修改调整,通过bat生成vbs文件,由vbs文件操作注册表的键值,达到启用和禁用USB端口的目的. 当然,你也可以完全使用BAT操作注册表来完成修改注册表的键值的目的, ...
- C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- 【转】Win7注册表的使用(更新中)
一.注册表的存储结构和数据类型 1.基本概念: Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键. 键(Key):“位于左侧窗格如同文件夹图 ...
- 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议
引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...
- 入侵检测中需要监控的注册表路径研究(Windows Registry Security Check)
1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Wind ...
随机推荐
- Mysql利用match...against进行全文检索
在电商项目中,最核心的功能之一就是搜索功能,搜索做的好,整个电商平台就是个优秀的平台.一般搜索功能都使用搜索引擎如Lucene.solr.elasticsearch等,虽然这功能比较强大,但是对于一些 ...
- NSArray打印汉字的方法
(1) NSArray打印汉字 通过重载NSArray的- (NSString *)descriptionWithLocale:(id)locale方法 方法体例如以下: //依据设置的locale ...
- 使用存储过程将Oracle数据批量导出为多个csv文件
数据库有如下表结构: user_info ( user_id NUMBER primary key, user_name VARCHAR2(200) NOT NUL ...
- 父div高度不能自适应子div高度的解决方案
<div id="parent"><div id="content"> </div></div> 当conten ...
- LeetCode——Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary t ...
- Mac下,如何把Github上的仓库删除掉
这个虽然简单,但是还是做个记录,当初也是找不到地方,最终还是去百度了,步骤很简单: 如下: 1.进入Github主页,选中你要删除的仓库,点击进入到如下页面:
- js禁止img拖动
其实只需要一句代码即可,那就是阻止元素的默认事件: <body> <img src="./../imgs/cat.jpg" id="test" ...
- 图解利用vmware工具进行虚拟机克隆
在vmware上创建一台完整的虚拟机,在该创建的虚拟机上进行克隆,先关闭创建的虚拟机,然后选中你要克隆的虚拟机,右击->管理->克隆,然后点击下一步,如下图所示: 2 然后点击下一步,如下 ...
- 在SQL数据库中怎么去掉某一列的中的一写特殊字符
用REPLACE函数,把空格替换成 ''. 例:去除 表table 中 col 列的空字符去除空格符:update table set col = REPLACE(col,' ','') 还有tab制 ...
- MUI 图标筛选切换(父页面传值子页面)
1 父页面: index.html <li class="tab_layout"> <a href="javascript:;" clas ...