一、配置

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. hadoop中文官网

    http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_shell.html

  2. NLP入门相关——学习笔记

    近义词.一词多义 GPT.ELMO.Bert

  3. phpcms v9如何更改分页显示条数?

    默认显示页码数有10条,比如想更改成显示3条,例如这样 上一页 1 2 3...34 下一页 更改phpcms\libs\functions\global.func.php,找到分页函数,大概在665 ...

  4. mysql中,如何查看数据库中当前可用的校勘?字符集默认的collation?

    需求描述: mysql的字符集在使用的过程中会有一些规则,这些规则就组成了校勘, 也就是通过什么规则做什么事,比如,如何比较两个字符的大小,后台都是有一些 规则,这些规则就是校勘的一部分. 那么,查看 ...

  5. linux用户态定时器的使用---19

    原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/ linux操作系统为每一个进程提供了3个内部计时器. ITIMER_REAL;ITIMER_VI ...

  6. Redis生成Id主键的工具

    public class PrimaryKeyGenerator { private static readonly NedisClient client = new NedisClient(GetR ...

  7. HTML&CSS精选笔记_列表与超链接

    列表与超链接 列表标记 无序列表ul 无序列表的各个列表项之间没有顺序级别之分,是并列的 <ul> <li>列表项1</li> <li>列表项2< ...

  8. ios开发之--ZHPickView输出格式不出现 +0000

    这样写就不会输出 +0000了 NSDate *select = [_datePicker date]; NSDateFormatter *dateFormatter = [[NSDateFormat ...

  9. 添加app第一次启动页面

    一.添加几个成员变量 @interface hDisplayView ()<UIScrollViewDelegate> { UIScrollView *_bigScrollView; NS ...

  10. WAS创建虚拟主机和传输链

    一.配置虚拟主机 1.登录控制台