maximkv25
@maximkv25
web-developer

Запрос в form-data через postman в DRF валится?

Тестирую API с помощью Postman, все запросы сервер принимает нормально, кроме form-data.
# coding: utf8
import logging
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, parser_classes
from rest_framework.parsers import JSONParser, FormParser, MultiPartParser
from rest_framework.response import Response
from api.models import UserProfile
from api.utils.query_obj import QuerySetObj
from api.controllers.telegram import TelegramInternal

logger = logging.getLogger(__name__)


@api_view(['POST'])
@parser_classes((JSONParser, FormParser, MultiPartParser))
@csrf_exempt
def telegram_community_add(request):
    '''
    content-type: form-data
    '''

    if request.method != 'POST':
        return Response(dict(error=dict(code=1, description='Incorrect request format')))
    else:
        data = request.data
        token = data.get('token')
        user_obj = QuerySetObj('UserProfile', token).get()
        if user_obj is False:
            return Response(dict(error=dict(code=3, description='Invalid user token')))
        else:
            # import pdb; pdb.set_trace()
            if 'community_id' and 'bot_token' in data:
                community_id = data.get('community_id')
                bot_token = data.get('bot_token')
                community_id_created = TelegramInternal().community_save(community_id, bot_token, user_obj)
                return Response(dict(response=dict(community_id=community_id_created)))
            else:
                return Response(dict(error=dict(code=2, description='Required parameter missed')))


логи...
web_1        | Internal Server Error: /api/v1/communities/tl/add
web_1        | Traceback (most recent call last):
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/core/handlers/exception.py", line 42, in inner
web_1        |     response = get_response(request)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 249, in _legacy_get_response
web_1        |     response = self._get_response(request)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 187, in _get_response
web_1        |     response = self.process_exception_by_middleware(e, request)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/core/handlers/base.py", line 185, in _get_response
web_1        |     response = wrapped_callback(request, *callback_args, **callback_kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
web_1        |     return view_func(*args, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/views/generic/base.py", line 68, in view
web_1        |     return self.dispatch(request, *args, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 483, in dispatch
web_1        |     response = self.handle_exception(exc)
web_1        |   File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 443, in handle_exception
web_1        |     self.raise_uncaught_exception(exc)
web_1        |   File "/usr/local/lib/python3.4/site-packages/rest_framework/views.py", line 480, in dispatch
web_1        |     response = handler(request, *args, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/rest_framework/decorators.py", line 53, in handler
web_1        |     return func(*args, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
web_1        |     return view_func(*args, **kwargs)
web_1        |   File "./api/versioned/v1/community/views.py", line 35, in telegram_community_add
web_1        |     community_id_created = TelegramInternal().community_save(community_id, bot_token, user_obj)
web_1        |   File "./api/controllers/telegram.py", line 136, in community_save
web_1        |     community_info = TelegramBotApi(bot_token).get_chat(channel_link)
web_1        |   File "./api/controllers/telegram.py", line 44, in get_chat
web_1        |     req = requests.post(url, data=data)
web_1        |   File "/usr/local/lib/python3.4/site-packages/requests/api.py", line 111, in post
web_1        |     return request('post', url, data=data, json=json, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/requests/api.py", line 57, in request
web_1        |     return session.request(method=method, url=url, **kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/requests/sessions.py", line 475, in request
web_1        |     resp = self.send(prep, **send_kwargs)
web_1        |   File "/usr/local/lib/python3.4/site-packages/requests/sessions.py", line 579, in send
web_1        |     adapter = self.get_adapter(url=request.url)
web_1        |   File "/usr/local/lib/python3.4/site-packages/requests/sessions.py", line 653, in get_adapter
web_1        |     raise InvalidSchema("No connection adapters were found for '%s'" % url)
web_1        | requests.exceptions.InvalidSchema: No connection adapters were found for '605534238:AAEcdbnXqNt3t9npDi5Lg9mQQYPSW5CYqG0/getChat'
web_1        | [pid: 13|app: 0|req: 2/10] 172.18.0.1 () {36 vars in 586 bytes} [Mon Jul 23 11:28:30 2018] POST /api/v1/communities/tl/add => generated 15568 bytes in 229 msecs (HTTP/1.1 500) 3 headers in 107 bytes (3 switches on core 0)


Разве под form-data нужно писать кастомный парсер и из коробки не поставляется? Или проблема совсем в другом?
  • Вопрос задан
  • 407 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы