我即将在Flask / Google App Engine中实现推送任务队列。 基本上我想POST到API并执行任务队列中的底层工作。
初始入口点是REST API(flask_restful)
class FTRecordsAPI(Resource):
def post(self):
arguments = self.reqparser.parse_args()
json_records = arguments.get('records')
user = User.query(...).get()
if user:
taskqueue.add(url='/worker/', params={'user': user})
return '', 201
else:
return '', 401
将worker定义为url.py中的视图:
app.add_url_rule('/worker', 'worker',
view_func=csrf_protect.exempt(TaskView.as_view('taskView')))
TaskView是:
from flask.globals import request
class TaskView(MethodView):
def post(self):
user = request.json['user']
return "OK"
奇怪的是,当我在TaskView
中调试请求对象中的任何地方时,我发送给/worker
的用户对象的任何痕迹。但是我在那里找到了来自前一次调用的records
对象?!
我错过了什么?
答案 0 :(得分:4)
尝试:
taskqueue.add(url='/worker', params={'user': user}, method="POST")
和
user = request.form.get('user')
正如marcadian指出的那样,taskqueue默认使用POST
,所以也许你需要request.form
才能访问POST变量。
答案 1 :(得分:0)
很抱歉线程复活,但如果您想直接使用json,可以执行以下操作:
taskstop = taskqueue.add(url='/stop_std_watcher',
target='worker',
payload=json.dumps({'watcherjson': client.client_watcher}),
method='POST',
headers={'Content-Type': 'application/json'})
要添加headers
和payload
kwargs
在接收端,你得到了:
@app.route('/stop_std_watcher', methods=['POST'])
def stop_std_watcher():
# curl -i -H "Content-Type: application/json" -X POST -d @stop.json http://localhost:8081/stop_std_watcher
watcherjson = request.json['watcherjson']
如果您想手动测试帖子路线,我在评论中添加了curl,可能很有用