Я пишу приложение 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 и могут быть пустыми или иметь целое число в качестве значения. Если пользователь помещает число с плавающей точкой или строку, на экране должно появиться сообщение о том, что введенные данные недействительны и почтовый запрос не должен выполняться после нажатия кнопки «Отправить».
Вы используете exit(), но я думаю, вы хотите просто return
@prashantrana Я добавил [EDIT] в конце с дополнительными пояснениями.
@Eqomatic, но как сделать, только если Validation.check() действителен для возврата render_template






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
@ GeorgеStoyanov, пожалуйста, обновите мое решение до вашего рабочего решения
можешь подробнее рассказать, что такое test1, test2?