vue与drf前后端交互

后台处理跨域

'''
https://github.com/ottoyiu/django-cors-headers/

安装django-cors-headers模块

在settings.py中配置
# 注册app
INSTALLED_APPS = [
	# 自定义app
	
	# 第三方app
	'corsheaders'
]
# 添加中间件
MIDDLEWARE = [
	# 放最上面
	'corsheaders.middleware.CorsMiddleware',
]


# 允许跨域源,设为False,通过白名单允许部分跨域源
CORS_ORIGIN_ALLOW_ALL = False
# 配置指定跨域域名
CORS_ORIGIN_WHITELIST = [
	'http://www.luffy.cn:8080'
]

# 允许ajax请求携带cookie
CORS_ALLOW_CREDENTIALS = True


# 注:前台请求头携带参数,中间件拒绝Access-Control-Allow-Headers错误,中间件要设置 default_headers
from corsheaders import defaults
在 default_headers 中添加 '前端ajax请求头里面的字段名'
'''

前台处理ajax与后台测试


# 1.安装axios
cnpm install axios --save

# 2.src/main.js配置
//配置ajax请求:axios
import axios from 'axios'
Vue.prototype.$axios = axios;  // 把对象挂载vue中
//允许ajax发送请求时附带cookie
axios.defaults.withCredentials = true;
'''做完上面的步骤之后,在前端的任何地方都可以通过this.$axios()取它'''
# 3、在后台写一个接口测试一下:
路由: path('test/', views.TestAPIView.as_view())
视图:
from rest_framework.views import APIView
from rest_framework.response import Response
class TestAPIView(APIView):
    def get(self, request, *args, **kwargs):
        print(request)
        return Response({
            "status": 0,
            "msg": "ok",
            "result": {
                "info": "test数据"
            },
        })
# 4、然后我们要在前端的代码中测试接口
前端页面加载的是Home.vue,里面导入了三个组件,我们选择Header.vue组件来测试,我们在这个组件的script的create中输入window.alert(123),create()意思是当该组件创建完成后要做的事,测试发现只要加载完毕就会弹窗123.所以我们前后台的跨域请求测试就写在这里。

# axios发生ajax请求
$axios({
	utl: 'http://api.example.com/test',  // 请求接口
	headers: {},  // 携带请求头
	method: 'post',  // 还可以为post
    data: {},  // get通过param: {} 提交数据
})
# 测试代码
created() {
            this.this_nav = localStorage.this_nav;
            //请求后台接口
            this.$axios({
                url: 'http://api.luffy.cn:8000/home/test/',
                methods: 'get'
            }).then(response => {
                window.console.log(response.data)
            })
        },
由于前面已经对后台做了配置,这时访问就会正常打印内容。

上面的created()还可以简写,具体向后台发请求如下:

<template>
    <div class="footer">
        <ul>
        <!-- 3、用for循环,渲染到页面,绑定一个key作为唯一标识 -->
            <li v-for="nav in nav_list" :key="nav.name">
                <router-link :to="nav.link">{{ nav.name }}</router-link>
            </li>
        </ul>
        <p>Copyright © luffycity.com版权所有 | 京ICP备17072161号-1</p>
    </div>
</template>
<script>
export default {
        name: "Footer",
        data(){
            return {
            //1、先在data里定义一个空的列表
                nav_list: []
            }
        },
		created(){
		//2、向后台接口发请求,拿到返回的数据,赋值给定义的空列表
            this.$axios.get('http://api.luffy.cn:8000/home/test/').then(response =>{
                this.nav_list = response.data
            })
        }
</script>
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本季课程把开发知识拆解到项目里,让你在项目情境里学知识。这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。平时不明白的知识点,放在项目里去理解就恍然大悟了。  一、融汇贯通本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django REST Framework框架实现了数据访问的接口,前端通过Axios访问后端接口获得数据。在学习完本章节后,真正理解前后端的各自承担的工作。 二、贴近实战本课程为学生信息管理系统课程:Vue3 + Vite + ElementPlus + Django REST Framework项目实战 本季课程主学生信息管理系统V5.0,内容包含:Django REST framework安装和项目初始化、数据的序列化、ViewSet视图集、DefaultRouter路由类、django-filter实现过滤、rest framework实现查找、rest framework实现分页、npm的使用、使用Vite构建vue3项目、Package.json解析、ElementPlus安装和应用、vue-router实现路由、使用Vuex的store对象、后台管理系统主界面的布局、axios组件的安装和请求、axios请求的模块化、请求拦截器和响应拦截器、使用el-select实现联级下拉、使用cascader实现联级选择、vue表单的验证、实现学生信息的添加、修改和删除、实现文件的上传等等功能 本案例完整的演示了项目实现过程,虽然不复杂,但涉及的内容非常多,特别是前后端交互的时候,有诸多的坑等着你去踩,好在王老师全程代码呈现,带着大家一起填坑,大大提高学习效率的同时,也培养了大家良好的代码习惯,希望大家一起跟着王进老师学习Python开发。三、后续课程预告:Vue和Django REST Framework实现JWT登录认证 
本门课程重实战,将基础知识拆解到项目里,让你在项目情境里学知识。 这样的学习方式能让你保持兴趣、充满动力,时刻知道学的东西能用在哪、能怎么用。 平时不明白的知识点,放在项目里去理解就恍然大悟了。   一、融汇贯通 本视频采用了前后端分离的开发模式,前端使用Vue.js+Element UI实现了Web页面的呈现,后端使用Python 的Django框架实现了数据访问的接口,前端通过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、付费专栏及课程。

余额充值