【问题标题】:(Still) Getting RuntimeError: Working outside of request context. when trying app.app_context()(仍然)获取 RuntimeError:在请求上下文之外工作。尝试 app.app_context() 时
【发布时间】:2016-11-03 08:36:21
【问题描述】:
from flask import Flask, request
app = Flask(__name__)

@app.route('/post/', methods=['GET', 'POST'])
def update_post():
    # show the post with the given id, the id is an integer
    postId = request.args.get('postId')
    uid = request.args.get('uid')
    return postId, uid

def getpostidanduid():
    with app.app_context():
        credsfromUI = update_post()
        app.logger.message("The postId is %s and uid is %s" %(request.args.get('postId'), request.args.get('uid')))
        ## Prints 'The post id is red and uid is blue'\
    return credsfromUI

print(getpostidanduid())

if __name__ == '__main__':
    # This is used when running locally. Gunicorn is used to run the
    # application on Google App Engine. See entrypoint in app.yaml.
    app.run(host='127.0.0.1', port=8080, debug=True)
# [END app]

这是一个程序,它接受浏览器 url 中的两位信息(postId 和 uid),并且应该允许我在程序中引用它们。对于我的简单 python 程序,我无法弄清楚为什么我仍然收到 RuntimeError: Working outside of request context。

这通常意味着您尝试使用需要的功能 一个活动的 HTTP 请求。请参阅有关测试的文档 有关如何避免此问题的信息。

我正在使用 with app.app_context() 但它不会让我在请求中获取变量的内容。我已经阅读了文档并查看了其他解决方案,但仍然卡住了。请帮忙?

【问题讨论】:

    标签: python flask request


    【解决方案1】:

    因此,如果我定义了一个函数,它在 python 中具有全局范围,因此我可以在 app.route()/请求上下文受限函数中调用它来获取 request.args.get(var)。

    import datetime
    import logging
    from flask import Flask, request
    app = Flask(__name__)
    
    def testuser(username):
        # show the user profile for that user
        user_string = username.lower()
        return 'Username you appended is %s' %user_string
    
    @app.route('/user/', methods=['GET', 'POST'])
    def show_user_profile():
        # show the user profile for that user : http://127.0.0.1:8080/user/?user=gerry
        uid = request.args.get('user')
        print(testuser(uid))
        return 'User %s' %uid
    
    if __name__ == '__main__':
        # This is used when running locally. Gunicorn is used to run the
        # application on Google App Engine. See entrypoint in app.yaml.
        app.run(host='127.0.0.1', port=8080, debug=True)
    # [END app]
    

    【讨论】:

    • 我试图用一个通用的打印函数显示所有有趣的请求属性,但遇到了这个请求上下文问题。这个答案解决了它。我所要做的就是传入请求对象。 def print_request(request): args_string = '' for k, v in request.args.items(): args_string += f'<p>arg {k} = {v}</p>' request_string = f'<p>Request method = {request.method}</p> return request_string + args_string
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2023-02-03
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    相关资源
    最近更新 更多