相关疑难解决方法(0)

为Flask app unit test设置(模拟)请求标头

有没有人知道在单元测试期间设置(模拟)FLask(Werkzeug)提供的请求对象的User-Agent的方法?

就目前而言,当我尝试获取诸如request.headers ['User-Agent']之类的细节时,会引发KeyError,因为Flask test_client()没有设置它们.(参见下面的部分堆栈跟踪)

在单元测试期间尝试从Flask项目中的请求对象获取User-Agent时,会引发KeyError.

File "/Users/me/app/rest/app.py", line 515, in login
    if request.headers['User-Agent']:
File "/Users/me/.virtualenvs/app/lib/python2.7/site-packages/werkzeug/datastructures.py", line 1229, in __getitem__
    return self.environ['HTTP_' + key]
    KeyError: 'HTTP_USER_AGENT'
Run Code Online (Sandbox Code Playgroud)

- 更新 -

除了以下(接受)解决方案之外,environ_base提示引导我使用其他SO解决方案.此解决方案的前提是为Flask应用程序创建一个包装类,并覆盖调用方法以自动设置环境变量.这样,就为所有调用设置了变量.所以,我最终实现的解决方案是创建这个代理类:

class FlaskTestClientProxy(object):
    def __init__(self, app):
        self.app = app

    def __call__(self, environ, start_response):
        environ['REMOTE_ADDR'] = environ.get('REMOTE_ADDR', '127.0.0.1')
        environ['HTTP_USER_AGENT'] = environ.get('HTTP_USER_AGENT', 'Chrome')
        return self.app(environ, start_response)
Run Code Online (Sandbox Code Playgroud)

然后用该代理包装WSGI容器:

app.wsgi_app = FlaskTestClientProxy(app.wsgi_app)
test_client = app.test_client()
Run Code Online (Sandbox Code Playgroud)

python unit-testing flask

18
推荐指数
2
解决办法
1万
查看次数

在烧瓶中,我如何在另一个视图中从另一个函数/路由调用数据,如下所述

以下 3 个链接并没有用外行的术语解释我真正想要实现的目标

如何从另一个 Flask 视图调用一个 Flask 视图?

通过从另一个视图调用它从一个视图获取 json

从 Flask 中的另一条路线中调用一条路线

我有以下代码

@app.route('/rate_isp_service', methods=['GET', 'POST'])
@login_required
def rate_isp_service():
isp_query = db.session.query(Isps)
isp_entries = [dict
               (isp_id=isp.isp_id, isp_name=isp.isp_name, isp_description=isp.isp_description) for isp in
               isp_query]

services_query = db.session.query(Services)
services_entries = [dict
                    (service_id=service.service_id, service_name=service.service_name,
                     service_catergory_id=service.service_catergory_id) for service in
                    services_query]

ratings_query = db.session.query(Ratings)
ratings_entries = [dict
                   (ratings_id=rating.ratings_id, rating_value=rating.rating_value,
                    rating_comment=rating.rating_comment) for rating in
                   ratings_query]

servicemetric_query = db.session.query(Service_metric)
servicemetric_entries = [dict
                         (metric_id=metric.metric_id, metric_name=metric.metric_name,
                          metric_description=metric.metric_description) for metric in
                         servicemetric_query]


return render_template('rate_isp_service.html', isp_entries=isp_entries, services_entries=services_entries,ratings_entries=ratings_entries)
Run Code Online (Sandbox Code Playgroud)

这段代码会在我的 html 模板中填充我所有的下拉列表,只要有表单。

我不得不在所有视图中多次包含此代码,因为我找不到将它包含在某些视图中的方法 …

python flask

5
推荐指数
1
解决办法
9047
查看次数

标签 统计

flask ×2

python ×2

unit-testing ×1