web2py数据结构中如何设置IS_NOT_EMPTY和字符串(不包括0-9)

How to set IS_NOT_EMPTY and string (not included 0-9) in web2py data structure

我正在开发 web2py - 模型 - db_testing.py pythonanywhere.com

下面的代码 运行 成功:

# -*- coding: utf-8 -*-
db = DAL('sqlite://storage.sqlite')
db.define_table('registration',
    Field('firstname', requires=IS_NOT_EMPTY(error_message='Should not left blank')),
    Field('lastname', requires=IS_NOT_EMPTY()),
    Field('gender', requires=IS_IN_SET(['Male', 'Female'])),
    Field('birthday', 'date'),
    Field('email', requires = IS_EMAIL(error_message='invalid email!')),
    Field('salary', 'integer'),
    Field('seniority', 'integer')
    )

但是第一个字段'firstname'只能防止填表不能留空。它无法验证输入是 a-z 还是 A-Z。

最后一个字段'seniority'可以保证填表必须是0-9,但不能阻止填表不留空

如何设置这两个要求(IS_NOT_EMPTY 和 error_message 并确保输入是字符串/整数)?

有什么想法吗?

判断是否为字符串:if isinstance(firstname, str)

判断是否为空:可以if firstname != ''if firstname;在 Python 中,空对象在用作布尔值时被视为“False”。要检查它是否是字母字符,你可以这样做 if firstname.isalpha().

documentation 中所述,Fieldrequires 属性可以是验证器列表。所以,你可以这样做:

Field('firstname', requires=[IS_NOT_EMPTY(), IS_ALPHANUMERIC()])

要限制为仅包含字母,请将 IS_MATCH 与正则表达式一起使用:

Field('firstname', requires=[IS_NOT_EMPTY(), IS_MATCH('^[a-zA-Z]+$')])

上面,你不一定需要IS_NOT_EMPTY验证器,因为IS_MATCH中的正则表达式至少需要一个字母,但你可能想保留IS_NOT_EMPTY以便专门针对空响应显示不同的错误消息。