0

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

下面的代码运行成功:

# -*- 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' 只能防止表单填写不留空。它无法验证输入是在 az 还是 AZ。

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

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

有什么想法吗?

4

2 回答 2

1

文档中所述, a 的requires属性Field可以是验证器列表。因此,您可以执行以下操作:

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以便专门针对空响应显示不同的错误消息。

于 2021-04-03T04:08:10.697 回答
0

要检查它是否是一个字符串:if isinstance(firstname, str)

检查是否非空:你可以做if firstname != ''if firstname; 在 Python 中,当用作布尔值时,空对象被视为“假”。要检查它是否是字母字符,您可以执行if firstname.isalpha().

于 2021-04-03T02:27:58.353 回答