Проверка атрибута
Как для view-функции gen_password добавить проверку что length числовой параметр, неотрицательный, входит в диапазон от 8 до 24.
@app.route('/gen-password')
def gen_password():
def_length = 10
length = int(request.args.get('length', def_length))
return ''.join([random.choice(string.ascii_lowercase) for _ in range(length)])
Ответы (4 шт):
Вы можете воспользоваться встроенной функцией type:
type(length) == int and 8 <= length and length <= 24
if type(length) == int and 8 <= length <= 24
Исправление:
try:
length = int(request.args.get('length', def_length))
except ValueError:
return 'Не число'
else:
if 8 <= length <= 24 :
return ''.join([random.choice(string.ascii_lowercase) for _ in range(length)])
Можно в request.args.get передать требуемый тип значения (в данном случае int):
length = request.args.get('length', def_length, int)
Тогда при получении неправильного типа значения (например, строки вместо числа) будет браться значение по-умолчанию из второго параметра. Приведение результата к целому числу в этом случае не нужно.
После этого уже можно просто проверить значение на попадание в нужный диапазон:
@app.route('/gen-password')
def gen_password():
def_length = 10
length = request.args.get('length', def_length, int)
if not (8 <= length <= 24):
# Если не попадает в нужный диапазон, установить значение по-умолчанию
length = def_length
return ''.join([random.choice(string.ascii_lowercase) for _ in range(length)])
Если нужно выводить ошибку, если значение неправильного типа, то нужно попытку приведения к int обернуть в блок try-except и отлавливать исключение ValueError:
@app.route('/gen-password')
def gen_password():
def_length = 10
length = request.args.get('length', def_length)
try:
length = int(length)
except ValueError:
abort(400, f"Неправильное значение параметра length: {length}")
if not (8 <= length <= 24):
abort(400, f"Неправильное значение параметра length: {length}")
return ''.join([random.choice(string.ascii_lowercase) for _ in range(length)])
В данном случае при неправильном значении будет открываться страница "400 Bad Request" с текстом ошибки.
Спасибо, сделал немного по ругому
@app.route('/gen-password')
def gen_password():
def_length = 10
if 'length' not in request.args:
return make_response(("length", 400))
length = int(request.arg.get['length'])
digits = int(request.arg.get('digits', 0))
specials = int(request.arg.get('special', 0))
generation_symbols = string.ascii_lowercase
if digits == 1:
generation_symbols += string.digits
if specials == 1:
generation_symbols += '!@#$!%^&*()'
""" /gen-password?length=5 Передаем значение от клиента """
# length = int(request.args.get('length', def_length)
""" Возвращаем строку как результат генерации списка """
return ''.join([random.choice(generation_symbols) for _ in range(length)])