#flask #routes
#flask #маршруты
Вопрос:
Я пытаюсь вызвать следующий маршрут:
@bp.route("/notify/<user_id>/<title>/<message>",
methods=["POST"])
def trigger_notification(user_id, title, message):
data = request.get_json() or {}
# do_somthing_by_data
Я вызвал маршрут с помощью httpie:
http POST http://127.0.0.1:5000/api/notify/b2bbbf67956c3db9/title/message_txt
Но я получил следующие ошибки:
TypeError: notify() missing 3 required positional arguments: 'user_id', 'title', and 'message'
Комментарии:
1. Имя функции для вашего маршрута —
trigger_notification
but, вы получаете ошибку для функции с именемnotify
. Где вы определяетеnotify
и где вы его вызываете?2. Не могли бы вы дать немного больше контекста для примера кода, пожалуйста? Я предполагаю, что что-то в другом месте вызывает эту ошибку
3. Спасибо @MattKeane amp; @tsamaya, ваши комментарии действительно помогают. Ошибка была в
data
переменной, которая была пустой dict в моем вызове. правильный вызовhttp POST url user_id=user_id title=title message=my_message
. или рефакторинг функции маршрута.
Ответ №1:
Следующий пример отлично работает на моей стороне:
Использование Flask v1.1.2.
app.py
from flask import Flask
from flask import request
app = Flask(__name__)
@app.route("/notify/<user_id>/<title>/<message>", methods=["POST"])
def trigger_notification(user_id, title, message):
print ("{} {} {}".format(user_id, title, message))
data = request.get_json() or {}
return data
Проверено с
curl -X POST http://localhost:5000/notify/user/title/message
-d '{"body":"some data"}'
-H 'Content-Type: application/json'
Он выводит
(65050335) ➜ 65050335 flask run
* Serving Flask app "app.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL C to quit)
user title message
127.0.0.1 - - [28/Nov/2020 14:11:30] "POST /notify/user/title/message HTTP/1.1" 200 -
и он возвращает
{"body":"some data"}