01-vue和api整合流程、CORS
1、后端代码
1、项目结构

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)
效果

2、vue前端代码
0、生成vue项目
详见: https://www.cnblogs.com/venicid/p/11560093.html#_label1
vue init webpack # 初始化
npm run dev # 启动

1、项目结构



2、route-link


3、路由: index.js



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


course:v-for


5、ajax请求:axios:aikeshesi
axios/jquery 只用来发ajax请求 aikeshesi
本质上都是 使用 XMLhttprequest对象
//axios npm install axios --save 第一步:在main.js中配置 第二步:使用axios发送请求

(1)安装axios


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

(3) 发送axios请求
6、var that = this
此时的this不是this了

this补充
一般函数

自执行函数

题目



6、代码Course.vue

<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跨域实现简答请求

1、问题描述
浏览器的同源策略:域名,协议,端口相同.
https://www.cnblogs.com/venicid/p/9473277.html
vue监听8080
django监听8001
端口不同也会跨域

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

2、参考blog
wupeiqi : https://www.cnblogs.com/wupeiqi/article/5703697.html

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





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
效果图


3、总结与作业
1、作业

2、总结


浙公网安备 33010602011771号