1、后端代码

1、项目结构

01-vue和api整合流程、CORS

2、项目代码

主url

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/v1/', include('api.urls'))
]

url

from django.urls import path, include
from api.view import course

urlpatterns = [
    path('course', course.CourseView.as_view())
]

view

from rest_framework.views import APIView
from rest_framework.response import Response


class CourseView(APIView):
    def get(self, request):
        ret = {
            'code':1000,
            'data':[
                {"id": 1, "title": "python全栈"},
                {"id": 2, "title": "Linux运维"},
                {"id": 3, "title": "金融分析"},
            ]
        }

        return Response(ret)

效果

01-vue和api整合流程、CORS

 2、vue前端代码

 0、生成vue项目

 详见: https://www.cnblogs.com/venicid/p/11560093.html#_label1

vue init webpack  # 初始化
npm run dev    # 启动

01-vue和api整合流程、CORS

 1、项目结构

01-vue和api整合流程、CORS      01-vue和api整合流程、CORS

01-vue和api整合流程、CORS

01-vue和api整合流程、CORS

 2、route-link

01-vue和api整合流程、CORS

01-vue和api整合流程、CORS

 3、路由: index.js 

01-vue和api整合流程、CORS

01-vue和api整合流程、CORS  01-vue和api整合流程、CORS

01-vue和api整合流程、CORS

 4、各个组件,数据双向绑定

01-vue和api整合流程、CORS

 01-vue和api整合流程、CORS

course:v-for

01-vue和api整合流程、CORS01-vue和api整合流程、CORS

 5、ajax请求:axios:aikeshesi

axios/jquery 只用来发ajax请求  aikeshesi

本质上都是 使用 XMLhttprequest对象

//axios   
npm install axios --save
第一步:在main.js中配置
第二步:使用axios发送请求

01-vue和api整合流程、CORS

 (1)安装axios

01-vue和api整合流程、CORS

 01-vue和api整合流程、CORS

 (2)在main.js设置  $axios=axios

 01-vue和api整合流程、CORS

(3) 发送axios请求
01-vue和api整合流程、CORS

 6、var that = this 

此时的this不是this了

01-vue和api整合流程、CORS

this补充

一般函数

01-vue和api整合流程、CORS

自执行函数

01-vue和api整合流程、CORS

题目

01-vue和api整合流程、CORS01-vue和api整合流程、CORS01-vue和api整合流程、CORS

 6、代码Course.vue

01-vue和api整合流程、CORS

<template>
    <div>
        <h1>{{ msg }}</h1>
        <ul v-for="row in courseList">
            <li>{{ row.title }}</li>
        </ul>
    </div>
</template>

<script>
export default {
    name:"course",
    data(){
        return {
            msg:"课程列表",
            courseList:[]
        }
    },
    mounted:function(){
        // vue页面刚加载时自动执行
        this.initCourse()
    },
    methods:{
        initCourse:function(){
            // 通过ajax向接口发送请求,并获取课程列表
            // jquery/axios

            // npm install axios --save
            //第一步:在main.js中配置
            //第二步:使用axios发送请求
            
            var that = this
            
            this.$axios.request({
                //参数
                url:"http://127.0.0.1:8001/api/v1/course",
                method:"GET"

            }).then(function(ret){
                //ajax请求发送成功后,获取响应的内容
                console.log(ret)
                if(ret.data.code == 1000){
                    that.courseList = ret.data.data
                }else{
                    alert("获取数据失败")
                }

            }).catch(function(){
                //ajax请求失败后,获取响应的内容
            })
        }
    }
}
</script>

<style  scoped>

</style>

 3、CORS跨域实现简答请求

01-vue和api整合流程、CORS

1、问题描述

浏览器的同源策略:域名,协议,端口相同.

https://www.cnblogs.com/venicid/p/9473277.html

vue监听8080

django监听8001

端口不同也会跨域

 01-vue和api整合流程、CORS

随着技术的发展,现在的浏览器可以支持主动设置从而允许跨域请求,即:跨域资源共享(CORS,Cross-Origin Resource Sharing),其本质是设置响应头,使得浏览器允许跨域请求。

01-vue和api整合流程、CORS

 

 

2、参考blog

wupeiqi :  https://www.cnblogs.com/wupeiqi/article/5703697.html

01-vue和api整合流程、CORS

3、添加响应头

中间件,响应的时候加个响应头

01-vue和api整合流程、CORS

 01-vue和api整合流程、CORS01-vue和api整合流程、CORS

01-vue和api整合流程、CORS

 

01-vue和api整合流程、CORS

4、代码cors

from django.middleware.clickjacking import XFrameOptionsMiddleware

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

    def __call__(self, request):
        response = None
        if hasattr(self, 'process_request'):
            response = self.process_request(request)
        response = response or 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['XXXXX'] = 8888

        # 1.允许你的域名来获取我的数据
        # response['Access-Control-Allow-Origin'] = "http://localhost:8080"
        response['Access-Control-Allow-Origin'] = "*"

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

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

        return response

 效果图

01-vue和api整合流程、CORS

 01-vue和api整合流程、CORS

 

3、总结与作业

1、作业

 01-vue和api整合流程、CORS

2、总结

01-vue和api整合流程、CORS

 01-vue和api整合流程、CORS

相关文章:

  • 2022-01-14
  • 2022-01-19
  • 2021-10-03
  • 2022-12-23
  • 2021-06-02
  • 2021-06-17
  • 2021-10-23
猜你喜欢
  • 2021-11-26
  • 2021-09-13
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2021-11-18
  • 2021-07-16
相关资源
相似解决方案