<p>我相信您可能不完全理解“查询字符串”在flask中是如何工作的。此url:</p>
<pre><code>app.route(f'/match/keys/source=<string:start>/destination=<string:end>', methods=['GET'])
</code></pre>
<p>无法按预期工作,因为它与请求不匹配:</p>
<pre><code>localhost:9999/match/keys?source=#123&destination=#123
</code></pre>
<p>相反,它可能是:</p>
<pre><code>@app.route('/match/keys', methods=['GET'])
</code></pre>
<p>这将符合:</p>
<pre><code>localhost:9999/match/keys?source=%23123&destination=%23123
</code></pre>
<p>然后,要捕获这些“查询字符串”,您需要执行以下操作:</p>
<pre><code>source = request.args.get('source') # <- name the variable what you may
destination = request.args.get('destination') # <- same as the naming format above
</code></pre>
<p>因此,当您调用<code>localhost:9999/match/keys?source=%23123&destination=%23123</code>时,您将测试请求url中的那些“查询字符串”,如果它们是,则路由函数将执行</p>
<p>我写了这个测试:</p>
<pre><code>def test_query_string(self):
with app.test_client() as c:
rc = c.get('/match/keys?source=%23123') # <- Note use of the '%23' to represent '#'
print('Status code: {}'.format(rc.status_code))
print(rc.data)
assert rc.status_code == 200
assert 'source' in request.args
assert rc.data.decode('utf-8') == "#123"
</code></pre>
<p>并使用此路由功能通过:</p>
<pre><code>@app.route('/match/keys', methods=['GET'])
def some_route():
s = request.args.get('source')
return s
</code></pre>
<p>您可以看到,我能够在单元测试中捕获查询字符串源值</p>