我想在一个烧瓶应用程序中发送一个本地REST请求,如下所示:
from flask import Flask, url_for, request
import requests
app = Flask(__name__)
@app.route("/<name>/hi", methods=["POST"])
def hi_person(name):
form = {"name": name}
return requests.post(url_for("hi", _external=True), data=form)
@app.route("/hi", methods=["POST"])
def hi():
return 'Hi, %s!' % request.form["name"]
Run Code Online (Sandbox Code Playgroud)
发送curl -X POST http://localhost:5000/john/hi导致整个烧瓶应用程序冻结.当我发送一个kill信号时,我的管道出现故障.有没有办法防止烧瓶在这里冻结?
我有一个Web应用程序,它由位于同一服务器上的REST API支持.假设我有一个Task可访问的资源/api/task/<task_id>和一个网页/create-task,它基本上只是一个创建任务的表单.有几种方法可以做到:
a)使用Javascript与REST API通信(不想这样做)
b)直接在数据库中创建对象
@app.route('/create-task', methods=['POST'])
def create_task(self):
# create an object
try:
task = Task(request.form)
except:
# handle errors and put them to form
pass
# save it into db
task.save()
Run Code Online (Sandbox Code Playgroud)
c)使用requests库调用REST API
@app.route('/create-task', methods=['POST'])
def create_task(self):
# send request to REST API
r = requests.post(url_for('api.task', _external=True), json=request.form.data)
if r.status_code != 200:
# handle errors and put them to form
pass
Run Code Online (Sandbox Code Playgroud)
您认为哪种选择是最佳做法?考虑与错误处理和表单相关的问题.
有关的奖金问题flask-restful.假设我已经建立了一个使用flask-restful构建的工作API,并希望使用选项b).我可以以某种方式使用TaskResource.post这样做吗?