Django 跨域请求处理

参考https://blog.csdn.net/qq_27068845/article/details/73007155

http://blog.51cto.com/aaronsa/2071108

django处理Ajax跨域访问

  使用javascript进行ajax访问的时候,出现如下错误

出错原因:javascript处于安全考虑,不允许跨域访问。下图是对跨域访问的解释:

概念

  这里说的js跨域是指通过js或python在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(Django)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。

解决办法

1. 修改views.py文件

修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据:

todo_list = [
    {"id": "1", "content": "吃饭"},
    {"id": "2", "content": "吃饭"},
]

class Query(View):
    @staticmethod
    def get(request):
        response = JsonResponse(todo_list, safe=False)
        response["Access-Control-Allow-Origin"] = "*"
        response["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
        response["Access-Control-Max-Age"] = "1000"
        response["Access-Control-Allow-Headers"] = "*"
        return response

    @staticmethod
    def post(request):
        print(request.POST)
        return HttpResponse()

2. 添加中间件 django-cors-headers

GitHub地址: https://github.com/ottoyiu/django-cors-headers

2.1. 安装 pip install django-cors-headers

2。2 添加app

INSTALLED_APPS = (
    ...
    ‘corsheaders‘,
    ...
)

2.3 添加中间件

MIDDLEWARE = [  # Or MIDDLEWARE_CLASSES on Django < 1.10
    ...
    ‘corsheaders.middleware.CorsMiddleware‘,
    ‘django.middleware.common.CommonMiddleware‘,
    ...
]

2.4 配置允许跨站访问本站的地址

CORS_ORIGIN_ALLOW_ALL = FalseCORS_ORIGIN_WHITELIST = (
      ‘localhost:63343‘,
)

# 默认值是全部:

CORS_ORIGIN_WHITELIST = ()  # 或者定义允许的匹配路径正则表达式.

CORS_ORIGIN_REGEX_WHITELIST = (‘^(https?://)?(\w+.)?>google.com$‘, )   # 默认值:

CORS_ORIGIN_REGEX_WHITELIST = ()

 

2.5 设置允许访问的方法

CORS_ALLOW_METHODS = (
‘GET‘,
‘POST‘,
‘PUT‘,
‘PATCH‘,
‘DELETE‘,
‘OPTIONS‘
)

2.6 设置允许的header:

默认值:

CORS_ALLOW_HEADERS = (
‘x-requested-with‘,
‘content-type‘,
‘accept‘,
‘origin‘,
‘authorization‘,
‘x-csrftoken‘
)

原文地址:https://www.cnblogs.com/DI-DIAO/p/8977847.html

时间: 2024-07-30 20:14:15

Django 跨域请求处理的相关文章

浏览器拦截跨域请求处理方法

解决跨域的解决办法有多种,比如jsonp,或者apache 或者nigix里面配置,或者后端的php或者java中配置 cross orgion. 在网上搜了一圈,发现处理方式都差不多,但是我们得清楚这些到底怎么用. 先看下这段代码: <?xml version="1.0"?> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-poli

WCF SOA --- AJAX 跨域请求处理 CORS for WCF

一.问题        跨域请求无法处理的问题,由于为了阻止恶意的网站通过JS脚本来窃取正常网站受保护的资源.所由所有的浏览器的默认策略是阻止XmlHttpRequest的跨域的异步请求. 但是对于一个 复合型的应用集合来说,可能需要使用不同的域来部署我们的应用.对于这种正常的需求,我们的服务与应用就需要能够支持指定信认域的跨域的异步请法.       通常来说,我们有三种替代方案       1, 使用JSONP,             JSONP(JSON with Padding), 但

python Django 跨域解决方案

django解决跨域请求的问题 解决方案 1.安装django-cors-headers pip install django-cors-headers 内容详见:https://github.com/ottoyiu/django-cors-headers 其他解决方 1.使用JSONP 使用Ajax获取json数据时,使用JSONP,JSONP只能用于GET请求,红色部分是注意事项 $.ajax({ url:'http://localhost:8000/hello/', data:data,

用CORS 解决vue.js django跨域调用

Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版.与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求.用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好.另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作.现代的浏览器都支持 CO

Django跨域请求CSRF的方法示例

web跨域请求 1.为什么要有跨域限制 举个例子: 1.用户登录了自己的银行页面 http://mybank.com,http://mybank.com向用户的cookie中添加用户标识. 2.用户浏览了恶意页面 http://evil.com.执行了页面中的恶意AJAX请求代码. 3.http://evil.com向http://mybank.com发起AJAX HTTP请求,请求会默认把http://mybank.com对应cookie也同时发送过去. 4.银行页面从发送的cookie中提取

django 跨域

什么是跨域 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的.其实我们通常所说的跨域是狭义的,是由浏览器同源策略限制的一类请求场景. 什么是同源策略? 同源策略/SOP(Same origin policy)是一种约定,由Netscape公司1995年引入浏览器,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS.CSFR等***.所谓同源是指"协议+域名+端口"三者相同,即便两个不同的域名指向同一个ip地址,也非同源. 同源策略限制

Vue+Django 跨域问题配置

跨域请求问题: 1.Django后端解决办法: # 后端下载模块: pip install django-cors-headers # settings配置: MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'dj

浏览器拦截跨域请求处理方法-firefox报错,同源策略不允许读取XXX上的远程资源

使用post请求域名不相同的资源的话,可以用cors跨域. 1) 在被请求的项目根目录(root下)下放以下文件 crossdomain.xml [html] view plaincopyprint? <?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "./cross-domain-policy.dtd"> <cross-domain-policy> <si

Jquery:ajax跨域请求处理

昨天朋友想做个图片懒加载的效果,朋友是前端的,我这边给他提供数据,程序写好了放到服务器上,本地测试访问时却报jquery跨域的问题,于是找度娘了解了一下jquey如何处理,网上有很多参考文章,但没细看,此情况会造成知识的不全面,望谅解,找了两个解决方案,具体如下: 1.直接在ashx中加入以下代码: context.Response.Headers.Add("Access-Control-Allow-Origin", "*"); Access-Control-All