जवाबों:
इस तरह कोशिश करें:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
वास्तविक सामग्री-प्रकार mimetype पैरामीटर और charset (UTF-8 के लिए डिफ़ॉल्ट) पर आधारित है।
प्रतिक्रिया (और अनुरोध) वस्तुओं को यहां प्रलेखित किया गया है: http://werkzeug.pocoo.org/docs/wrappers/
flask.Response
ओवरराइड करें default_mimetype
, और सेट करें कि app.response_class
werkzeug.pocoo.org/docs/wrappers/… flask.pocoo.org/docs/api/#flask.Flask.response_class
app.response_class
साइमन की तरह सेट करते हैं, तो नीचे दिए गए उत्तर में दिए गए उत्तर कीapp.make_response
तरह अपने रिपीटी उदाहरण को प्राप्त करने के लिए उपयोग करना याद रखें ।
यह जितना सरल है
x = "some data you want to return"
return x, 200, {'Content-Type': 'text/css; charset=utf-8'}
आशा करता हूँ की ये काम करेगा
अद्यतन: इस विधि का उपयोग करें क्योंकि यह अजगर २.x और अजगर ३.x दोनों के साथ काम करेगा
और दूसरा यह कई हेडर की समस्या को भी खत्म करता है।
from flask import Response
r = Response(response="TEST OK", status=200, mimetype="application/xml")
r.headers["Content-Type"] = "text/xml; charset=utf-8"
return r
मुझे @Simon सैपिन का उत्तर पसंद है और उत्थान किया है। हालाँकि, मैंने कुछ अलग तरह का सौदा किया, और अपना खुद का डेकोरेटर बनाया:
from flask import Response
from functools import wraps
def returns_xml(f):
@wraps(f)
def decorated_function(*args, **kwargs):
r = f(*args, **kwargs)
return Response(r, content_type='text/xml; charset=utf-8')
return decorated_function
और इसका उपयोग इस प्रकार करें:
@app.route('/ajax_ddl')
@returns_xml
def ajax_ddl():
xml = 'foo'
return xml
मुझे लगता है कि यह थोड़ा अधिक आरामदायक है।
return 'msg', 200
, यह आगे बढ़ेगा ValueError: Expected bytes
। इसके बजाय, डेकोरेटर को बदलें return Response(*r, content_type='whatever')
। यह बहस के लिए टपल को खोल देगा। हालांकि, एक सुंदर समाधान के लिए धन्यवाद!
अपने डेटा के साथ प्रतिक्रिया प्राप्त करने के लिए मेक_पर्सन विधि का उपयोग करें । फिर mimetype विशेषता सेट करें । अंत में यह प्रतिक्रिया वापस करें:
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
resp = app.make_response(xml)
resp.mimetype = "text/xml"
return resp
यदि आप Response
सीधे उपयोग करते हैं, तो आप सेटिंग द्वारा प्रतिक्रियाओं को अनुकूलित करने का मौका खो देते हैं app.response_class
। make_response
विधि का उपयोग करता app.responses_class
प्रतिक्रिया ऑब्जेक्ट बनाने के लिए। इसमें आप अपनी खुद की कक्षा बना सकते हैं, अपने आवेदन को विश्व स्तर पर उपयोग कर सकते हैं:
class MyResponse(app.response_class):
def __init__(self, *args, **kwargs):
super(MyResponse, self).__init__(*args, **kwargs)
self.set_cookie("last-visit", time.ctime())
app.response_class = MyResponse
make_response
बेहतर तरीके से बताया कि उपयोग करने से बेहतर क्यों हैResponse
from flask import Flask, render_template, make_response
app = Flask(__name__)
@app.route('/user/xml')
def user_xml():
resp = make_response(render_template('xml/user.html', username='Ryan'))
resp.headers['Content-type'] = 'text/xml; charset=utf-8'
return resp
आमतौर पर आपको Response
ऑब्जेक्ट खुद बनाने की ज़रूरत नहीं है क्योंकि आपके make_response()
लिए यह ध्यान रखेगा।
from flask import Flask, make_response
app = Flask(__name__)
@app.route('/')
def index():
bar = '<body>foo</body>'
response = make_response(bar)
response.headers['Content-Type'] = 'text/xml; charset=utf-8'
return response
एक और बात, ऐसा लगता है कि किसी ने उल्लेख नहीं किया है after_this_request
, मैं कुछ कहना चाहता हूं:
इस अनुरोध के बाद एक कार्य निष्पादित करता है। यह प्रतिक्रिया वस्तुओं को संशोधित करने के लिए उपयोगी है। फ़ंक्शन को प्रतिक्रिया ऑब्जेक्ट पास किया जाता है और उसी या नए को वापस करना होता है।
इसलिए हम इसे कर सकते हैं after_this_request
, कोड इस तरह दिखना चाहिए:
from flask import Flask, after_this_request
app = Flask(__name__)
@app.route('/')
def index():
@after_this_request
def add_header(response):
response.headers['Content-Type'] = 'text/xml; charset=utf-8'
return response
return '<body>foobar</body>'
आप निम्न विधि आज़मा सकते हैं (python3.6.2) method
मामला एक :
@app.route('/hello')
def hello():
headers={ 'content-type':'text/plain' ,'location':'http://www.stackoverflow'}
response = make_response('<h1>hello world</h1>',301)
response.headers = headers
return response
मामला दो :
@app.route('/hello')
def hello():
headers={ 'content-type':'text/plain' ,'location':'http://www.stackoverflow.com'}
return '<h1>hello world</h1>',301,headers
मैं फ्लास्क का उपयोग कर रहा हूं। और यदि आप जसन को वापस करना चाहते हैं, तो आप इसे लिख सकते हैं:
import json #
@app.route('/search/<keyword>')
def search(keyword):
result = Book.search_by_keyword(keyword)
return json.dumps(result),200,{'content-type':'application/json'}
from flask import jsonify
@app.route('/search/<keyword>')
def search(keyword):
result = Book.search_by_keyword(keyword)
return jsonify(result)