উত্তর:
এটির মতো চেষ্টা করুন:
from flask import Response
@app.route('/ajax_ddl')
def ajax_ddl():
xml = 'foo'
return Response(xml, mimetype='text/xml')
প্রকৃত সামগ্রী-প্রকারটি মাইমটাইপ প্যারামিটার এবং চরসেট (ইউটিএফ -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'}
আশা করি এটা সাহায্য করবে
আপডেট: এই পদ্ধতিটি ব্যবহার করুন কারণ এটি অজগর 2.x এবং পাইথন 3.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
আমি @ সাইমন সাপিনের উত্তরটি পছন্দ এবং পছন্দ করেছি। আমি কিছুটা আলাদা ট্যাক্স নিয়ে শেষ করেছিলাম, তবে আমার নিজস্ব ডেকরেটার তৈরি করেছি:
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')
। এটি টিপলটিকে আর্গুমেন্টে আনপ্যাক করবে। ধন্যবাদ যদিও, একটি মার্জিত সমাধানের জন্য!
আপনার ডেটার সাথে প্রতিক্রিয়া পেতে Make_response পদ্ধতি ব্যবহার করুন । তারপরে মাইমটাইপ বৈশিষ্ট্যটি সেট করুন । শেষ পর্যন্ত এই প্রতিক্রিয়াটি ফিরিয়ে দিন:
@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>'
আপনি নিম্নলিখিত পদ্ধতিটি ব্যবহার করতে পারেন (পাইথন ৩..6.২) :
কেস ওয়ান
@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)