Разбор списка целых чисел в флеш-отдыхе
Я использую колбу-успокоительный, и у меня возникают проблемы при создании RequestParser
это подтвердит список только целых чисел. Предполагая ожидаемый формат ресурса JSON формы:
{
'integer_list': [1,3,12,5,22,11, ...] # with a dynamic length
}
... а затем можно создать RequestParser, используя форму что-то вроде:
from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=list, location='json')
... но как я могу проверить это целочисленный список?
4 ответа
Вы можете проверять типы с помощью isinstance, здесь вы устанавливаете тип int (целое число).
Это будет работать так:
a=1
isinstance(a,int)
оценивается как ИСТИНА
Чтобы проверить это для всего списка, используйте all(). и переберите список с помощью цикла for, чтобы каждый элемент списка проверялся.
if all(isinstance(x,int) for x in integer_list):
parser.add_argument('integer_list', type=list, location='json')
В вашем случае это должно иметь значение TRUE, если все элементы являются целыми числами, и выполняет код в цикле for.
Вы можете использовать action = 'append'. Например:
parser.add_argument('integer_list', type=int, action='append')
Передайте несколько целочисленных параметров:
curl http://api.example.com -d "integer_list=1" -d "integer_list=2" -d "integer_list=3"
И вы получите список целых чисел:
args = parser.parse_args()
args['integer_list'] # [1, 2, 3]
Недействительный запрос автоматически получит ответ 400 Bad Request.
Вы не можете на самом деле. Поскольку вы можете передать список с несколькими видами типов, например, [1, 2, 'a', 'b']
, с reqparser, вы можете только разобрать с type=list
, Вы должны проверить элементы списка один за другим самостоятельно. Код выглядит следующим образом:
parse_result = parser.add_argument('integer_list', type=list, location='json')
your_list = parse_result.get('integer_list', [])
for element in your_list:
if isinstance(element, int):
# do something
print "element is int"
else:
# do something else
print "element is not int"
Вам нужно использовать действие "добавить".
from flask.ext.restful import reqparse
parser = reqparse.RequestParser()
parser.add_argument('integer_list', type=int, action="append", location='json')
args = parser.parse_args()
list_of_int = args['integer_list']
Та же проблема произошла. Я посмотрел в исходный код, и нашел Argument.type
в основном используется в ситуации self.type(value)
, Таким образом, вы можете взломать это как я:
parser.add_argument('integer_list', type=json.loads, location='json')
Это не то, что он должен делать, но работает.