Vscode+Pycharm+Vue.js+WEUI+django火锅(六)Vue调用Django的API

一.可选调用方式

调用API,可以使用vue-resource插件方式

--安装

npm install --save vue-resource

--引入

import VueResource from 'vue-resource'

Vue.use(VueResource)

--调用

this.$http.get('url')

.then (function(response){})

但是据说这个方式存在浏览器兼容性问题,所以还是使用axios 方式。

--安装
npm install axios --save

二.使用百度AI给一个示例

<template>

<div>

<input type="text" v-model="username" placeholder="Username" />

<input type="password" v-model="password" placeholder="Password" />

<button @click="login">Login</button>

</div>

</template>

<script>

import axios from 'axios';

export default {

data() {

return {

username: '',

password: ''

};

},

methods: {

login() {

axios.post('/api/login', {

username: this.username,

password: this.password

})

.then(response => {

// 登录成功的处理逻辑

console.log('Authentication successful', response);

})

.catch(error => {

// 登录失败的处理逻辑

console.error('Authentication failed', error);

});

}

}

};

</script>

三.一般的错误处理

错误1:使用双向绑定v-model时错误:

Cannot read properties of undefined (reading 'username')

TypeError: Cannot read properties of undefined (reading 'username')

检查输入性错误

错误2:Module not found: Error: Can't resolve 'axios' in webpack compiled with 1 error

这是因为axios没有安装成功导致。

PS C:\website\myproject> cnpm install --save axios

错误3:Cannot read properties of undefined (reading 'post')

TypeError: Cannot read properties of undefined (reading 'post')

原因是未在main.js中正确设置vue.prototype.http=axios导致

四.大大的错误:跨域错误

直接访问api是可以返回内容的,但是使用axios调用就出错。

返回错误信息:AxiosError: Network Error,在浏览器控制台中可以看到详细的错误信息:
Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource

典型的跨域错误。

解决方法安装django-cors-headers 并配置:
a .pip install django-cors-headers
b .应用'corsheaders',加入到INSTALLED_APPS
c .中间件 'corsheaders.middleware.CorsMiddleware' 加入MIDDLEWARE
d.黑白名单中CORS_ORIGIN_WHITELIST 添加域名。

结果安装时,嫌弃Django的版本太低,但是一升级就出新问题了,猪圈塌了,于是又重新降回老版本:

'WSGIRequest' object has no attribute 'get'

'WSGIRequest' object has no attribute 'session'

原因是新版本Django配置文件中用MIDDLEWARE_CLASSES,老版本用MIDDLEWARE,于是照猫画虎,两个都留着。

MIDDLEWARE_CLASSES = [

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

'corsheaders.middleware.CorsMiddleware',

'django.middleware.common.CommonMiddleware',

#'django.middleware.csrf.CsrfViewMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

MIDDLEWARE = [

'django.middleware.security.SecurityMiddleware',

'django.contrib.sessions.middleware.SessionMiddleware',

#'corsheaders.middleware.CorsMiddleware',

'django.middleware.common.CommonMiddleware',

#'django.middleware.csrf.CsrfViewMiddleware',

'django.contrib.auth.middleware.AuthenticationMiddleware',

'django.contrib.messages.middleware.MessageMiddleware',

'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

新问题解决了,但是跨域的问题还是没有解决。

最后只能通过返回时,指定Access-Control-Allow-origin ='*'的方式。

result = JsonResponse(jsondict)

result['Access-Control-Allow-origin'] = "*"

return result

原因肯定是django-cors-headers哪里没有设置好,先不管了,有路走就继续往前走,以后再来收拾。

相关推荐
我是伪码农8 分钟前
Vue 2.3
前端·javascript·vue.js
跳动的梦想家h1 小时前
环境配置 + AI 提效双管齐下
java·vue.js·spring
Mr Xu_2 小时前
Vue 3 中 watch 的使用详解:监听响应式数据变化的利器
前端·javascript·vue.js
一 乐3 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
科技D人生3 小时前
Vue.js 学习总结(20)—— Vue-Office 实战:word、pdf、excel、ppt 多种文档的在线预览
vue.js·word·vue-pdf·stylesheet·docx-preview·vue-office
vx1_Biye_Design3 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design3 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hedley(●'◡'●)3 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
qq5_8115175153 小时前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
百思可瑞教育3 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育