研究Archetype框架

  什么是Archetypes?
Archetypes是Plone内容扩展开发的一个开发框架,只需要用python语言对内容类型提供描述信息,便可自动完成一些逻辑和内容编

辑展现界面。它分离了内容的数据字段(field)、显示器件(widget)、存储(storage)。

Archetypes能做什么?
能自动生成内容的编辑和显示页面,因此你不用写任何的页面模版代码
为每个内容自动维护一个用户不能更改的、内部唯一代号(UID)。这样即便内容被移动了,仍然可以通过UID来找到
支持内容的关联引用。每种内容,可和其他的内容建立多种关系。比如,一个新闻可能附加了几个其他的参考文档的链接
默认就包括一套安全设置,能够满足大多数的应用场合
支持多种存储方式,除了保存在ZODB对象数据库外,还可保存在文件系统,或者关系数据库中
提供大量的显示器件(控件),可构造丰富的界面,如网格表格、富文本输入等
提供了数据格式转换的功能,比如,可以将微软的Word文档转换为html格式,直接在浏览器上显示

在Archetypes中,最重要的就是schema(语义)
一旦内容的底层语义(schema)发生变化,相关的用户界面会随之改变,这正是Archetypes的强大所在
+--------------+
| 语义(Schema) |
+--------------+
      |   +--------------+
      |-->|  字段(Field) |
      |   +--------------+
      |          |          +------------------+
      |          `--------->| 显示器件(Widget) |
      |                     +------------------+
      |   +--------------+
      `-->|  字段(Field) |
          +--------------+
                 |          +------------------+
                 `--------->| 显示器件(Widget) |
                            +------------------+

这就是语义,字段和显示器件的关系

怎么创建语义?
将各个字段(Field)以按照元组(tuple)的方式传入Schema对象,即可创建一个新的语义(schema)。

如ArchExample的Article.py文件中

schema  =  BaseSchema  +   Schema((
    StringField(
' group ' ,
                vocabulary
= ARTICLE_GROUPS,
                widget
= SelectionWidget(),
                ),
    StringField(
' blurb ' ,
                searchable
= 1 ,
                widget
= TextAreaWidget(),
                ),
    TextField(
' body ' ,
              searchable
= 1 ,
              required
= 1 ,
              primary
= 1 ,
              default_output_type
= ' text/html ' ,
              allowable_content_types
= ( ' text/plain ' ,
                                       
' text/structured ' ,
                                       
' text/restructured ' ,
                                       
' text/html ' ,
                                       
' application/msword ' ),
              widget
= RichWidget(label = ' Body ' ),
              ),
    ),
                              marshall
= PrimaryFieldMarshaller(),
                              )

多个语义(Schema)累加,是可以组装为一个新的语义(Schema)的。ArchExample也是这样做的,它累加了一个叫做 BaseSchema 的语义。

注意:在界面上各个输入项显示的次序,和Schema定义中字段(Field)的添加次序是一致的。这意味着,移动Schema中各个字段

(Field)在语义(Schema)中的位置,便可调整这些元素在界面上的显示次序。

什么是字段(Filed)?
字段就如果数据库中定义表结构中的字段一样,它是组成语义的基本单元。每一个字段有一个默认使用的显示器件(Widget),你也可以单独指定。


下面是Archetypes中可用字段的列表

名字类型默认显示器件描述
BooleanField布尔类型ComputedWidget用于存放真/假的简单字段
DateTimeField日期和时间对象CalendarWidget用于存放日期和时间
FileField文件类型FileWidget用于存放大段的数据,比如文本文件,微软的Word文档,等等
FixedPointField定点数值DecimalWidget用于存放定点的数值数据
FloatField浮点数DecimalWidget用于存放浮点数值数据
ImageField图片ImageWidget存放图片,允许动态的调整图片的大小
IntegerField整数StringWidget存放整数数值类型
LinesField列表LinesWidget数据的列表(list),比如关键字
ReferenceField引用ReferenceWidget指向这个对象和其他对象的引用
StringField字符串StringWidget针对存放比较小的字符串优化的字段,比如小于100个字符的字符串
TextField字符串TextWidget针对存放较大的字符串优化的字段,比如大于100个字符. 这个字符串可被转化为多种格式

 

所有的这些字段,可在Archetypes的public模块中导入,比如:

from Products.Archetypes.public import BooleanField
每个字段都有一组可设置的属性,name 属性是字段唯一必需的参数,而且必须唯一,并使用不包含空格和点号的小写英文字母。
所有的其他属性都是可选的。下表描述了其他的所有的属性。

 
 
名字描述可能的值
accessor获取字段值(用于显示的值)的方法名可以指定任何方法名(如specialGetMethod)
default字段默认值为字段设置一个合适的默认值
default_method参数是一个方法名的字符串,调用该方法得到字段默认值,如果不设置则系统将自动生成一个任何一个方法的名称字符串
edit_accessor获取字段原始值(比如rst中的原始代码)的方法名任何方法名(如rawGetMethod)
enforceVocabulary如果被设置则不接受vocabulary之外的任何值True或False
vocabulary字段的可能的值的列表,常用于下拉列表中的可选项字符串列表,如 ['Green', 'Red', 'Blue']
index如果你希望这个字段被用在它自己的索引名中,可以在这里设置一个索引类型字符串。如果再加上:schema后缀,则它还会作为metadata信息被存储任何索引名,如KeywordIndex 或 KeywordIndex:schema.
name字段的唯一命名(必须的属性)任何小写的字符串并遵守Python变量命名规则,(如 description, user_name, 或 coffee_bag_6).
mode字段的读写模式,使用一个字符串形式表示,默认值是读写模式只读模式是 'r', 只写模式是 'w', 读写模式是 'rw'
multiValued表示字段是否可以有多个值,这对于下拉列表形式的多选项很有用True 或 False.
mutator改变字段值的方法名,由此可以改变这个字段怎样被设置任何方法名(如 specialSetMethod)
primary如果设置为真,则这个字段将被作为FTP和WebDAV协议的响应。只能有一个字段设置这个值,如果有多个字段设置了primary则只有第一个被使用。通常只为主body属性设置这个字段True 或 False.
required指定这个字段是否必需True 或 False.
schemata相当于分组分类的字符串
metadata指示这个值是否会被放入到metadata信息中默认值是False
searchable指定该字段是否加入到可搜索文本中以被搜索到True 或 False.
validators为字段设置校验,可以在这里设置校验方法的字符串的元组,它会顺序执行这个校验方法任何校验器
storage在哪里存放数据;默认是 AttributeStorage ,将数据存放为对象的一个属性任何一个有效的storage对象,比如 AttributeStorage 或者 SQLStorage
widget用于显示字段的器件名称任何器件对象
read_permission用于读取时的权限设置如CMFCore的permissions中定义的View权限
write_permission修改这个字段所需要的权限如CMFCorer的permissions中定义的ModifyPortalContent权限

 

 什么是显示器件(Widget)?

显示器件(Widget)包含了如何显示对象的一些信息。可从Archetypes的 public 模块中导入显示器件,如:

from Products.Archetypes.public import BooleanWidget
可以为Widget的构造函数中的每个参数添加以"_msgid"为后缀的关键字式参数,为它提供一个msgid,并且使用i18n_domain参数指定翻译域,如:
 
 
StringField( " blurb " ,
             required 
=   1 ,
             searchable 
=   1 ,
             widget 
=  TextAreaWidget(label = " Article Blurb " ,
                                     label_msgid
= " label_blurb " ,
                                     description
= " Please input a short blurb for this article. " ,
                                     description_msgid
= " help_blurb " ,
                                     i18n_domain
= " archexample " ),
             )

Plone中的内容,每个内容都包括很多属性。但是FTP或者WebDAV只能传递单个的文件。这样,通过FTP/WebDAV下载内容的时候,需要将内容转换单个的文件。上面的例子中, body字段被设置为内容的主字段(primary),在FTP/WebDAV下载的时候,会直接传递这个字段的内容,而不是整个内容。

Archetypes将这种内容到单个文件的转换,叫做Marshall。相应的,从文件转换到内容的过程,则叫做DeMarshall。Archetypes内容的Schema定义中,可指定一个Marshaller,来负责Marshall和DeMarshall的过程: marshall=some_marshaller() 。Archetypes默认包括2种Marshaller:

  • PrimaryFieldMarshaller: 仅仅将主字段转换为文件,Plone的文件和页面,均采用这个Marshaller。
  • RFC822Marshaller: 将内容采用RFC822的标准格式存储,也就是邮件的存储格式。这个格式采用 "关键字: 值" 的方式,能够传递内容的各种属性。

Validator校验器:

要实现这个功能,可在字段(Field)定义中增加一个检验参数。比如,为了测试你的 IntegerField 是否真的是一个整数,你可这样完成:

 

from  Products.Archetypes.public  import  IntegerField
from  Products.Archetypes.public  import  IntegerWidget
#  一个简单的年龄字段
age  =  IntegerField( ' age ' ,
      validators
= ( " isInt " ),
      widget
= IntegerWidget(label = " 你的年龄 " )
      )

而像isInt这样的validators是事先plone定义好的。常用的validators有如下:

名字说明
isDecimal是10进制数,包括正负号、指数等
isInt是整数
isPrintable是否可打印,只能是字母和数字
isSSN是9个数字(也就是美国的社会安全号)
isUSPhoneNumber长度为10个数字
inNumericRange位于某个范围的数值
isURL是URL,起始为http://,ftp://,或者https://
isEmail是邮件地址格式
isEmpty为空
isValidDate是有效的日期
isMaxSize上传文件的大小限制

自己也可以注册自己写的校验器,前提是自己写的Python类实现了IValidator接口。像这样:

from  validation.validators  import  RangeValidator
from  validation  import  validation

#  RangeValidator 需要传入校验器的名字、起始和结束值
validAge  =  RangeValidator( " validAge " , 0,  150 )
validation.register(validAge)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园建设方案旨在通过融合先进技术,如物联网、大数据、人工智能等,实现校园的智能化管理与服务。政策的推动和技术的成熟为智慧校园的发展提供了基础。该方案强调了数据的重要性,提出通过数据的整合、开放和共享,构建产学研资用联动的服务体系,以促进校园的精细化治理。 智慧校园的核心建设任务包括数据标准体系和应用标准体系的建设,以及信息化安全与等级保护的实施。方案提出了一站式服务大厅和移动校园的概念,通过整合校内外资源,实现资源共享平台和产教融合就业平台的建设。此外,校园大脑的构建是实现智慧校园的关键,它涉及到数据中心化、数据资产化和数据业务化,以数据驱动业务自动化和智能化。 技术应用方面,方案提出了物联网平台、5G网络、人工智能平台等新技术的融合应用,以打造多场景融合的智慧校园大脑。这包括智慧教室、智慧实验室、智慧图书馆、智慧党建等多领域的智能化应用,旨在提升教学、科研、管理和服务的效率和质量。 在实施层面,智慧校园建设需要统筹规划和分步实施,确保项目的可行性和有效性。方案提出了主题梳理、场景梳理和数据梳理的方法,以及现有技术支持和项目分级的考虑,以指导智慧校园的建设。 最后,智慧校园建设的成功依赖于开放、协同和融合的组织建设。通过战略咨询、分步实施、生态建设和短板补充,可以构建符合学校特色的生态链,实现智慧校园的长远发展。
若依(Ruoyi)是一个基于Spring Boot和MyBatis的快速开发框架,它提供了一套代码生成工具,可以帮助开发者快速构建企业级Java应用程序。若依框架archetype是一种项目模板,可以作为项目的起始点,提供了一套标准的项目结构和配置,方便开发者快速搭建项目。 若依框架archetype包含了一些常用的功能模块,例如用户管理、角色管理、菜单管理、部门管理等,这些模块已经实现了基本的增删改查功能,开发者可以在此基础上进行二次开发,快速构建自己的业务功能。 使用若依框架archetype可以带来以下好处: 1. 快速启动项目:通过使用archetype,可以快速创建一个基于若依框架的项目,省去了手动配置的繁琐过程。 2. 标准化项目结构:archetype提供了一套标准的项目结构,使得项目的组织和管理更加规范化。 3. 提高开发效率:archetype已经实现了一些常用的功能模块,开发者可以直接在此基础上进行开发,减少了重复劳动。 如果你想使用若依框架archetype来创建项目,可以按照以下步骤进行操作: 1. 在Maven的settings.xml文件中配置若依的仓库地址。 2. 执行以下命令创建项目: ``` mvn archetype:generate -DarchetypeGroupId=org.ruoyi -DarchetypeArtifactId=ruoyi-archetype -DarchetypeVersion=最新版本号 ``` 其中,最新版本号可以在若依框架的官方网站或者GitHub仓库中找到。 3. 根据提示输入项目的基本信息,例如项目的groupId、artifactId等。 4. 等待项目创建完成后,就可以在指定的目录下找到生成的项目代码。 希望以上信息对你有帮助。如果你还有其他问题,请继续提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值