2015-01-20 12 views
8

मैं बहुत ही सरल सेवाओं की एक जोड़ी बनाने के लिए बोतल का उपयोग कर रहा निकाल देता है। क्वेरीस्ट्रिंग के माध्यम से बाह्य परीक्षण (HTTPie का उपयोग करके) पैरामीटर से सेवा प्राप्त हो रही है।बोतल test_client क्वेरी स्ट्रिंग पैरामीटर

लेकिन अगर मैं की तरह कुछ का उपयोग कर रहा हूँ।

data = { 
     'param1': 'somevalue1', 
     'param2': 'somevalue2'} 

    response = self.client.get(url_for("api.my-service", **data)) 

मैं देख सकता हूँ सही यूआरआई बनाया जा रहा:

http://localhost:5000/api1.0/my-service?param1=somevalue1&param2=somevalue2 

जब मैं सेवा में ब्रेकपाइंट:

request.args 

वास्तव में खाली है।

self.client मेरे कॉन्फ़िगर किए गए फ्लास्क एप्लिकेशन पर app.test_client() पर कॉल करके बनाया गया है।

किसी को भी कोई विचार है कि ? के बाद कुछ भी क्यों फेंक दिया जा रहा है या test_client का उपयोग करते समय इसके आसपास कैसे काम करना है?

उत्तर

11

मैं सिर्फ एक समाधान बाहर मिल गया है।

बनाओ

data = { 
    'param1': 'somevalue1', 
    'param2': 'somevalue2'} 

response = self.client.get(url_for("api.my-service", **data)) 
इस में

:

data = { 
    'param1': 'somevalue1', 
    'param2': 'somevalue2'} 

response = self.client.get(url_for("api.my-service"), query_string = data) 

यह काम करता है लेकिन थोड़ा unintuitive लगता है, और वहाँ डिबगिंग एक जगह है जहाँ यूआरआई में प्रदान की क्वेरी स्ट्रिंग फेंक दी जाती है है ... ।

लेकिन वैसे भी इस समय के लिए काम करता है।

0

मैं जानता हूँ कि यह एक पुरानी पोस्ट है, लेकिन मैं इस में भी भाग गया। फ्लास्क github repository में इसके बारे में एक खुला मुद्दा है। ऐसा लगता है कि यह इरादा व्यवहार है। समस्या धागे में एक प्रतिक्रिया से:

mitsuhiko ने 24 जुलाई, 2013
पर टिप्पणी की जो वर्तमान में व्यवहार का व्यवहार है। परीक्षण क्लाइंट का पहला पैरामीटर एक सापेक्ष यूआरएल होना चाहिए। यदि ऐसा नहीं है, तो पैरामीटर हटा दिए जाते हैं क्योंकि इसका इलाज किया जाता है जैसे कि यह यूआरएल दूसरे के साथ जुड़ गया था। यह काम करता है:

>>> from flask import Flask, request 
>>> app = Flask(__name__) 
>>> app.testing = True 
>>> @app.route('/') 
... def index(): 
... return request.url 
... 
>>> c = app.test_client() 
>>> c.get('/?foo=bar').data 
'http://localhost/?foo=bar' 

एक तरह से एक रिश्तेदार यूआरएल में अपने संपूर्ण url बदलने और रखने क्वेरी स्ट्रिंग urlparse उपयोग करने के लिए है करने के लिए:

from urlparse import urlparse 

absolute_url = "http://someurl.com/path/to/endpoint?q=test" 
parsed = urlparse(absolute_url) 
path = parsed[2] or "/" 
query = parsed[4] 
relative_url = "{}?{}".format(path, query) 

print relative_url 
संबंधित मुद्दे