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,如需转载请自行联系原作者

相关文章
|
5天前
|
前端开发 UED Python
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
|
Python
通过阿里云服务器的公网IP访问django网站
在安全组设置,添加可以访问的端口 搭建django网站,可以参考官方的教程 设置网站的setting.py ALLOWED_HOSTS = ['*'] 启动网站服务 python manage.py runserver 0.
5038 0
|
5天前
|
JSON 前端开发 数据格式
如何在Django中正确解析POST请求参数
如何在Django中正确解析POST请求参数
25 1
|
5天前
|
前端开发 JavaScript Python
Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST
18 0
|
5天前
|
前端开发 Linux UED
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
40 0
|
5月前
|
JSON 安全 数据库
在 Django 中呈现 HTML 表单(GET 和 POST)
在 Django 中呈现 HTML 表单(GET 和 POST)
40 0
|
5月前
|
前端开发 应用服务中间件 Shell
django(三)django配置支持nginx访问
我正在参加「掘金·启航计划」 VUE3.0版本发布,按照之前的计划,博客前端的页面打算使用VUE3.0重新编写。目前后端使用的是PHP的web框架thinkphp5.0,新版的博客后端打算使用python的web框架django。 目前我的服务器使用的环境是lnmp(centos+nginx+mariadb+php),因此运行django框架的时候,我选择使用nginx + uwsgi 我的服务器使用的是阿里云的centos7.8 运行原理如下图所示: 一:技术扩展WSGI WSGI 是 Web Server Gateway Interface 的缩写。以层的角度来看,WSGI 所在层的位置低
37 0
|
11月前
|
存储 前端开发 JavaScript
Django第4步_理解form表单类与处理html的post、get
Django第4步_理解form表单类与处理html的post、get
60 0
|
12月前
|
SQL 关系型数据库 MySQL
django drf 初始化配置(mysql、跨域访问、默认用户模型)和用户模型重写,数据迁移,解决用户模型重写后无法创建超级用户的问题
django drf 初始化配置(mysql、跨域访问、默认用户模型)和用户模型重写,数据迁移,解决用户模型重写后无法创建超级用户的问题
|
JSON 缓存 中间件
Django 跨域访问POST请求需预先发送option请求问题处理方案
Django 跨域访问POST请求需预先发送option请求问题处理方案
253 0