Как проверить тело запроса - это действительное JSON поступающее в приложение python flask - PullRequest
0 голосов
/ 11 марта 2020

У меня есть простое python flask приложение

1 @app.route("/endpoint/", methods=['POST'])
2 def mypostmethod():
3
4    if 'Content-Type' in request.headers and request.headers['Content-Type'] == 'application/json':
5        if request.is_json:
6            req_data = request.get_json()
7            try:
8                test_json = json.loads(req_data)
9                return req_data
10           except ValueError as e:
11               return Response('invalid json', status='400')
12        else:
13            return Response('response is not json', status='400')
14
15
16       if 'content' not in req_data:
17           return Response("No content received in request", status='400')
18
19       content = req_data['content']
20       return content

, и я скручиваюсь следующим образом:

Мне было интересно, как добавить код, чтобы убедиться, что мы проверяем строка 6 , так что это допустимое значение json?

Если, например, было передано, например, следующее, то все должно быть в порядке

'{"content" : "Blah"} '

Но если следующее было, тогда он должен вернуть 400 ERROR с пользовательским ответом msg

' {'content': 'Blah' } '

Я пробовал несколько прошлых / старых сообщений, но не могу заставить это работать? Любые идеи:)

1 Ответ

1 голос
/ 11 марта 2020

Простой способ проверить это ниже, или вы можете проверить flask -validate- json, но похоже, что вы можете решить эту проблему с помощью методов объекта запроса . Кроме того, ответ 401 означает несанкционированный, кажется, ответ 400 более уместен? Ответы HTTP-статуса

Когда вы загружаете json в модуль json, он проверит, является ли он действительным, и вызовет ValueError, если это не так.

You можно использовать fla sh, чтобы предоставить обратную связь с пользователем, и она будет доступна в вашем шаблоне ошибки. Возможно, вы захотите взглянуть на пользовательскую обработку ошибок .

# Standard library implementation

# See if request is in fact json
if request.is_json:
    data = request.get_json()
    try:
        # Check if it is valid by loading it into json module
        test_json = json.loads(data)
        return data
    except ValueError as e:
        # Return invalid json
        flash('invalid json')
        return render_template('error.html'), 400
else:
    # only accepts json data
    flash('data is not json')
    return render_template('error.html'), 400


# error.html
{% with messages = get_flashed_messages() %}
   {% if messages %}
      {% for message in messages %}
         {{ message }}
      {% endfor %}
   {% endif %}
{% endwith %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...