Ввод байтов НЕПРАВИЛЬНЫЙ (не может преобразовать в JSON) в Python - PullRequest
0 голосов
/ 21 октября 2019

По сути, у меня есть конечная точка API, которая будет вызываться, если вы сделаете к ней запрос POST. По какой-то причине проблема заключается в том, что я не могу преобразовать байты в JSON, чтобы получить доступ к данным.

Мой код:

@api_view(['POST'])
def create_user(request):
    """ POST = Create user. """
    # Check that a username with this email doesn't already exist
    try:
        data = {}
        print("IS IT WORKING...?")
        print(type(request.body))
        print(request.body)
        # Use double quotes to make it valid JSON
        my_json = request.body.decode('utf8').replace("'", '"')
        print("MY_JSON:")
        print(my_json)
        data = json.loads(my_json)
        print("DATA:")
        print(data)
        s = json.dumps(data, indent=4, sort_keys=True)
        print("s:")
        print(s)
    except User.DoesNotExist:
        print("PLS WORK ON CONSOLE")
    return Response(status=status.HTTP_409_CONFLICT)

Я пытаюсь сделать запрос POST к своемупуть users/create/ с использованием Postman, но когда я печатаю request.body, чтобы увидеть содержимое моего запроса POST, он неправильно отформатирован с большим количеством случайных чисел и тире. Это мешает мне конвертировать его в JSON. Это простой запрос POST с полями email и password.

Вот как выглядит странное форматирование: https://gyazo.com/fa1cc2f04637c02f79fe59790153ae40

Так выглядит «json» после того, как я его расшифровал и преобразовал в двойные кавычки (обратите внимание на странные тире и числа): https://gyazo.com/3ca41106117a4e9acdd96929469313a1

После этого происходит ОШИБКА из-за data = json.loads(my_json) из-за неправильного форматирования ввода.

Сообщение об ошибке:

Internal Server Error: /users/create/
Traceback (most recent call last):
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/django/views/decorators/csrf.py", line 54, in wrapped_view
    return view_func(*args, **kwargs)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/rest_framework/views.py", line 505, in dispatch
    response = self.handle_exception(exc)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/rest_framework/views.py", line 465, in handle_exception
    self.raise_uncaught_exception(exc)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/rest_framework/views.py", line 476, in raise_uncaught_exception
    raise exc
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/rest_framework/views.py", line 502, in dispatch
    response = handler(request, *args, **kwargs)
  File "/Users/mightu/Desktop/jason_app/env/lib/python3.7/site-packages/rest_framework/decorators.py", line 50, in handler
    return func(*args, **kwargs)
  File "/Users/mightu/Desktop/jason_app/users/views.py", line 38, in create_user
    data = json.loads(my_json)
  File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

У меня естьиспользовал эти SO сообщения ( 1 , 2 ), чтобы добраться до того места, где я сейчас нахожусь (понимая, что мой ввод неверен!).

1 Ответ

0 голосов
/ 21 октября 2019

РЕДАКТИРОВАТЬ: ОК, так что я нашел решение. В Почтальоне вы можете отправлять данные как form-data, а также как raw. Я использовал form-data, и я думаю, что это просто разрушило все и создало все странные ----- и целые числа. Я переключился на raw и непосредственно набрал форматирование JSON, и мой код СЕЙЧАС РАБОТАЕТ! Все это! Но я совершенно не понимаю почему. У меня просто было предчувствие, что метод, которым я отправлял данные, был просто неверным. Может кто-нибудь объяснить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...