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

相关文章
|
前端开发 Python
Django框架中Ajax GET与POST请求的实战应用
Django框架中Ajax GET与POST请求的实战应用
|
JSON 缓存 前端开发
Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
Django视图层探索:GET/POST请求处理、参数传递与响应方式详解
|
JSON 前端开发 数据格式
如何在Django中正确解析POST请求参数
如何在Django中正确解析POST请求参数
401 1
|
前端开发 UED Python
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
Wagtail-基于Python Django的内容管理系统CMS实现公网访问
340 0
|
前端开发 JavaScript Python
Django 模板中使用 Ajax POST
Django 模板中使用 Ajax POST
194 0
|
前端开发 Linux UED
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
Wagtail-基于Python Django的内容管理系统CMS如何实现公网访问
260 0
|
JSON 安全 数据库
在 Django 中呈现 HTML 表单(GET 和 POST)
在 Django 中呈现 HTML 表单(GET 和 POST)
180 0
|
前端开发 应用服务中间件 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 所在层的位置低
207 0
|
Python
Django使用装饰器限制对视图的访问
1.登录鉴权装饰器 除了可以在视图处理中校验用户身份以及验证用户权限之外,Django还提供了便捷的装饰器来完成这两类校验。@login_required装饰器用来验证用户是否登录,只有登录的用户才可以访问视图,并获得响应,否则可以重定向到登录页引导用户登录。@permission_required装饰器用来校验用户是否具有特定的权限,只有校验通过的用户才可以访问视图。下面介绍这两个装饰器的使用方法与实现原理 2.@login_required 使用@login_required可以传递两个参数 login_url:匿名用户访问时重定向的URL,通常都会跳转到登录页。默认的登录页由sett
192 2
Django使用装饰器限制对视图的访问
|
存储 前端开发 JavaScript
Django第4步_理解form表单类与处理html的post、get
Django第4步_理解form表单类与处理html的post、get
197 0