2017-10-19 100 views
0

何你配置的應用具有以下特點:如何使用查詢字符串獵鷹蟒蛇

  1. 定義爲app.add_route('/v1/tablets', TabletsCollection())

  2. 而且還是一個API端點能夠使用QueryParams像這https://example.com/api/v1/tablets?limit=12&offset=50&q=tablet name

集合已檢索整個列表,並使用過濾器和012兩種方法用於創建單個記錄。

我一直在尋找的淨有一段時間了,你怎麼QUERY_STRING和正確分析PARAMS?

回答

0

兩個查詢字符串和解析查詢字符串(如一個字典)中提供的請求對象上的獵鷹傳遞給您的API端點。

你的處理程序可以做的東西,如:

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

+0

謝謝你的答案的一部分,但我已經試過了直之初,由於某種原因,這是行不通的。這裏是要點,我從教程頁面https://gist.github.com/woss/db48b850503a09ac5fa092498970d1d4 – woss

+0

修改我是否需要指定的Content-Type比'應用/ json'別的東西嗎? – woss

+0

我對你的要點(第17行的'TabletsCollection',而不是'TabletsResource')做了一些改動,並用'uwsgi --wsgi-file falcon-app.py --callable app --http:9000'運行了它。如果我然後運行'curl localhost:9000/v1/tablets?foo = bar',我得到響應'{「qs」:「foo = bar」,「params」:{「foo」:「bar」}}'。即使我設置了內容類型:'curl localhost:9000/v1/tablets?foo = bar -H「Accept:application/json」-H「Content-Type:application/json」',這也可以工作。也許問題出在你用來提出請求的地方。 –

0

一段時間後,我想通了,它的問題是不是與獵鷹正如我在開始還以爲。這個問題出現在Nginx配置中,代理請求gunincorn。

您可以在這裏找到完整的答案with nginx,how to forward query parameters?或簡短的答案在這裏:

nginx的配置文件

location ~ ^/api/(.*)$ { 
    # ... your code 
    # need to pass all the args to proxy 
    proxy_pass http://gunicorn/$1$is_args$args; 
}