django允许post跨域访问

用django写的api,供第三方调用,但是出现个问题

一,问题

1.用form表单提交ok

2.用ajax方式显示失败,如下提示

==================================================================

XMLHttpRequest cannot load http://www.itnihao.com/api,Origin null is not allowed by Access-Control-Allow-Origin.

==================================================================

 以上提示信息是跨域访问验证失败,因为django不允许这种跨域访问

二,解决办法


进入项目目录,新建文件


#mkidr middleware

#touch middleware/__init.py__

#vim middleware/crossdomainxhr.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
from  django  import  http
                                                                                                                                                                 
try :
     from  django.conf  import  settings
     XS_SHARING_ALLOWED_ORIGINS  =  settings.XS_SHARING_ALLOWED_ORIGINS
     XS_SHARING_ALLOWED_METHODS  =  settings.XS_SHARING_ALLOWED_METHODS
     XS_SHARING_ALLOWED_HEADERS  =  settings.XS_SHARING_ALLOWED_HEADERS
     XS_SHARING_ALLOWED_CREDENTIALS  =  settings.XS_SHARING_ALLOWED_CREDENTIALS
except  AttributeError:
     XS_SHARING_ALLOWED_ORIGINS  =  '*'
     #XS_SHARING_ALLOWED_METHODS = ['POST', 'GET', 'OPTIONS', 'PUT', 'DELETE']
     XS_SHARING_ALLOWED_METHODS  =  [ 'POST' 'GET' ]
     XS_SHARING_ALLOWED_HEADERS  =  [ 'Content-Type' '*' ]
     XS_SHARING_ALLOWED_CREDENTIALS  =  'true'
                                                                                                                                                                 
                                                                                                                                                                 
class  XsSharing( object ):
     """
     This middleware allows cross-domain XHR using the html5 postMessage API.
                                                                                                                                                                     
     Access-Control-Allow-Origin: http://foo.example
     Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
                                                                                                                                                                 
     Based off https://gist.github.com/426829
     """
     def  process_request( self , request):
         if  'HTTP_ACCESS_CONTROL_REQUEST_METHOD'  in  request.META:
             response  =  http.HttpResponse()
             response[ 'Access-Control-Allow-Origin' ]   =  XS_SHARING_ALLOWED_ORIGINS
             response[ 'Access-Control-Allow-Methods' =  "," .join( XS_SHARING_ALLOWED_METHODS )
             response[ 'Access-Control-Allow-Headers' =  "," .join( XS_SHARING_ALLOWED_HEADERS )
             response[ 'Access-Control-Allow-Credentials' =  XS_SHARING_ALLOWED_CREDENTIALS
             return  response
                                                                                                                                                                 
         return  None
                                                                                                                                                                 
     def  process_response( self , request, response):
         response[ 'Access-Control-Allow-Origin' ]   =  XS_SHARING_ALLOWED_ORIGINS
         response[ 'Access-Control-Allow-Methods' =  "," .join( XS_SHARING_ALLOWED_METHODS )
         response[ 'Access-Control-Allow-Headers' =  "," .join( XS_SHARING_ALLOWED_HEADERS )
         response[ 'Access-Control-Allow-Credentials' =  XS_SHARING_ALLOWED_CREDENTIALS
                                                                                                                                                                 
         return  response


在settings.py添加(MIDDLEWARE_CLASSES这里添加)

1
'middleware.crossdomainxhr.XsSharing' ,

181409815.png




本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1324962,如需转载请自行联系原作者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值