निम्नलिखित ajax
पोस्ट अनुरोध के लिए Flask
( मैं फ्लास्क में अजाक्स से पोस्ट किए गए डेटा का उपयोग कैसे कर सकता हूं? ):
$.ajax({
url: "http://127.0.0.1:5000/foo",
type: "POST",
contentType: "application/json",
data: JSON.stringify({'inputVar': 1}),
success: function( data ) {
alert( "success" + data );
}
});
मुझे एक Cross Origin Resource Sharing (CORS)
त्रुटि मिली :
No 'Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'null' is therefore not allowed access.
The response had HTTP status code 500.
मैंने इसे दो तरीकों से हल करने की कोशिश की, लेकिन कोई भी काम नहीं कर रहा है।
- फ्लास्क-कोर का उपयोग करना
यह Flask
हैंडलिंग के लिए एक विस्तार है CORS
जो क्रॉस-मूल AJAX को संभव बनाना चाहिए।
- http://flask-cors.readthedocs.org/en/latest/
- फ्लास्क और हरोकू में कोर को कैसे सक्षम करें
- जब jwt सामान्य आवरण लागू किया जाता है तो फ्लास्क-कोर्स आवरण काम नहीं करता है।
- जावास्क्रिप्ट - अनुरोधित संसाधन पर कोई 'एक्सेस-कंट्रोल-अलाउंस-ओरिजिन' हेडर मौजूद नहीं है
मेरे pythonServer.py इस समाधान का उपयोग कर:
from flask import Flask
from flask.ext.cors import CORS, cross_origin
app = Flask(__name__)
cors = CORS(app, resources={r"/foo": {"origins": "*"}})
app.config['CORS_HEADERS'] = 'Content-Type'
@app.route('/foo', methods=['POST','OPTIONS'])
@cross_origin(origin='*',headers=['Content-Type','Authorization'])
def foo():
return request.json['inputVar']
if __name__ == '__main__':
app.run()
- विशिष्ट फ्लास्क डेकोरेटर का उपयोग करना
यह एक आधिकारिक फ्लास्क कोड स्निपेट है जो एक डेकोरेटर को परिभाषित करता है जिसे CORS
इसे सजाने वाले कार्यों पर अनुमति देनी चाहिए ।
- http://flask.pocoo.org/snippets/56/
- पायथन फ्लास्क क्रॉस साइट HTTP POST - विशिष्ट अनुमत उत्पत्ति के लिए काम नहीं करता है
- http://chopapp.com/#351l7gc3
मेरे pythonServer.py इस समाधान का उपयोग कर:
from flask import Flask, make_response, request, current_app
from datetime import timedelta
from functools import update_wrapper
app = Flask(__name__)
def crossdomain(origin=None, methods=None, headers=None,
max_age=21600, attach_to_all=True,
automatic_options=True):
if methods is not None:
methods = ', '.join(sorted(x.upper() for x in methods))
if headers is not None and not isinstance(headers, basestring):
headers = ', '.join(x.upper() for x in headers)
if not isinstance(origin, basestring):
origin = ', '.join(origin)
if isinstance(max_age, timedelta):
max_age = max_age.total_seconds()
def get_methods():
if methods is not None:
return methods
options_resp = current_app.make_default_options_response()
return options_resp.headers['allow']
def decorator(f):
def wrapped_function(*args, **kwargs):
if automatic_options and request.method == 'OPTIONS':
resp = current_app.make_default_options_response()
else:
resp = make_response(f(*args, **kwargs))
if not attach_to_all and request.method != 'OPTIONS':
return resp
h = resp.headers
h['Access-Control-Allow-Origin'] = origin
h['Access-Control-Allow-Methods'] = get_methods()
h['Access-Control-Max-Age'] = str(max_age)
if headers is not None:
h['Access-Control-Allow-Headers'] = headers
return resp
f.provide_automatic_options = False
return update_wrapper(wrapped_function, f)
return decorator
@app.route('/foo', methods=['GET','POST','OPTIONS'])
@crossdomain(origin="*")
def foo():
return request.json['inputVar']
if __name__ == '__main__':
app.run()
क्या आप कृपया कुछ संकेत दे सकते हैं कि ऐसा क्यों है?