方案一:一套干掉全部Primary

首先你的pip下载一个第三方库贼厉害的:

  1. pip install corsheaders

然后在项目的setting.py里面引入第三方库,如下:

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'coffee.apps.CoffeeConfig',
  9. 'rest_framework',
  10. 'corsheaders' # 引入第三方库
  11. ]

接着配置setting.py:

  1. # 开始:加入了中间件来实现跨域请求
  2.  
  3. CORS_ALLOW_CREDENTIALS = True
  4. CORS_ORIGIN_ALLOW_ALL = True
  5. CORS_ORIGIN_WHITELIST = (
  6. '*'
  7. )
  8.  
  9. CORS_ALLOW_METHODS = (
  10. 'DELETE',
  11. 'GET',
  12. 'OPTIONS',
  13. 'PATCH',
  14. 'POST',
  15. 'PUT',
  16. 'VIEW',
  17. )
  18.  
  19. CORS_ALLOW_HEADERS = (
  20. 'XMLHttpRequest',
  21. 'X_FILENAME',
  22. 'accept-encoding',
  23. 'authorization',
  24. 'content-type',
  25. 'dnt',
  26. 'origin',
  27. 'user-agent',
  28. 'x-csrftoken',
  29. 'x-requested-with',
  30. 'Pragma',
  31. )
  32.  
  33. # 结束:加入了中间件来实现跨域请求

再次访问的时候用AJAX带上请求头就可以了,注意哦,是请求头,不是数据哦!

方案二:自力更生,艰苦创业!

首先在APP下面创建一个cors.py,里面写入如下内容

  1. # cors.py
  2. class MiddlewareMixin(object):
  3. def __init__(self, get_response=None):
  4. self.get_response = get_response
  5. super(MiddlewareMixin, self).__init__()
  6.  
  7. def __call__(self, request):
  8. response = None
  9. if hasattr(self, 'process_request'):
  10. response = self.process_request(request)
  11. if not response:
  12. response = self.get_response(request)
  13. if hasattr(self, 'process_response'):
  14. response = self.process_response(request, response)
  15. return response
  16.  
  17. class CORSMiddleware(MiddlewareMixin):
  18.  
  19. def process_response(self,request,response):
  20. # 添加响应头
  21.  
  22. # 允许你的域名来获取我的数据
  23. response['Access-Control-Allow-Origin'] = "*"
  24.  
  25. if request.method == "OPTIONS":
  26. # 允许你携带Content-Type请求头
  27. response['Access-Control-Allow-Headers'] = "Content-Type"
  28.  
  29. # 允许你发送DELETE,PUT
  30. # response['Access-Control-Allow-Methods'] = "DELETE,PUT"
  31.  
  32. return response

然后在setting.py里面配置一下

  1. MIDDLEWARE = [
  2. 'django.middleware.security.SecurityMiddleware',
  3. 'django.contrib.sessions.middleware.SessionMiddleware',
  4. 'django.middleware.common.CommonMiddleware',
  5. 'django.middleware.csrf.CsrfViewMiddleware',
  6. # 'django.middleware.csrf.CsrfResponseMiddleware',
  7. 'django.contrib.auth.middleware.AuthenticationMiddleware',
  8. 'django.contrib.messages.middleware.MessageMiddleware',
  9. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
  10. 'coffee.cors.CORSMiddleware', # 引入跨域
  11. ]

然后前后端分离的时候带上请求头就可以了!

完美收官!

Django解决跨域俩方案的更多相关文章

  1. django解决跨域请求的问题

    跨域请求可以用jsonp来解决,不过今天我发现一个很好用的包:django-cors-headers 只需要简单地配置一下就可 被请求方的setting.py中的配置如下: INSTALLED_APP ...

  2. Django框架深入了解_05 (Django中的缓存、Django解决跨域流程(非简单请求,简单请求)、自动生成接口文档)

    一.Django中的缓存: 前戏: 在动态网站中,用户所有的请求,服务器都会去数据库中进行相应的增,删,查,改,渲染模板,执行业务逻辑,最后生成用户看到的页面. 当一个网站的用户访问量很大的时候,每一 ...

  3. Django解决跨域问题

    原理:浏览器的同源策略,其实我们的请求发送过去了,服务器也进行响应了,就是浏览器把响应给阻止响应而已 第一种方法jsonp 因为浏览器不对 <script> 标签里面的src属性进行阻止, ...

  4. Python django解决跨域请求的问题

    解决方案 1.安装django-cors-headers pip3 install django-cors-headers 2.配置settings.py文件 INSTALLED_APPS = [ . ...

  5. Java解决跨域的方案

    在后台加上,在数据返回之前添加 response.setHeader("Access-Control-Allow-Origin","*"); 就可以了,前台不用 ...

  6. Django 解决跨域问题(写入到中间件中)

    class MiddlewareMixin(object): def __init__(self, get_response=None): self.get_response = get_respon ...

  7. 关于跨域介绍和djiago解决跨域问题

    什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 什么是同源策略? 同源策略又分为以下两种 DOM同源策略:禁止对不 ...

  8. 使用Access-Control-Allow-Origin解决跨域

    什么是跨域 当两个域具有相同的协议(如http), 相同的端口(如80),相同的host(如www.google.com),那么我们就可以认为它们是相同的域(协议,域名,端口都必须相同). 跨域就指着 ...

  9. 搞懂:前端跨域问题JS解决跨域问题VUE代理解决跨域问题原理

    什么是跨域 跨域:一个域下的文档或脚本试图去请求另一个域下的资源 广义的跨域包含一下内容: 1.资源跳转(链接跳转,重定向跳转,表单提交) 2.资源请求(内部的引用,脚本script,图片img,fr ...

随机推荐

  1. Clojure:导入lein项目到IntelliJ IDEA

    首先,我们需要先创建一个lein项目(废话..) lein new [项目名称] 然后生成Maven的pom.xml文件 cd [项目目录] lein pom 最后,在InteliJ IDEA中选择导 ...

  2. HDU 5241 上海大都会 F题

    留意到,每一种语言的情况其实是独立的,也就是说,每一种语言的集合的包含的情况都是符合要求的.一种语言在图上可以有32种情况(由数据2知),所以,总的数就是32^n import java.util.* ...

  3. 记录cocos2d-x3.0版本号更改内容官方说明

    http://www.cocos2d-x.org/wiki/Release_Notes_for_Cocos2d-x_v300

  4. C++对象模型——关于对象(第一章)

    第一章    关于对象 在C语言中,"数据"和"处理数据的操作(函数)"是分开声明的,也就是说,语言本身并没有支持"数据和函数"之间的关联性 ...

  5. 第十七周自由练习项目——acm 学生最高最低成绩

    /* *程序的版权和版本号声明部分: *Copyright(c)2014,烟台大学计算机学院学生 *All rights reserved. *文件名:acm 学生最高与最低成绩 *作者:刘中林 *完 ...

  6. Spring:延迟初始化

    ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化.提前实例化意味着作为初始化过程的一部分,ApplicationContext实例会创建并 ...

  7. [BZOJ 1735] Muddy Fields

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1735 [算法] 二分图最小覆盖 [代码] #include<bits/stdc ...

  8. TCP打开文件传输(客户端code)

    #include <stdio.h>#include <stdlib.h>#include <arpa/inet.h>#include <sys/types. ...

  9. Android开发中的日期格式化

    下面的转换符来自Java,但是在android中同样可用.(以下表格内容来自互联网.) 常见日期格式化转换符 转换符 说 明 示 例 %te  一个月中的某一天(1-31)  2 %tb  指定语言环 ...

  10. mvc.global.asax事件

    1.global.asax文件概述 global.asax这个文件包含全局应用程序事件的事件处理程序.它响应应用程序级别和会话级别事件的代码. 运行时, Global.asax 将被编译成一个动态生成 ...