第 3 课:前后端全栈联动核心 —— 接口规范 + AJAX + 跨域解决(打通前后端壁垒)

✅ 今日学习目标

✅ 掌握RESTful 接口规范 (企业级标准),统一前后端数据交互格式;✅ 吃透前端 AJAX 核心用法(原生 JS+Axios),实现前端主动请求后端接口;✅ 解决前后端联调最大痛点 ------跨域问题(CORS),掌握 2 种企业级解决方案;✅ 完成「前端登录页面 ↔ 后端登录接口」全链路联动,实现数据互通,看到完整全栈效果。

✅ 一、核心知识点精讲(全栈联动的核心,打通前后端的关键)

模块 1:RESTful 接口规范(前后端共识,必须遵守)

RESTful 是目前最主流的接口设计规范,定义了「请求方法、URL 路径、返回格式」的统一标准,让前后端开发无歧义,是团队协作的基础。

✅ 核心规范(项目必用,牢记)
  1. URL 路径规范 :用名词表示资源,不用动词,比如 /api/user(用户资源)、/api/goods(商品资源);
  2. 请求方法对应操作:GET(查询)、POST(新增)、PUT(修改)、DELETE(删除);
  3. 返回格式统一 :所有接口返回 JSON,包含code(状态码)、msg(提示信息)、data(数据);✅ 成功格式:{"code":200, "msg":"success", "data":{...}}✅ 失败格式:{"code":400, "msg":"参数错误", "data":null}
  4. 状态码规范:200(成功)、400(参数错误)、401(未登录)、403(无权限)、500(服务器错误)。
模块 2:前端请求后端 ------AJAX 核心用法(2 种方式,项目全覆盖)

AJAX:异步 JavaScript 和 XML,实现前端页面不刷新,就能向后端发送请求、获取数据,是前后端联动的核心技术。

✅ 方式 1:原生 JS 实现 AJAX(理解底层原理)

javascript

运行

复制代码
// 前端登录请求示例(POST请求,对接后端/api/login接口)
const login = () => {
    const xhr = new XMLHttpRequest();
    // 1. 配置请求方式、URL
    xhr.open("POST", "http://127.0.0.1:5000/api/login", true);
    // 2. 设置请求头(JSON格式必须加)
    xhr.setRequestHeader("Content-Type", "application/json");
    // 3. 发送请求(传递JSON数据)
    xhr.send(JSON.stringify({username: "admin", password: "123456"}));
    // 4. 接收响应
    xhr.onreadystatechange = () => {
        if (xhr.readyState === 4 && xhr.status === 200) {
            const res = JSON.parse(xhr.responseText);
            if (res.code === 200) {
                alert("登录成功!");
                console.log(res.data); // 打印后端返回的用户数据
            } else {
                alert(res.msg);
            }
        }
    }
}
✅ 方式 2:Axios 实现 AJAX(企业级首选,简洁高效)

Axios 是前端最主流的请求库,封装了原生 AJAX,支持 Promise、拦截器,代码更简洁,必学!

html

预览

复制代码
<!-- 1. 引入Axios(CDN方式,无需安装) -->
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    // 配置请求基准地址(统一前缀,简化URL)
    axios.defaults.baseURL = "http://127.0.0.1:5000";
    
    // 登录请求(POST)
    const login = async () => {
        try {
            const res = await axios.post("/api/login", {
                username: "admin",
                password: "123456"
            });
            if (res.data.code === 200) {
                alert("登录成功!");
                localStorage.setItem("user", JSON.stringify(res.data.data)); // 前端保存用户信息
            }
        } catch (err) {
            alert("请求失败:" + err.message);
        }
    }

    // 查询用户信息(GET)
    const getUserInfo = async () => {
        const res = await axios.get("/api/user/info");
        console.log(res.data.data);
    }
</script>
模块 3:跨域问题 ------ 前后端联调最大痛点(企业级解决方案)

❌ 跨域现象:前端运行在http://127.0.0.1:8080,后端运行在http://127.0.0.1:5000,前端请求后端时,浏览器报错「No Access-Control-Allow-Origin」;✅ 跨域本质:浏览器的「同源策略」限制 ------ 协议、域名、端口三者必须一致,否则拒绝请求。

✅ 解决方案 1:后端配置 CORS(最常用,推荐)

python

运行

复制代码
# Flask项目配置CORS(一行代码解决,安装flask-cors库)
from flask import Flask
from flask_cors import CORS  # 导入CORS库

app = Flask(__name__)
CORS(app)  # 全局允许跨域,所有前端域名均可请求

# 精准配置:仅允许指定前端域名跨域
# CORS(app, origins=["http://127.0.0.1:8080", "http://localhost:8080"])
✅ 解决方案 2:前端代理(Vue/React 项目常用)

在前端项目中配置代理,将后端请求转发到后端地址,避开浏览器同源策略限制(后续框架课重点讲解)。

✅ 二、今日核心实战(全栈联动里程碑,必做)

✅ 实战需求:完成「前端登录页面 ↔ 后端 Flask 接口」全链路联动
  1. 前端:用 HTML+CSS+JS+Axios 编写登录页面,包含用户名、密码输入框、登录按钮;
  2. 后端:用 Flask 实现登录接口,配置 CORS 允许跨域;
  3. 联动效果:前端输入账号密码,点击登录→请求后端接口→验证成功后,前端显示用户信息,失败则提示错误。
✅ 实战效果

✅ 前端页面不刷新,异步请求后端接口;✅ 跨域问题完美解决,请求正常响应;✅ 实现「输入→请求→验证→反馈」完整流程,打通前后端壁垒。

✅ 三、课后作业

📌 基础作业(必做)
  1. 基于 Axios 实现「用户注册、退出登录」前端请求,对接后端接口;
  2. 编写前端「用户信息展示页面」,请求后端 /api/user/info 接口,展示用户昵称、创建时间;
  3. 总结 RESTful 接口规范的 5 条核心规则,手写笔记。
📌 进阶作业(选做)

用 Vue 基础语法(插值表达式、事件绑定)重构前端页面,实现更优雅的前后端联动,提升页面交互体验。

✅ 明日预告

第 4 课:前端工程化进阶 ------Vue 核心入门 + 组件化开发,实现前端页面模块化、组件化,提升前端开发效率。

相关推荐
invicinble43 分钟前
对于后端要和linux打交道要掌握的点
linux·运维·python
BlockChain88843 分钟前
SpringBoot实战一:10分钟搭建企业级用户管理系统(20000字完整项目)
java·spring boot·后端
消失的旧时光-19431 小时前
第六课 · 6.1 从 JDBC 到 MyBatis:SQL 工程化是如何发生的?
java·sql·mybatis
喵手1 小时前
Python爬虫零基础入门【第三章:Requests 静态爬取入门·第4节】列表页→详情页:两段式采集(90%项目都这样)!
爬虫·python·python爬虫实战·python爬虫工程化实战·python爬虫零基础入门·requests静态爬取·两段式采集
zzZ··*1 小时前
自动登录上海大学校园
python·网络协议·selenium
weisian1511 小时前
进阶篇-4-数学篇-3--深度解析AI中的向量概念:从生活到代码,一文吃透核心逻辑
人工智能·python·生活·向量
写代码的【黑咖啡】1 小时前
Python中的Msgpack:高效二进制序列化库
开发语言·python
MistaCloud1 小时前
Pytorch进阶训练技巧(二)之梯度层面的优化策略
人工智能·pytorch·python·深度学习
Jaxson Lin1 小时前
Java编程进阶:线程基础与实现方式全解析
java·开发语言
夜喵YM1 小时前
基于 Spire.XLS.Free for Java 实现无水印 Excel 转 PDF
java·pdf·excel