首页 > 解决方案 > 烧瓶中的Python参数验证类

问题描述

我正在编写一个 Flask 应用程序,并且我想对某些字段运行验证检查,并且仅当字段中插入的值是整数或 None 时才能继续执行 POST 请求。

该字段只能包含整数,或者None如果该字段是None,则应将其替换为 0。

这是我的代码:

class Validation():
    def __init__(self, param, param_name):
        self.param = param
        self.param_name = param_name
    def check_int(param):
        try:
            int(param)
            return True
        except ValueError:
            return False

    def check(param, param_name):
        param = param.strip()
        if param == "":
            return 0
        elif Validation.check_int(param):
            return param
        else:
            flash(f"The {param_name} must be an integer!")
            exit()

问题是如果该字段包含一些字符串,这将触发该exit()函数并且我的程序将停止。我只想在屏幕上显示该字段必须是整数的消息,而不在我的views.py文件中执行 POST 请求:

if request.method == "POST":
    Validation.check(test1, "Test 1 Parameter")
    Validation.check(test2, "Test 2 Parameter")
    Validation.check(test3, "Test 3 Parameter")
    return render_template('test.html', form = form)

[编辑]:在网页上,我有:test1test2字段test3,还有一个提交按钮。测试字段在 forms.py 文件中定义为TextField,可以为空或具有整数作为值。如果用户输入浮点数或字符串,则屏幕上应闪烁一条消息,指出输入无效,并且在按下提交按钮时不应执行发布请求。

标签: pythonvalidationflask

解决方案


class Validation():

    def check_int(self,param):
        return param.isdigit()

    def check(self, param, param_name):
        param = param.strip()
        if param == "":
            return 0
        elif Validation.check_int(param):
            return param
        else:
            flash(f"The {param_name} must be an integer!")
            return False

视图.py:

if request.method == "POST":
    test1 = Validation.check(test1, "Test 1 Parameter")
    test2 = Validation.check(test2, "Test 2 Parameter")
    test3 = Validation.check(test3, "Test 3 Parameter")
    if test1 is not False and test2 is not False and test3 is not False:
        return render_template('test.html', form = form)

推荐阅读