IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 基于django(djangorestframework)---vue的跨域问题 -> 正文阅读

[JavaScript知识库]基于django(djangorestframework)---vue的跨域问题

0.跨域介绍

第一点:先介绍同源策略,只有同时满足下面三个条件,缺一不可,缺了就不是同源

协议相同/域名相同/端口相同---同源

# 协议不同--不同源
http://www.baidu.com
https://www.baidu.com
# 域名不同---不同源
https://www.7788.com:8787
https://www.alg.com:8787
# 端口号不同---不同源
https://www.7788.com:8787
https://www.7788.com:9999
# 协议/域名/端口相同---同源
https://www.7788.com:8787
https://www.7788.com:8787

看到这,你可能会想,拿我当太君吗?,这不是同一个网站吗... 没错也可以这样认为,只有同一个url才是同源。

第二点:跨域

这样一来不是坏事了嘛,我自己跟自己玩什么,所以才要跨域,我解释一下跨域的意思

前提:A网站向B网站发起请求

a. 如果B网站,给A网站,发来的请求头里面,添加一个,headers={"Access-Control-Allow-Origin":'A网站的url'},这就是跨域了。

b. 只要添加以后,A从B获得的数据,可以正常的,显示在自己的网站上,

c.如果B没有给A添加这么一个东西,那A可以正常获取数据(正常请求,以便获得数据),但是在响应回去的路上,会被浏览器拦截,数据无法展示在A的网站上,浏览器拦截的理由是:同源机制

ps:添加这个头,只是简单的请求,

简单请求:

1.只有以下三种请求:
HEAD,GET,POST
2.请求头里面只能是:
Accept
Accept-Language
Content-Language
Content-Type
3、Content-Type的值仅限于下列三者之一
text/plain
multipart/form-data 文件上传时要使用的数据类型
application/x-www-form-urlencoded 默认的格式

复杂请求:

如果是复杂请求,跨域的时候,浏览器会自动发一个options,确保web服务器支持复杂请求跨域访问。这也就是为什么,有的请求你可以看到会有两次请求记录

1.前端Vue初始化:

删除HelloWord组件的相关内容

2.前端跨域配置:

1.在src目录下创建settings.js站点开发配置文件:

export default {
  host:"http://127.0.0.1:8000",
}

2.在main.js中引入:

import settings from "./settings"
Vue.prototype.$settings = settings;  

3.前端安装axios:

npm i axios -S --registry https://registry.npm.taobao.org

4.在main.js中引用 axios插件:

import axios from 'axios'; // 从node_modules目录中导入包
// 客户端配置是否允许ajax发送请求时附带cookie,false表示不允许
axios.defaults.withCredentials = false;

Vue.prototype.$axios = axios; // 把对象挂载vue中

5.在config/index.js中配置域名

// Various Dev Server settings
    host: '127.0.0.1', // can be overwritten by process.env.HOST

5.如果不想要路由后面带#的话,在router/index.js里面,配置一下

// 配置mode: 'history',

export default new Router({
// 配置mode: 'history',
  mode: 'history',
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home
    }
  ]
})

3.后端跨域配置:

1.在settings.py文件中添加,允许访问的路径

ALLOWED_HOSTS = [
    '127.0.0.1'
]

2.安装跨域模块

pip3 install django-cors-headers -i https://pypi.douban.com/simple/

3.注册app

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

4.中间件设置【必须写在第一个位置】

MIDDLEWARE = [
    'corsheaders.middleware.CorsMiddleware', #放在中间件的最上面,就是给响应头加上了一个响应头跨域
    ...
]

5.需要添加白名单,确定一下哪些客户端可以跨域。

# CORS组的配置信息
CORS_ORIGIN_WHITELIST = (
    #'127.0.0.1:8080', #如果这样写不行的话,就加上协议(http://127.0.0.1:8080,因为不同的corsheaders版本可能有不同的要求)
    'http://127.0.0.1:8080',
)

CORS_ALLOW_CREDENTIALS = False  # 是否允许ajax跨域请求时携带cookie,False表示不用,我们后面也用不到cookie,所以关掉它就可以了,以防有人通过cookie来搞我们的网站

4.前端发送axios向后端要数据

<template>
  <div>
    <ul>
      <li v-for="(values,index) in student_list" :key="values.id">{{ values.name }}</li>
    </ul>
  </div>
</template>

<script>
export default {
  name: "Me",
  data() {
    return {
      student_list: []
    }
  }, methods: {
    get_student_data() {
      this.$axios.get(`${this.$settings.host}/stu/student/`)
        .then((res) => {
          this.student_list = res.data
        })
        .catch((error) => {

        })
    }
  },
  created() {
    this.get_student_data();
  }
}
</script>

<style scoped>

</style>

5.运行效果

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-01-29 22:59:45  更:2022-01-29 23:01:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 13:47:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码