#python #reactjs #flask #post #http-status-code-405
Вопрос:
Я создаю веб-приложение с помощью React и Flask, и у меня проблема с запросом POST.
Это мое app.py
досье:
import sys
import os
from flask import Flask, jsonify, request, render_template
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS, cross_origin
from flask_mail import Mail, Message
from models import User, Project, Image, db
from api import blueprints
from tools import format_email
app = Flask(__name__,
static_folder='../build/static',
template_folder="../build"
)
app.config.from_object(os.environ['APP_SETTINGS'])
db.init_app(app)
cors = CORS(app)
mail = Mail(app)
# Register the blueprints
for b in blueprints:
app.register_blueprint(b)
@cross_origin
@app.route('/', defaults={'u_path': ''})
@app.route('/<path:u_path>')
def index(u_path=None):
return render_template("index.html")
@app.route('/api/process_email', methods=['POST'])
def process_email():
print('plop')
data = request.get_json()
formated_email = format_email(
data['firstname'],
data['lastname'],
data['email'],
data['message']
)
msg = Message(formated_email['title'], sender='plop@gmail.com', recipients=['plop@gmail.com'])
msg.body = formated_email['textbody']
msg.html = formated_email['htmlbody']
mail.send(msg)
return 'done'
if __name__ == "__main__":
app.run()
В config.py
том, что у меня есть этот набор CORS_HEADERS = 'Content-Type'
Когда я проверяю это с почтальоном, моя электронная почта отправляется без каких-либо проблем. Но из приложения я получаю 405 METHOD NOT ALLOWED
ответ.
Вот как я отправляю запрос:
axios.post(API_URL 'process_email/', {
"firstname": values.firstname,
"lastname": values.lastname,
"email": values.email,
"message": values.message
}, {
headers: {
'Content-Type': 'text/plain;charset=utf-8',
},
withCredentials: 'same-origin'
})
.then(({ data }) => {
console.log(data)
}, (error) => {
toast.error("gneuuuu");
})
.catch(() => {toast.error("Oups! Something went wrong!")});
Это то, что у меня есть:
С тех пор как я установил прокси-сервер, я больше не вижу предварительного запроса. Я попытался использовать простой fetch
или superagent
простой, но проблема все еще здесь, и я явно не понимаю, как работает CORS. Любая помощь будет признательна. Спасибо!
Ответ №1:
Если кому-то нужен ответ: проблема заключалась в том, как я отправлял запрос с axios. Вместо:
axios.post(API_URL 'process_email/', {...
Я должен удалить трейлинг / ! Это прекрасно работает:
axios.post(API_URL 'process_email', {...