Note that there are some explanatory texts on larger screens.

plurals
  1. POOnly GET working in cross domain API request with django-piston
    primarykey
    data
    text
    <p>I'm not able to do POST/PUT/DELETE cross-domain request on my API using django-piston, I've CORS enabled using this script (based on <a href="http://loggly.com/blog/2011/12/enabling-cors-in-django-piston/" rel="nofollow">this</a>):</p> <pre><code>class CORSResource(Resource): """ Piston Resource to enable CORS. """ # headers sent in all responses cors_headers = [ ('Access-Control-Allow-Origin', '*'), ('Access-Control-Allow-Headers', 'AUTHORIZATION'), ] # headers sent in pre-flight responses preflight_headers = cors_headers + [ ('Access-Control-Allow-Methods', '*'), ('Access-Control-Allow-Credentials','true') ] def __init__(self, handler, authentication=None): super(CORSResource, self).__init__(handler, authentication) self.csrf_exempt = getattr(self.handler, 'csrf_exempt', True) def __call__(self, request, *args, **kwargs): request_method = request.method.upper() # intercept OPTIONS method requests if request_method == "OPTIONS": # preflight requests don't need a body, just headers resp = HttpResponse() # add headers to the empty response for hk, hv in self.preflight_headers: resp[hk] = hv else: # otherwise, behave as if we called the base Resource resp = super(CORSResource, self).__call__(request, *args, **kwargs) # slip in the headers after we get the response # from the handler for hk, hv in self.cors_headers: resp[hk] = hv return resp @property def __name__(self): return self.__class__.__name__ </code></pre> <p>In the frontend I'm using Backbone with JSONP activated. I don't have any errors, the OPTIONS request works fine then nothing happens. I tried to change the « Access-Control-Allow-Methods » but it doesn't change anything. Any idea ?</p> <p><strong>Edit:</strong> Here is the request headers of an OPTIONS request:</p> <pre><code>OPTIONS /api/comments/ HTTP/1.1 Host: apitest.dev:8000 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:12.0) Gecko/20100101 Firefox/12.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-us,en;q=0.5 Accept-Encoding: gzip, deflate DNT: 1 Connection: keep-alive Origin: http://3l-oauth.dev:1338 Access-Control-Request-Method: POST Access-Control-Request-Headers: authorization,content-type Pragma: no-cache Cache-Control: no-cache </code></pre> <p>and the response headers:</p> <pre><code>HTTP/1.0 200 OK Date: Sat, 12 May 2012 09:22:56 GMT Server: WSGIServer/0.1 Python/2.7.3 Access-Control-Allow-Methods: * Access-Control-Allow-Credentials: true Access-Control-Allow-Origin: * Access-Control-Allow-Headers: AUTHORIZATION Content-Type: text/html; charset=utf-8 X-Frame-Options: SAMEORIGIN </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload