Класс проверки параметров 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(), и моя программа просто остановится. Я хочу просто высветить сообщение о том, что это поле должно быть целым числом на экране, без выполнения запроса POST в моем файле views.py:

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)

[РЕДАКТИРОВАТЬ]: На веб-странице у меня есть поля test1, test2 и test3, а также кнопка отправки. Поля теста определены в файле forms.py как TextField и могут быть пустыми или иметь целое число в качестве значения. Если пользователь помещает число с плавающей точкой или строку, на экране должно появиться сообщение о том, что введенные данные недействительны и почтовый запрос не должен выполняться после нажатия кнопки «Отправить».

можешь подробнее рассказать, что такое test1, test2?

sahasrara62 17.12.2018 15:32

Вы используете exit(), но я думаю, вы хотите просто return

pythomatic 17.12.2018 15:34

@prashantrana Я добавил [EDIT] в конце с дополнительными пояснениями.

Georgi Stoyanov 17.12.2018 15:38

@Eqomatic, но как сделать, только если Validation.check() действителен для возврата render_template

Georgi Stoyanov 17.12.2018 15:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
4
419
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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

views.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)

на самом деле это не решает мою проблему, но затем я добавил в оператор elsereturn False и в свой views.py перед возвратом я выполняю проверку, если test1, test2 и test3 is not False

Georgi Stoyanov 17.12.2018 15:59

@ GeorgеStoyanov, пожалуйста, обновите мое решение до вашего рабочего решения

sahasrara62 17.12.2018 16:22

Другие вопросы по теме