java可视化编程动态增删组件_快速实现增删改查组件(起步阶段!!!)

本文介绍了Java可视化编程中动态增删改查组件的实现过程,涉及反射、路由系统和ModelForm的创建。通过创建StarkConfig和StarkSite类,实现了展示页面、自定义按钮、动态生成URL等功能,支持添加、删除、编辑操作,并允许用户进行额外的URL扩展。
摘要由CSDN通过智能技术生成

一、相关知识点回顾

1、什么是反射?

可以用字符串的方式去访问对象的属性

2、反射有四种方法?

hasattr(object,name):判断一个对象是不是有name属性或者方法

getattr:获取对象的属性或者方法,  需要注意的是,如果返回的是对象的方法,返回出来的是对象的内存地址, 如果需要运行这个方法,可以在后面添加一对()

setattr:给对象的属性赋值,如果属性不存在,先创建后赋值

delattr:删除该对象指定的一个属性

3、创建ModelForm的两种方式

#方式一定义ModelForm

class TestModelForm(ModelForm):

class Meta:

model = self.model_class

fields = "__all__"

方式二定义

Meta = type("Meta", (object,), {"model": self.model_class, "fields": "__all__"})

TestModelForm= type("TestModelForm", (ModelForm,), {"Meta": Meta})

二、具体流程以及相关知识点

1、路由系统

让url对应视图,这时的视图可以是一个元组,元组的里面放三个参数,第一个是个列表,这两种表示方式都是一样的,用那种都行

eee7d78f24ba9e6522f5de7402609589.png

namespace的用法如下

v =>([],None,None) namespace(是第三个参数),用于区分相同name的url,通过namespace为url添加一个前缀

如图:

namespace

9d59aa4738f99bd524698445993f5757.png

流程:

首先创建三个应用

app01

app02

strak

1、一旦运行的时候都会去执行admin.py ,现在我们让你开始执行stark.py 文件,加上下面的这些(参考的是admin的源码,在每一个admin文件的里面点击进入)

from django.utils.module_loading importautodiscover_modulesclassStarkConfig(AppConfig):

name= 'stark' #应用名称

defready(self):autodiscover_modules('stark') #在应用中创建的py文件和这个名字一样

切记一定要在sessings中配置一下:

'app02.apps.App02Config',

'stark.apps.StarkConfig',

2、然后再每个应用下面也创建一个stark.py的文件

这样就像admin一样了,就开始执行site.redister了

3、这时候还没有site呢,需要自己实例化一个site

在应用下创建一个service的文件夹,再创建一个v1.py文件,在里面写代码

4、在stark里面注册

需要注意的是:

v1.site.register(models.UserInfo)-> 执行 StackConfig的 changelist_view方法/add_view....classUserInfoConfig(v1.StarkConfig):def changelist_view(self,request,*args,**kwargs):return HttpResponse('你猜我是谁?')

v1.site.register(models.UserInfo,UserInfoConfig)---> 优先查看自己config中是否存在方法,不存在则执行基类 StackConfig的 changelist_view方法/add_view....

如图:

85ed443ca4909403db8d16610d40a800.png

5、注册完成之后走urls。仿照admin的urls.。。。v1.site.urls

6、完了在v1.py中写代码

classStarkSite(object):def __init__(self):

self._registry={} #放置处理请求对应关系

'''_registry = {

models.Role: StarkConfig(models.Role,v1.site),

models.UserInfo: StarkConfig(models.UserInfo,v1.site)

models.UserType: StarkConfig(models.UserType,v1.site)

models.Article: StarkConfig(models.Article,v1.site)

}'''

def register(self,model_class,stark_config_class=None):if notstark_config_class:'''stark_config_class是类对象,如果没有这个类就重新赋值,去执行StarkConfig'''stark_config_class=StarkConfig

self._registry[model_class]=stark_config_class(model_class,self)#如果用户自己传进去类了,就用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值