欢迎光临
我们一直在努力

20.Axios请求

案例一

编写了一个基于 Flask 框架的 Python 程序,搭建后端服务,利用 `flask_cors` 解决跨域问题。它提供 `/api/data` 接口,支持 GET 和 POST 请求,并配置了跨域及中文显示,可用于为 Vue 前端提供数据交互服务。

from flask import Flask, request, jsonify
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

# 关键配置:禁用ASCII编码
app.config['JSON_AS_ASCII'] = False  # 关闭自动转义中文[1]

students = []

@app.route('/api/data', methods=['GET', 'POST'])
def handle_students():
    if request.method == 'GET':
        return jsonify({
            "data": students,
            "message": "数据获取成功,你是大帅哥"  # 直接显示中文
        })
    elif request.method == 'POST':
        data = request.get_json()
        students.append(data)
        return jsonify({"code": 200, "message": "数据提交成功"})

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

vue程序


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生简易管理系统</title>
    <!-- 引入 vue.js -->
     <script src="../js/vue.js"></script>
     <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
</head>
<body>
    <!-- div id 为 app 挂载点 -->
     <div id="app">
        <h2>学生列表</h2>
        <ul v-if = "students.length">
            <li v-for="(student, index) in students" :key="index">
                <!-- Vue通过数据劫持实现响应式,当数据变化时,视图会自动更新。 -->
             姓名: {{ student.name }} - 年龄: {{ student.age }} 
            </li>
        </ul>

<!-- 数据提交表单 -->
<!-- 表单没有阻止默认的提交行为,导致同时执行了addStudent方法和传统表单提交,而传统提交因为没有正确的action或处理方式导致失败。解决方法是在@click事件中使用.prevent修饰符,或者在addStudent方法中阻止默认行为,并确保数据通过正确的方式发送。 -->
        <!-- <form @submit.prevent="addStudent"> -->
        <form>
            <!-- 姓名 -->
            <div>
                <label >姓名:</label>
                <input type="text" v-model="newStudent.name" >
            </div>
            <!-- 年龄 -->
            <div>
                <label >年龄:</label>
                <input type="text" v-model="newStudent.age" >
            </div>
            <button type="submit" @click.prevent="addStudent">提交</button>
        </form>
     </div>

     <!-- 使用 javascript 脚本 -->
      <script type="text/javascript">
        // 配置 Axios 实例
        const api = axios.create({
                baseURL: 'http://localhost:5000',
                timeout: 5000
        })

        new Vue({
            el:'#app',
            data(){
                return{
                    students:[
                        { name:'张三',age:18 },
                        { name:'李四',age:19 },
                        { name:'王五',age:20 }
                    ],
                    newStudent:{
                        name:'',
                        age:''
                    },
                    submitStatus: false,
                    submitSuccess: false,
                    submitMessage: ''
                }
            },
            created() {
                this.fetchStudents();
            },
            methods:{
                // 获取学生列表
                async fetchStudents(){
                    try{
                        // this.loading = true;
                        const response = await api.get('/api/data');
                        this.students = response.data.data;
                        // this.error = null;
                    }catch(err){
                        // this.error = `数据获取失败: ${err.message}`;
                        this.students = []; // 如果请求失败,清空学生列表
                    } finally{
                        // this.loading = false;
                    }
                },

                //  提交添加学生  
              async addStudent(){
                try{
                    const response = await api.post('/api/data',this.newStudent);
                    this.submitSuccess = true;
                    this.submitMessage = response.data.message;

                    // 清空表单
                    this.newStudent.name = '';
                    this.newStudent.age = '';

                    this.fetchStudents(); // 重新获取学生列表
                }catch(error){
                    this.submitSuccess = false;
                    console.log(error)
                } finally{
                    this.submitStatus = true;
                    setTimeout(()=>this.submitStatus = false,3000);
                    // this.fetchStudents(); // 重新获取学生列表
                }
              }     
            }
        })
      </script>
</body>
</html>
赞(0) 打赏
未经允许不得转载:留留工作室 » 20.Axios请求

评论 抢沙发

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册