小工具知识网

当前位置: 首页 > 行业知识 > 初尝python flask + vue3 axios 接口配置

行业知识

初尝python flask + vue3 axios 接口配置

2026-10-30 07:25:34 来源:互联网转载

首先使���pycharm创建python flask 项目,

在项目的app.py文件下,

//Python flask app.pyfrom flask import Flask, request, jsonifyapp = Flask(__name__)# 处理GET请求@app.route('/api/data', methods=['GET'])def get_data():    # 处理GET请求的逻辑    data = {'name': 'yangMing', 'age': 24}    return jsonify(data)# 处理POST请求@app.route('/api/data', methods=['POST'])def post_data():    # 获取POST请求的数据    data = request.json    # 处理POST请求的逻辑    # ...    # 返回响应    response_data = {'message': 'Data post successfully'}    return jsonify(response_data)if __name__ == '__main__':    app.run(host='127.0.0.1', port=5000)//host表示该地址只在本机调用,调用端口号5000来运行该服务器项目

之后,开启flask,服务器在端口5000运行

配置vue,引入axios、

这个地方其实可以使用相对路径的方法去获取数据。如果使用绝对路径,会产生axios的跨域问题,我们首先在vite.config.js里配置路径

跨域的调试和修改方法也可以参考之前的关于axios GET/POST 跨域及传参问题

//vite.config.jsimport { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'import dns from 'dns'import vue from '@vitejs/plugin-vue'dns.setDefaultResultOrder('verbatim')// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()],  resolve: {    alias: {      '@': fileURLToPath(new URL('./src', import.meta.url))    }  },  server:{    proxy:{      "/api":{        target:"http://127.0.0.1:5000/api/data",    //目标路径        changeOrigin:true,        rewrite: (path) => path.replace(/^\/api/, ''),      }    }  }})

main.js

//main.jsimport { createApp } from 'vue'import App from './App.vue'const app = createApp(App)app.mount('#app')

之后返回App.vue,渲染页面

import axios from "axios";const getEvent = function () {  axios    .get("/api")    .then((res) => {      console.log(res);    })    .catch(function (error) {      console.log(error);    });};let param = new URLSearchParams();param.append("name", "yangMing");param.append("age", 24);const postEvent = function () {  axios    .post("/api", JSON.stringify(param), {      headers: {        "Content-Type": "application/json",      },    })    .then((res) => {      console.log(res);    })    .catch(function (error) {      console.log(error);    });};  get  post

这里注意代码中的axios.post方法,相比较之前文章的方法。此处,我们虽然设置了传参param,但是如果直接提交,

 如果缺少请求头,则会报错 415

如果只存在请求头而不JSON解析数据后传参,则会报错400

因此,综上所述,在后端服务器python不写任何解析代码和简化HTTP请求代码的情况下,此处必须使用JSON传参,并必须携带请求头!

如果此处不使用JSON.stringify进行解析,则服务端flask就需要解析。前端和服务端如果都不解析,则会报错。Vue的axios包自带JSON解析功能,但仅限于获取数据,因此发送数据时,还是需要解析后发送的。

headers: {        "Content-Type": "application/json",      },

请求表头。

调试,

 运行完成。

===============================解决BUG=================================

 这里后台收不到post的参数传值,和之前遇到的情况一样。

百度看了一下,修改vue里定义param的代码,让let param = new FormData();

调试,后台接收参数正常。

let param = new FormData();  这里的定义出现了差异param.append("name", "yangMing");param.append("ageee", "24");const postEvent = function () {  axios    .post("/api", param, {      headers: {        "Content-Type": "application/json",      },    })    .then((res) => {      console.log(res);    })    .catch(function (error) {      console.log(error);    });};

后台python接收参数正常。

 

上一篇:服务器旁路闪黄灯怎么解决?

下一篇:wegame饥荒服务器怎么创建?