聊一聊跨域,Vue向Django请求数据的一些问题

1.做前后端分离

 

前端使用Vue程序,后端使用Django配合rest-framework。

那么前端Vue通过API接口拿到数据会出现跨域的问题,JSONP只是在get中会用到的,所以这里使用cors来解决一下。

一个Vue程序通过ajax或者axios发送一个请求过来,这里需要做一个允许跨域请求资源的处理。

这里写一个中间件一劳永逸。

from django.middleware.common import CommonMiddleware
#拿到这个中间件,这个中间件继承
MiddlewareMixin
class CORSMiddleware(CommonMiddleware): 
  def process_response(self,request,response):

    #添加响应头 #允许什么域名来获取我的数据
    response["Access-Control-Allow-Origin"]="*"

    #允许你携带Content-Type这个请求头
    response["Access-Control-Allow-Headers"]="Content-Type"

    #允许你发送delete请求,Put请求
    response['Access-Control-Allow-Methods'] = "DELETE,PUT"

    return response

也可以直接把middlewareMixin拿过来。

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

    def __call__(self, request):
        response = None
        if hasattr(self, 'process_request'):
            response = self.process_request(request)
        if not response:
            response = self.get_response(request)
        if hasattr(self, 'process_response'):
            response = self.process_response(request, response)
        return response

class CORSMiddleware(MiddlewareMixin):

    def process_response(self,request,response):
        # 添加响应头

        # 允许你的域名来获取我的数据
        response['Access-Control-Allow-Origin'] = "*"

        # 允许你携带Content-Type请求头
        response['Access-Control-Allow-Headers'] = "Content-Type"

        # 允许你发送DELETE,PUT
        response['Access-Control-Allow-Methods'] = "DELETE,PUT"

        return response

这里对在中间件就对响应信息做一个cors跨域请求。

对了记得在settings.py中加上这个中间件。

 这个中间件的原理就是浏览器看到了这个请求头,做了处理

就算你在这加一个xxx=888的话,

别人通过跨域在这里也会看到这个信息。

 cors的本质就是设置响应头

 

-跨域:
  -为什么会有跨域?
    浏览器有一个同源策略的限制。(会检验数据是否从同源拿过来的)
    绕过同源策略就可以跨域
目前2种的跨域方式:
-jsonp
    同源策略阻止ajax请求,不阻止具有src属性的标签
    动态创建标签
    <script src="xxx"></script>

-cors
    设置响应头达到不阻止的的目的
    

爬虫因为没有使用浏览器,所以没有跨域问题,爬虫只是逼真的去模拟浏览器

 

转载于:https://www.cnblogs.com/geogre123/p/9786942.html

本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。 这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。 平时不明白的知识点,放在项目里去理解就恍然大悟了。   一、融汇贯通 本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用PythonDjango框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。   二、贴近实战 本系列课程为练手项目实战:学生管理系统v4.0的开发,项目包含了如下几个内容:项目的总体介绍、基本功能的演示、Vuejs的初始化、Element UI的使用、在Django中实现针对数据的增删改查的接口、在Vuejs中实现前端增删改查的调用、实现文件的上传、实现表格的分页、实现导出数据到Excel、实现通过Excel导入数据、实现针对表格的批量化操作等等,所有的功能都通过演示完成、贴近了实战   三、课程亮点 在本案例中,最大的亮点在于前后端做了分离,真正理解前后端的各自承担的工作。前端如何和后端交互   适合人群: 1、有Python语言基础、web前端基础,想要深入学习Python Web框架的朋友; 2、有Django基础,但是想学习企业级项目实战的朋友; 3、有MySQL数据库基础的朋友  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值