Skip to content

【周末】前端开发实战

前端开发实战

直播前准备

专题课 阶段 章节 录播地址
前端开发-HTML/CSS/JavaScript L1 Web 讲解 录播地址
前端开发-HTML/CSS/JavaScript L1 HTML 讲解
前端开发-HTML/CSS/JavaScript L1 CSS 讲解

课程目标

  • 了解常见 HTML 标签及属性
  • 了解常用 CSS 属性
  • 了解常用 JavaScript 语法
  • 了解 jQuery 常见用法

知识点总览

点击查看:前端开发基础知识点梳理

需求说明

  • 开发 Web 版学生管理系统的前端页面,包含首页、添加学生页面和修改学生页面
  • 提供学生列表,添加,修改,删除功能的相关接口

实战思路

uml diagram

分析接口

学生信息列表接口
  • 请求地址: /list
  • 请求方式:GET
  • 响应数据:JSON
[
  {
    "age": 24,
    "gender": "male",
    "name": "Tony",
    "sid": 1
  },
  {
    "age": 26,
    "gender": "female",
    "name": "Alice",
    "sid": 2
  },
  ...
]

响应参数说明

参数 类型 说明
sid int 学生 ID
name string 姓名
age int 年龄
gender string 性别
添加学生信息接口
  • 请求地址: /add
  • 请求方式: POST
  • 请求体参数:表单格式

请求参数说明

参数 类型 说明
name string 姓名
age int 年龄
gender string 性别
  • 返回数据:首页路由
修改学生信息接口
  • 请求地址: /change/<sid>
参数 类型 说明
sid int 学生 ID
  • 请求方式: POST
  • 请求体参数:表单格式

请求参数说明

参数 类型 说明
name string 姓名
age int 年龄
gender string 性别
  • 返回数据:首页路由
获取修改学生回显信息接口
  • 请求地址: /changeData/<sid>
参数 类型 说明
sid int 学生 ID
  • 请求方式: GET
  • 返回数据: JSON
{
  "sid": 1,
  "name": "Tony",
  "age": 24,
  "gender": "male"
}

响应参数说明

参数 类型 说明
sid int 学生 ID
name string 姓名
age int 年龄
gender string 性别
删除学生信息接口
  • 请求地址: /delete/<sid>
参数 类型 说明
sid int 学生 ID
  • 请求方式:GET
  • 返回数据:首页路由

页面开发

前端页面开发推荐工具:vscode

首页列表页面

搭建首页框架

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>学生管理系统</h1>
    </div>
    <!-- 功能条 -->
    <div class="op">
      <div class="left">
        <a href="/add">添加学生</a>
      </div>
      <div class="right">预留功能区域</div>
    </div>
    <!-- 主体内容 -->
    <div class="content">
      <table class="data">

      </table>
    </div>
  </div>
</body>
</html>
<script type="text/javascript"></script>

完成首页布局

<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>

  <style>
    .main {
      width: 1200px;
      height: 800px;
      margin: 0 auto;
    }
    .title{
      color: red;
      text-align: center;
    }
    .op {
      height: 50px;
      display: flex;
      justify-content: space-between;
      line-height: 50px;
      padding: 0 30px;
    }
    .op .left a {
      text-decoration: none;
    }
  </style>
</head>

完成表格编写

<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>学生管理系统</h1>
    </div>
    <!-- 功能条 -->
    <div class="op">
      <div class="left">
        <a href="/add">添加学生</a>
      </div>
      <div class="right">预留功能区域</div>
    </div>
    <!-- 主体内容 -->
    <div class="content">
      <table class="data">
        <tr>
          <th>编号</th>
          <th>姓名</th>
          <th>年龄</th>
          <th>性别</th>
          <th>操作</th>
        </tr>
        <tr>
          <td>1</td>
          <td>Tom</td>
          <td>28</td>
          <td>male</td>
          <td>修改 | 删除</td>
        </tr>
        <tr>
          <td>2</td>
          <td>Lily</td>
          <td>18</td>
          <td>female</td>
          <td>修改 | 删除</td>
        </tr>
      </table>
    </div>
  </div>
</body>
</html>

完成表格布局

  <style>
    .content {
      height: 500px;
      margin-top: 20px;
    }
    .data {
      width: 1200px;
      text-align: center;
      border-collapse: collapse;
    }
    tr, th, td {
      border: 1px solid #000;
    }
  </style>
</head>

向学生列表接口发起请求,并通过字符串拼接完成表格 html 的拼接和设置。

<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>
  <script src="../static/jquery-1.9.js"></script>
  <script>
    // 向学生列表接口发起一个请求,获取全部学生数据
    $.get("http://127.0.0.1:5050/list", function(data){
      console.log(data)
      // 拼接表格展示数据
      var html_str = ""
      // 表头
      html_str += "<tr>";
      html_str += "    <th>编号</th>";
      html_str += "    <th>姓名</th>";
      html_str += "    <th>年龄</th>";
      html_str += "    <th>性别</th>";
      html_str += "    <th>操作</th>";
      html_str += "</tr>";
      // 循环取出每行数据,拼接到 html_str 中
      for(var i=0; i<data.length; i++){
        // 通过索引取出每次循环的学生信息,是对象形式
        stu = data[i]
        // 把取出的学生对象拼接到 html_str 中
        html_str += "<tr>";
        html_str += "  <td>1</td>";
        html_str += "  <td>Tom</td>";
        html_str += "  <td>28</td>";
        html_str += "  <td>male</td>";
        html_str += "  <td>修改 | 删除</td>";
        html_str += "</tr>";
      }
      // 把拼接好的 html_str 设置到 class 属性为 data 的表格元素中
      $(".data").html(html_str);
    })
 </script>
</head>

从接口获取的真实数据。

<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>
  <script src="../static/jquery-1.9.js"></script>
  <script>
    // 向学生列表接口发起一个请求,获取全部学生数据
    $.get("http://127.0.0.1:5050/list", function(data){
      console.log(data)
      // 拼接表格展示数据
      var html_str = ""
      // 表头
      html_str += "<tr>";
      html_str += "    <th>编号</th>";
      html_str += "    <th>姓名</th>";
      html_str += "    <th>年龄</th>";
      html_str += "    <th>性别</th>";
      html_str += "    <th>操作</th>";
      html_str += "</tr>";
      // 循环取出每行数据,拼接到 html_str 中
      for(var i=0; i<data.length; i++){
        // 通过索引取出每次循环的学生信息,是对象形式
        var stu = data[i]
        // 获取学生 id
        var stu_id = stu.sid
        // 把取出的学生对象拼接到 html_str 中
        html_str += "<tr>";
        html_str += "  <td>" + stu_id + "</td>";
        html_str += "  <td>" + stu.name + "</td>";
        html_str += "  <td>" + stu.age + "</td>";
        html_str += "  <td>" + stu.gender + "</td>";
        html_str += "  <td><a href='/change/" + stu_id + "'>修改</a> | <a href='/delete/" + stu_id + "'>删除</a></td>";
        html_str += "</tr>";
      }
      // 把拼接好的 html_str 设置到 class 属性为 data 的表格元素中
      $(".data").html(html_str);
    })
 </script>
</head>

设置 js 脚本在页面加载完毕后执行。

<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>

  <style>

  </style>
  <script src="../static/jquery-1.9.js"></script>
  <script>
    // 等页面加载完毕之后再执行脚本
    $(function(){
        // 向学生列表接口发起一个请求,获取全部学生数据
        $.get("http://127.0.0.1:5050/list", function(data){
            console.log(data)
            // 拼接表格展示数据
            var html_str = ""
            // 表头
            html_str += "<tr>";
            html_str += "    <th>编号</th>";
            html_str += "    <th>姓名</th>";
            html_str += "    <th>年龄</th>";
            html_str += "    <th>性别</th>";
            html_str += "    <th>操作</th>";
            html_str += "</tr>";
            // 循环取出每行数据,拼接到 html_str 中
            for(var i=0; i<data.length; i++){
                // 通过索引取出每次循环的学生信息,是对象形式
                var stu = data[i]
                // 获取学生 id
                var stu_id = stu.sid
                // 把取出的学生对象拼接到 html_str 中
                html_str += "<tr>";
                html_str += "  <td>" + stu_id + "</td>";
                html_str += "  <td>" + stu.name + "</td>";
                html_str += "  <td>" + stu.age + "</td>";
                html_str += "  <td>" + stu.gender + "</td>";
                html_str += "  <td><a href='/change/" + stu_id + "'>修改</a> | <a href='/delete/" + stu_id + "'>删除</a></td>";
                html_str += "</tr>";
            }
            // 把拼接好的 html_str 设置到 class 属性为 data 的表格元素中
            $(".data").html(html_str);
        });
    });
 </script>
</head>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8"/>
  <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
  <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
  <title>学生管理系统</title>

  <style>
    .main {
      /* 设置 class 属性为 main 的元素 */
      width: 1200px;
      height: 800px;
      margin: 0 auto;
    }
    .title{
      /* 设置页面标题,class 属性为 title 元素下 h1 标签 */
      color: red;
      text-align: center;
    }
    .op {
      /* 设置功能条 */
      height: 50px;
      display: flex;
      justify-content: space-between;
      line-height: 50px;
      padding: 0 30px;
    }
    .op .left a {
      text-decoration: none;
    }
    .content {
      height: 500px;
      margin-top: 20px;
    }
    .data {
      width: 1200px;
      text-align: center;
      border-collapse: collapse;
    }
    tr, th, td {
      /* 设置表格边框 */
      border: 1px solid #000;
    }
  </style>
  <script src="../static/jquery-1.9.js"></script>
  <script>
    // 等页面加载完毕之后再执行脚本
    $(function(){
        // 向学生列表接口发起一个请求,获取全部学生数据
        $.get("http://127.0.0.1:5050/list", function(data){
            console.log(data)
            // 拼接表格展示数据
            var html_str = ""
            // 表头
            html_str += "<tr>";
            html_str += "    <th>编号</th>";
            html_str += "    <th>姓名</th>";
            html_str += "    <th>年龄</th>";
            html_str += "    <th>性别</th>";
            html_str += "    <th>操作</th>";
            html_str += "</tr>";
            // 循环取出每行数据,拼接到 html_str 中
            for(var i=0; i<data.length; i++){
                // 通过索引取出每次循环的学生信息,是对象形式
                var stu = data[i]
                // 获取学生 id
                var stu_id = stu.sid
                // 把取出的学生对象拼接到 html_str 中
                html_str += "<tr>";
                html_str += "  <td>" + stu_id + "</td>";
                html_str += "  <td>" + stu.name + "</td>";
                html_str += "  <td>" + stu.age + "</td>";
                html_str += "  <td>" + stu.gender + "</td>";
                html_str += "  <td><a href='/change/" + stu_id + "'>修改</a> | <a href='/delete/" + stu_id + "'>删除</a></td>";
                html_str += "</tr>";
            }
            // 把拼接好的 html_str 设置到 class 属性为 data 的表格元素中
            $(".data").html(html_str);
        });
    });
 </script>
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>学生管理系统</h1>
    </div>
    <!-- 功能条 -->
    <div class="op">
      <div class="left">
        <a href="/add">添加学生</a>
      </div>
      <div class="right">预留功能区域</div>
    </div>
    <!-- 主体内容 -->
    <div class="content">
      <table class="data">

      </table>
    </div>
  </div>
</body>
</html>
添加页面

因为主框架与标题的设置与主页一致,所以可以把公用的的 css 样式单独创建 main.css 文件,放到 static 目录中,直接在其他页面引用即可。

.main {
  /* 设置 class 属性为 main 的元素 */
  width: 1200px;
  height: 800px;
  margin: 0 auto;
}
.title{
  /* 设置页面标题,class 属性为 title 元素下 h1 标签 */
  color: red;
  text-align: center;
  border: 1px solid #000;
}

完成 css 样式的引入。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>添加学生</h1>
    </div>
  </div>
</body>
</html>

完成表单的添加,和表单格式请求的提交。

<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>添加学生</h1>
    </div>
    <div class="content">
      <form action="/add" method="post">
           <div>姓名: <input type="text" name="name" id="name"></div>
           <div>年龄: <input type="text" name="age" id="age"></div>
           <div>性别: <input type="text" name="gender" id="gender"></div>
           <div></div><input type="reset" value="重置">   <input type="submit" value="添加"></div>
      </form>
   </div>
  </div>
</body>

设置表单样式

<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>
      .content {
        text-align: center;
      }
      .content div {
        margin-top: 20px;
      }
    </style>
</head>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>
      .content {
        text-align: center;
      }
      .content div {
        margin-top: 20px;
      }
    </style>
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>添加学生</h1>
    </div>
    <!-- 导航按钮 -->
    <div class="op">
      <a href="/">首页</a>
    </div>
    <!-- 信息输入表单 -->
    <div class="content">
      <form action="/add" method="post">
           <div>姓名: <input type="text" name="name" id="name"></div>
           <div>年龄: <input type="text" name="age" id="age"></div>
           <div>性别: <input type="text" name="gender" id="gender"></div>
           <div><input type="reset" value="重置">   <input type="submit" value="添加"></div>
      </form>
   </div>
  </div>
</body>
</html>
修改页面

修改页面与添加页面的元素基本一致,可以复制内容到 change.html,然后修改标题和按钮文案。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>
      .content {
        text-align: center;
      }
      .content div {
        margin-top: 20px;
      }
    </style>
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>修改学生信息</h1>
    </div>
    <div class="op">
      <a href="/">首页</a>
    </div>
    <!-- 信息输入表单 -->
    <div class="content">
      <form action="/add" method="post">
           <div>姓名: <input type="text" name="name" id="name"></div>
           <div>年龄: <input type="text" name="age" id="age"></div>
           <div>性别: <input type="text" name="gender" id="gender"></div>
           <div><input type="reset" value="重置">   <input type="submit" value="修改"></div>
      </form>
   </div>
  </div>
</body>
</html>

修改表单请求地址为修改接口。

<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>
      .content {
        text-align: center;
      }
      .content div {
        margin-top: 20px;
      }
    </style>
    <script src="../static/jquery-1.9.js"></script>
    <script>
        // 文档加载完毕后执行脚本
        $(function(){
            // 从 url 中获取携带的 sid
            var doc_url = location.href
            var index = doc_url.lastIndexOf("/") + 1
            var sid = doc_url.substring(index)
            // 设置 form 表单提交地址
            $("form").prop({action: "/change/" + sid})
        })
    </script>
</head>

完成数据回显。

<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>

    </style>
    <script src="../static/jquery-1.9.js"></script>
    <script>
        // 文档加载完毕后执行脚本
        $(function(){
            // 查询 sid 对应的学生信息
            var doc_url = location.href;
            var index = doc_url.lastIndexOf("/") + 1;
            var sid = doc_url.substring(index);
            // 设置 form 表单提交地址
            $("form").prop({action: "/change/" + sid});
            // 获取回显数据
            $.get("/changeData/" + sid, function(data){
                console.log(data);
                $("#name").val(data.name);
                $("#age").val(data.age);
                $("#gender").val(data.gender);
            });
        })
    </script>
</head>

完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>学生管理系统</title>
    <link rel="stylesheet" href="../static/main.css">
    <style>
      .content {
        text-align: center;
      }
      .content div {
        margin-top: 20px;
      }
    </style>
    <script src="../static/jquery-1.9.js"></script>
    <script>
        // 文档加载完毕后执行脚本
        $(function(){
            // 查询 sid 对应的学生信息
            var doc_url = location.href;
            var index = doc_url.lastIndexOf("/") + 1;
            var sid = doc_url.substring(index);
            // 设置 form 表单提交地址
            $("form").prop({action: "/change/" + sid});
            // 获取回显数据
            $.get("/changeData/" + sid, function(data){
                console.log(data);
                $("#name").val(data.name);
                $("#age").val(data.age);
                $("#gender").val(data.gender);
            });
        })
    </script>
</head>
<body>
  <div class="main">
    <!-- 标题 -->
    <div class="title">
      <h1>修改学生信息</h1>
    </div>
    <div class="op">
      <a href="/">首页</a>
    </div>
    <!-- 信息输入表单 -->
    <div class="content">
      <form action="/add" method="post">
           <div>姓名: <input type="text" name="name" id="name"></div>
           <div>年龄: <input type="text" name="age" id="age"></div>
           <div>性别: <input type="text" name="gender" id="gender"></div>
           <div><input type="reset" value="重置">   <input type="submit" value="修改"></div>
      </form>
   </div>
  </div>
</body>
</html>

总结

  • 掌握常用的后端框架的基本安装与配置。
  • 掌握路由的定义与使用。
  • 掌握接口请求数据。
  • 掌握接口响应信息。
  • 掌握前后端分离下,如何解决跨域问题。