2016-08-26 3 views
0

Я использую питон-Еву, чтобы построить свой RESTful API, я поставил «риски» конечные точки в settings.py, например, так:Python накануне - опубликовать список медиа-файлы с завитком команды не удались с 422 ошибкой

risks = { 
    'schema': { 
     'description': { 
      'type': 'string', 
      'required': True, 
     }, 
     'pic': { 
      'type': 'list', 
      'schema': { 
       'type': 'media', 
      } 
     }, 
    } 
} 

стараюсь завиток команду POST два JPG файлы «ПИК» поле следующим образом:

curl -F "description=something" -F "[email protected],test2.jpg" http://127.0.0.1:8080/risks 

но получить 422 ошибки, как это:

{"_status": "ERR", "_issues": {"pic": "must be of list type"}, "_error": {"message": "Insertion failure: 1 document(s) contain(s) error(s)", "code": 422}}% 

что я могу сделать , Я попробовал только один носитель (не тип списка), это не проблема, почему? Может кто-нибудь мне помочь?

+0

Может быть, давайте видеть [mcve]? – boardrider

ответ

1

Когда вы получаете доступ к конечной точке risks, вам необходимо указать правильные типы данных, чтобы конечная точка ресурса работала. Он жалуется на отправку pic, потому что это все еще строка, а не список.

Вы можете сделать вашу жизнь немного легче с помощью requests

import requests 

url = 'http://127.0.0.1:8080/risks' 
data = {description : 'something', 'pic' : ['a','b','c','d']} 
r = requests.post(url, json=data) 
+0

Это помогает мне, потому что я использовал параметр 'data' для' запросов', и это не удалось с моим словарем. Замена 'data' на' json' исправила мою ошибку 422 – smart

0

Tung @ Mike

...

Вы можете сделать свою жизнь немного проще с помощью запросов

...

Как вы передаете файлы на запросы json kwarg? Как обрабатываются файлы? Или строки?

Когда я пытаюсь это,

import requests 
url = 'http://localhost:5000/tests' 
data = { 
    'icons': [ 
     open('/home/test/git-projects/test.com/backend/fixtures/media/test1.jpg').read(), # If I pass the handle, it fails as well. 
     open('/home/test/git-projects/test.com/backend/fixtures/media/test2.jpg').read() 
    ] 
} 
r = requests.post(url, json=data) 

/home/test/venvs/test/bin/python2.7 /home/test/git-projects/test.com/backend/__main__.py 
    /home/test/venvs/test/local/lib/python2.7/site-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.pymongo is deprecated, use flask_pymongo instead. 
     .format(x=modname), ExtDeprecationWarning 
    /home/test/venvs/test/local/lib/python2.7/site-packages/flask/exthook.py:71: ExtDeprecationWarning: Importing flask.ext.sentinel is deprecated, use flask_sentinel instead. 
     .format(x=modname), ExtDeprecationWarning 
    Traceback (most recent call last): 
     File "/home/test/git-projects/test.com/backend/__main__.py", line 43, in <module> 
     r = requests.post(url, json=data) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/api.py", line 109, in post 
     return request('post', url, data=data, json=json, **kwargs) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/api.py", line 50, in request 
     response = session.request(method=method, url=url, **kwargs) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/sessions.py", line 451, in request 
     prep = self.prepare_request(req) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/sessions.py", line 382, in prepare_request 
     hooks=merge_hooks(request.hooks, self.hooks), 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/models.py", line 307, in prepare 
     self.prepare_body(data, files, json) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/requests/models.py", line 428, in prepare_body 
     body = json_dumps(json) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/simplejson/__init__.py", line 380, in dumps 
     return _default_encoder.encode(obj) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/simplejson/encoder.py", line 275, in encode 
     chunks = self.iterencode(o, _one_shot=True) 
     File "/home/test/venvs/test/local/lib/python2.7/site-packages/simplejson/encoder.py", line 357, in iterencode 
     return _iterencode(o, 0) 
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xff in position 0: invalid start byte 

    Process finished with exit code 1