如何在Falcon python中使用查询字符串

时间:2017-10-19 14:14:38

标签: python query-string falconframework

您是否将应用配置为具有以下功能:

  1. 将api-endpoint定义为for i in range(3)

  2. 仍然可以像app.add_route('/v1/tablets', TabletsCollection())一样使用QueryParams

  3. Collection有两个方法https://example.com/api/v1/tablets?limit=12&offset=50&q=tablet name,用于检索整个列表,并使用过滤器和on_get创建单个记录。

    我一直在网上搜索一段时间,你如何获得query_string并正确解析params?

3 个答案:

答案 0 :(得分:2)

查询字符串和解析后的查询字符串(作为dict)都可以在falcon传递给API端点的Request对象上使用。

您的处理程序可以执行以下操作:

class TabletsCollection():
    def on_post(self, req, resp):
        print req.query_string
        for key, value in req.params.items():
            print key, value

请参阅http://falcon.readthedocs.io/en/stable/api/request_and_response.html#Request.query_stringhttp://falcon.readthedocs.io/en/stable/api/request_and_response.html#Request.params

答案 1 :(得分:0)

您可以使用 falcon.uri 模块来解析查询字符串。

qs = falcon.uri.parse_query_string(req.query_string)
        if "myq" in qs:
            searchedQ = qs["myq"]

答案 2 :(得分:-1)

经过一段时间我发现它,问题不在于我在开始时想到的猎鹰。问题在于Nginx配置代理了对gunincorn的请求。

您可以在此处找到完整答案with nginx,how to forward query parameters?或简短答案:

nginx配置文件的一部分

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>

<ul class="nav" id="myTab" role="tablist">
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#home" role="tab" aria-controls="home">Home</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#profile" role="tab" aria-controls="profile">Profile</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#messages" role="tab" aria-controls="messages">Messages</a>
  </li>
  <li class="nav-item">
    <a class="nav-link" data-toggle="tab" href="#settings" role="tab" aria-controls="settings">Settings</a>
  </li>
</ul>

<div class="tab-content">
  <div class="tab-pane" id="home" role="tabpanel">Good</div>
  <div class="tab-pane" id="profile" role="tabpanel">Best</div>
  <div class="tab-pane" id="messages" role="tabpanel">Poor</div>
  <div class="tab-pane" id="settings" role="tabpanel">Ugly</div>
</div>