一、配置

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的更多相关文章

  1. stark - 3 ⇲自动生成URL及视图

    以往建立了一张表,需要 1.为每张表创建4个url 2.为每张表创建4个视图函数 urlpatterns = [ url('^role/list/$',role.role_list,name='rol ...

  2. stark组件(1):动态生成URL

    项目启动时自动生成URL 效果图: 知识点: Django启动前通过apps下的ready方法执行一个可以生成URL的py文件 include函数主要返回有三个元素的一个元组.第一个是url配置(ur ...

  3. MVC系列学习(十)-生成URL与表单

    本次学习,在路由配置信息中,有两个路由规则,在网站第一次启动的时候,注册了两个路由表 1.动态生成url A.在路由规则中,因为Default在前面,所以最新找到该路由表,此时不管 自己定义的控制器名 ...

  4. stark组件开发之自动生成URL

    app01\model.py from django.db import models # Create your models here. class Depart(models.Model): i ...

  5. bat生成vbs通过注册表禁用或启用USB端口

    在网上找到的资料,经过自己简单的修改调整,通过bat生成vbs文件,由vbs文件操作注册表的键值,达到启用和禁用USB端口的目的. 当然,你也可以完全使用BAT操作注册表来完成修改注册表的键值的目的, ...

  6. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  7. 【转】Win7注册表的使用(更新中)

    一.注册表的存储结构和数据类型 1.基本概念: Windows 7的注册表主要由“键”和“键值”构成,称HKEY为根键(RootKey),SubKey为子键. 键(Key):“位于左侧窗格如同文件夹图 ...

  8. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  9. 入侵检测中需要监控的注册表路径研究(Windows Registry Security Check)

    1. Windows注册表简介 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.早在Wind ...

随机推荐

  1. docker和kubernetes docker的区别

    之前公司的测试环境,刚开始自己搭建虚拟机,然后安装redis,nginx,mq,mysql,tomcat,jdk,marven,还有jekins.前面些还算好点,jekins还是比较麻烦的.然后搭完以 ...

  2. JavaScript ES2015

    <button>一</button> <button>二</button> <button>三</button> <but ...

  3. mysql中如何在命令行中,执行一个SQL脚本文件?

    需求描述: 在mysql数据库的使用中,有的时候,需要直接在shell的命令行中,执行某个SQL脚本文件, 比如,要初始化数据库,创建特定的存储过程,创建表等操作,这里进行一个基本的测试. 一般情况, ...

  4. 3th January 2014

    I owe my girl so much, i want to pay her, i know this is impossible,but I still try hard.

  5. [java ] java.util.zip.ZipException: error in opening zip file

    严重: Failed to processes JAR found at URL [jar:file:/D:/tools/apache-tomcat-7.0.64_2/webapps/bbs/WEB- ...

  6. Spring------SpringBoot参考书籍

    转载: http://download.csdn.net/download/plus_dy/8972653

  7. JBPM4.4_jBPM4.4的流程定义语言(设计流程)

    1. jBPM4.4的流程定义语言(设计流程) 1.1. process(流程) 是.jpdl.xml的根元素,可以指定的属性有: 属性名 作用说明 name 流程定义的名称,用于显示. key 流程 ...

  8. Java精选笔记_IO流【File(文件)类、遍历目录下的文件、删除文件及目录】

    File(文件)类 File类用于封装一个路径,该路径可以是从系统盘符开始的绝对路径,也可以是相对于当前目录而言的相对路径 File类内部封装的路径可以指向一个文件,也可以指向一个目录,在使用File ...

  9. JAVA实现随机无重复数字功能

    本文给大家介绍如何在JAVA中实现随机无重复数字的功能.如果您是初学者的话,有必要看一看这篇文章,因为这个功能一般会在面试中遇到.包括我本人在招聘人员的时候也喜欢拿这个问题去问别人,主要看一看考虑问题 ...

  10. ArcGIS Javascript 图层事件绑定

    1.使用Dojo---Connect Style Event dojo.connect(XXXGraphicsLayer, "onClick", function(evt) { / ...