我不确定为什么跟随decorator [validate_request]无效。编写这种验证装饰器的正确方法是什么?
def validate_request(req_type):
if req_type is 'json' and not request.json:
abort(400)
def decorator(func):
@functools.wraps(func)
def wrapped_func(*args, **kwargs):
return func(*args, **kwargs)
return wrapped_func
return decorator
@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])
@validate_request('json')
@json
def update_task(task_id):
# task = filter(lambda t: t['id'] == task_id, tasks)
task = [task for task in tasks if task['id'] == task_id]
if len(task) == 0:
abort(404)
#update task
for field in ['title', 'description', 'done']:
task[0][field] = request.json.get(field, task[0][field])
错误:-
Traceback (most recent call last):
File "C:\AGR\Programming\LearningPython\FlaskLearning\flask_rest\app.py", line 156, in <module>
@validate_request('json')
File "C:\AGR\Programming\LearningPython\FlaskLearning\flask_rest\app.py", line 144, in validate_request
if req_type is 'json' and not request.json:
File "C:\Anaconda\lib\site-packages\werkzeug\local.py", line 338, in __getattr__
return getattr(self._get_current_object(), name)
File "C:\Anaconda\lib\site-packages\werkzeug\local.py", line 297, in _get_current_object
return self.__local()
File "C:\Anaconda\lib\site-packages\flask\globals.py", line 20, in _lookup_req_object
raise RuntimeError('working outside of request context')
RuntimeError: working outside of request context
应该如何以一种更加惯用的方式完成???
这是你的装饰器的外观
def validate_request(f):
@functools.wraps(f)
def decorated_function(*args, **kwargs):
# Do something with your request here
data = flask.request.get_json()
if not data:
flask.abort(404)
return f(*args, **kwargs)
return decorated_function
你会这样称呼它
@app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])
@validate_request
def update_task(task_id):
# The rest of your code..
问题内容: 问题 我希望某些观点仅适用于网站的高级用户。 在项目中的各种应用程序中如何使用此装饰器? 问题答案: 你不必为此编写自己的装饰器,就像中已经包含的那样。 还有一个扩展此装饰器的代码段(),该代码段非常适合你的用例。 而且,要(重新)使用装饰器,只需将装饰器放在路径中的模块中,即可从任何其他模块导入它。
我需要帮助如何在我的服务器(index.js)中正确编写GET和POST请求,以及如何在应用程序中正确编写fetch。js。 我阅读了Stackoverflow上的线程,并搜索了有关如何编写请求和获取的信息,但我发现如何将示例添加到自己的代码中非常困难。我已经尝试了三个星期不同的解决方案,但都一事无成。所以,请帮忙。我觉得这应该没那么难,但出于某种原因确实如此。除了这里,我没有人需要帮助。 我正在
我是新到Groovy wslite,我想写一个肥皂请求在wslite。 我在xml中的肥皂请求是- 我正在运行的groovy脚本如下- 当我执行我的时髦时,出现错误 我做错了什么。 PS:SoapAction在我使用的wsdl中为“”
问题内容: 如何编写一个装饰器,将当前工作目录还原到调用装饰函数之前的目录?换句话说,如果在执行an的函数上使用装饰器,则调用该函数后cwd将不会更改。 问题答案: path.py模块(如果在python脚本中处理路径,则应使用该模块)具有上下文管理器: (版权来自Roberto Alsina的这篇博客文章)
问题内容: 考虑这个小例子: 哪个打印 为什么参数(应该是Test obj实例)没有作为第一个参数传递给装饰函数? 如果我手动进行操作,例如: 它按预期工作。但是,如果我必须事先知道某个函数是否装饰,它就破坏了装饰器的全部目的。这里的模式是什么,还是我误会了什么? 问题答案: tl; dr 您可以通过将类作为描述符并返回部分应用的函数来解决此问题,该函数从中应用对象作为参数之一,如下所示 实际问题
问题内容: 我想用XML内容类型编写请求的正文,但是我不知道如何使用HttpClient对象(http://hc.apache.org/httpclient-3.x/apidocs/index.html) 而且我不知道如何继续用我的XML编写正文… 问题答案: 如果您的xml是由您编写的,则只能以这种方式使用 注意例外。 顺便说一句,该示例是由httpclient版本4.x编写的