python使用flask实现前后端分离通过前端修改数据库数据【全栈开发基础】

news2024/10/7 12:25:13

文章目录

    • 🚎前言:
    • 🛺工具
    • 🚓截图
      • 🚕数据库截图
      • 🚙前端截图
    • 🚘代码
      • 🚲增加
        • 🍕前端 HTML
        • 🍟后端 python
      • 🛴 删除
        • 🍕前端 HTML
        • 🍟后端 python
      • 🛵 编辑
        • 🍕前端 HTML
        • 🍟后端 python
      • 🛵 查看
        • 🍕前端 HTML
        • 🍟后端 python
    • 🥩 完整代码
      • 🥐前端 HTML
      • 🥨后端 python
    • 结语

🚎前言:

完整代码放到了最后,时间紧张的话直接拉到最后或点击目录【🥩 完整代码】看完整代码

相信看过自己前期的博文python使用flask模块和前端交互基础以及python模块pymysql对数据库进行增删改查的小伙伴已经有了一定基础,这里我们在来对flask、pymsql、前端三个部分通过flask做一个整合。使用python来作为我们的后端来实现前后端的分离。
既然是作为基础,那我们这里主要实现通过前端对我们后端数据库实现增删改查就OK 了。下面我们开始。

🛺工具

后端:python(flask,pymsql)、MySQL、navicat、VScode
前端:VScode、Google浏览器

🚓截图

🚕数据库截图

这里的截图的是navicat,里面的id做了主键自增
在这里插入图片描述

🚙前端截图

前端上样式没有去做过多的修饰,只是做一个大概样式,有兴趣的也可以自己去用CSS修改一下
在这里插入图片描述

可视化截图就截图这两张吧,接下来就是代码了

🚘代码

这里先提一下,这个是需要下载MySQL数据库的,再有一些MySQL数据库的增删改查的代码学习基础。要不然有的代码可能是看不明白的哈,特别是数据库那一块的。restful风格这里对于增删改查使用了不同的方式

🚲增加

增加数据库这里用的也是基本和其它常见后端所用的那种方式,使用了post请求方法,对于前端不是从URL请求上携带的参数,我们都可以使用flask模块中的request的**get_dada()**方法来获取,至于如何取在URL上的数据,可以看下关于【🛴 删除】那里的简介。

🍕前端 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>Document</title>
  <style>
    div {
      border-bottom: 1px solid gray;
      padding-bottom: 10px;
    }

    table {
      width: 100%;
      text-align: center;
      border: solid 1px gray;
    }
  </style>
</head>

<body>
  <div id="add">
    <h3>新增数据</h3>
    姓名:<input type="text">
    年龄:<input type="text">
    专业:<input type="text">
    爱好:<input type="text">
    <button onclick="add()">提交</button>
  </div>
  <script>
    let xhr = new XMLHttpRequest(); //前端使用XMLHttpRequest创建的对象来访问后端
    const add = () => {
      let inputs = document.querySelectorAll("#add input");
      let addJson = {}
      addJson.name = inputs[0].value
      addJson.age = inputs[1].value
      addJson.major = inputs[2].value
      addJson.hobby = inputs[3].value
      // let res = ajax(,)
      xhr.open('post', 'http://localhost:8090/add', true)//最后一个参数表示是否异步请求
      xhr.send(JSON.stringify(addJson))
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
  </script>
</body>

</html>

🍟后端 python

import pymysql
from flask import Flask,request
import json
from flask_cors import CORS
app = Flask(__name__)
CORS(app=app) # 跨域设置
app.debug=True # 开启debug模式
db = pymysql.connect(host='localhost',user='root',password='root',database='python') # 建立连接
cursor = db.cursor() #创建游标
@app.route('/add',methods=['post']) #设置请求头和请求方式
def add():
  req_data = request.get_data() # 获取data数据
  data = json.loads(req_data) # 需要使用json.loads来转换一下,返回的数据是字符码
  print(data)
  try:
    sql_data = (data['name'],int(data['age']),data['major'],data['hobby'])
    sql = "insert into userinfo(name,age,major,hobby) values (%s,%s,%s,%s)" #MySQL查询语句
    cursor.execute(sql,sql_data)
    db.commit()
    return {'code':200,'msg':'数据新增成功'}
  except:
    db.rollback()  # 发生错误时回滚 
    return {'code':1000,'msg':"添加失败"}
 if __name__ == '__main__':
  app.run(host="localhost",port='8090')
  cursor.close() #关闭游标
  db.close() # 关闭数据库连接

🛴 删除

删除使用的请求方式是delete。众所周知,前端发送给后端的数据要么在URL中,要么在请求体里面,这里的话,删除我就把数据放在了URL中,flask的request模块可以通过args.get()方法来接收前端放在URL中的数据。

🍕前端 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>Document</title>
  <style>
    div {
      border-bottom: 1px solid gray;
      padding-bottom: 10px;
    }

    table {
      width: 100%;
      text-align: center;
      border: solid 1px gray;
    }
  </style>
</head>

<body>
  
  <div id="del">
    <h3>根据姓名删除数据</h3>
    姓名:<input type="text">
    <button onclick="del()">删除</button>
  </div>
  <script>
    let xhr = new XMLHttpRequest();
    const del = () => {
      let input = document.querySelector("#del input");
      xhr.open('delete', 'http://localhost:8090/del?name=' + input.value, true)
      xhr.send()
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
  </script>
</body>
</html>

🍟后端 python

import pymysql
from flask import Flask,request
import json
from flask_cors import CORS
app = Flask(__name__)
CORS(app=app)
app.debug=True
db = pymysql.connect(host='localhost',user='root',password='root',database='python')
cursor = db.cursor() #创建游标
@app.route('/del',methods=['delete'])
def delete():
  deleteName = request.args.get('name')
  sql=f'delete from `userinfo` where name="{deleteName}";' # 删除数据的sql语句
  try:
    cursor.execute(sql)
    db.commit()
    return {'code':200,'msg':'删除成功'}
  except:
    db.rollback()  # 发生错误时回滚 
    return {'code':1000,'msg':"删除失败"}
 if __name__ == '__main__':
  app.run(host="localhost",port='8090')
  cursor.close() #关闭游标
  db.close() # 关闭数据库连接

🛵 编辑

修改数据这里就不多说了,直接看源码吧

🍕前端 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>Document</title>
  <style>
    div {
      border-bottom: 1px solid gray;
      padding-bottom: 10px;
    }

    table {
      width: 100%;
      text-align: center;
      border: solid 1px gray;
    }
  </style>
</head>

<body>
  <div id="edit">
    <h3>编辑数据</h3>
    <p>
      姓名:<input type="text" class="name" placeholder="请输入需要修改的姓名"> <input class="name" type="text" placeholder="请输入修改后的姓名">
      <button onclick="edit()">修改</button>
    </p>   
  </div>
  <script>
    let xhr = new XMLHttpRequest();
  const edit = () => {
      let names = document.querySelectorAll("#edit .name");
      let addJson = {}
      addJson.beforeName = names[0].value
      addJson.afterName = names[1].value
      xhr.open('put', 'http://localhost:8090/edit', true)
      xhr.send(JSON.stringify(addJson))
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
  </script>
</body>
</html>

🍟后端 python

import pymysql
from flask import Flask,request
import json
from flask_cors import CORS
app = Flask(__name__)
CORS(app=app)
app.debug=True
db = pymysql.connect(host='localhost',user='root',password='root',database='python')
cursor = db.cursor() #创建游标
@app.route('/edit',methods=['put'])
def edit():
  req_data = request.get_data()
  data = json.loads(req_data)
  print('修改消息:',data)
  try:
    sql = f"update userinfo set name='{data['afterName']}' where name='{data['beforeName']}'"
    cursor.execute(sql)
    db.commit()
    return {'code':200,'msg':'修改成功'}
  except:
    db.rollback() 
    return {'code':1000,'msg':"修改失败"}
 if __name__ == '__main__':
  app.run(host="localhost",port='8090')
  cursor.close() #关闭游标
  db.close() # 关闭数据库连接

🛵 查看

🍕前端 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>Document</title>
  <style>
    div {
      border-bottom: 1px solid gray;
      padding-bottom: 10px;
    }

    table {
      width: 100%;
      text-align: center;
      border: solid 1px gray;
    }
  </style>
</head>

<body>
  <div id="select">
    <h3>查询数据 <button onclick="select()">查询</button></h3>
    <table border cellspacing="0px" cellpading="0">
      <tr class="tableT">
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>专业</th>
        <th>爱好</th>
      </tr>
    </table>
  </div>
  <script>
    let xhr = new XMLHttpRequest();
 const select = () => {
      xhr.open('get', 'http://localhost:8090/select', true)
      xhr.send()
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            let tdData = JSON.parse(res).data
            let tableT = document.querySelector("table");
            if(isFirstRender){

              tdData.forEach(element => {
                let tableB = document.createElement('tr')
                tableB.className = 'tableB'
                tableB.innerHTML = `
                <td>${element.id}</td>
                <td>${element.name}</td>
                <td>${element.age}</td>
                <td>${element.major}</td>
                <td>${element.hobby}</td>
                `
                tableT.appendChild(tableB)
              });
            }else{
              let delTableB = document.querySelectorAll('.tableB')
              for(let i = 0;i<delTableB.length;i++){
                tableT.removeChild(delTableB[i])
              }
              tdData.forEach(element => {
                let tableB = document.createElement('tr')
                tableB.className = 'tableB'
                tableB.innerHTML = `
                <td>${element.id}</td>
                <td>${element.name}</td>
                <td>${element.age}</td>
                <td>${element.major}</td>
                <td>${element.hobby}</td>
                `
                tableT.appendChild(tableB)
              });
            }
          }
        }
      }
    }
  </script>
</body>
</html>

🍟后端 python

import pymysql
from flask import Flask,request
import json
from flask_cors import CORS
app = Flask(__name__)
CORS(app=app)
app.debug=True
db = pymysql.connect(host='localhost',user='root',password='root',database='python')
cursor = db.cursor() #创建游标
@app.route('/select',methods=['get'])
def select():
  try:
    cursor.execute("SELECT * FROM userinfo")
    array = []
    data=()
    while isinstance(data,tuple):#循环遍历出data的数据
      data = cursor.fetchone() #fetchone方法用于取出数据库中查询的单个数据
      if(data == None): break
      obj = {}
      obj['id'] = data[0]
      obj['name'] = data[1]
      obj['age'] = data[2]
      obj['major'] = data[3]
      obj['hobby'] = data[4]
      array.append(obj)
    return {'code':200,'msg':'查询成功','data':array}
  except:
    db.rollback() 
    return {'code':1000,'msg':"查询失败"}
 if __name__ == '__main__':
  app.run(host="localhost",port='8090')
  cursor.close() #关闭游标
  db.close() # 关闭数据库连接

🥩 完整代码

🥐前端 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>Document</title>
  <style>
    div {
      border-bottom: 1px solid gray;
      padding-bottom: 10px;
    }

    table {
      width: 100%;
      text-align: center;
      border: solid 1px gray;
    }
  </style>
</head>

<body>
  <div id="select">
    <h3>查询数据 <button onclick="select()">查询</button></h3>
    <table border cellspacing="0px" cellpading="0">
      <tr class="tableT">
        <th>ID</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>专业</th>
        <th>爱好</th>
      </tr>
    </table>
  </div>
  <div id="add">
    <h3>新增数据</h3>
    姓名:<input type="text">
    年龄:<input type="text">
    专业:<input type="text">
    爱好:<input type="text">
    <button onclick="add()">提交</button>
  </div>
 
  <div id="edit">
    <h3>编辑数据</h3>
    <p>
      姓名:<input type="text" class="name" placeholder="请输入需要修改的姓名"> <input class="name" type="text" placeholder="请输入修改后的姓名">
      <button onclick="edit()">修改</button>
    </p>   
  </div>
  <div id="del">
    <h3>根据姓名删除数据</h3>
    姓名:<input type="text">
    <button onclick="del()">删除</button>
  </div>
  <script>
    let xhr = new XMLHttpRequest();

    function ajax(methods, url, data) {
      xhr.open(methods, url, true)
      xhr.send(data)
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            console.log(JSON.parse(res));
            return JSON.parse(res)
          }
        }
      }
    }
    let isFirstRender = true
    const add = () => {
      let inputs = document.querySelectorAll("#add input");
      let addJson = {}
      addJson.name = inputs[0].value
      addJson.age = inputs[1].value
      addJson.major = inputs[2].value
      addJson.hobby = inputs[3].value
      // let res = ajax(,)
      xhr.open('post', 'http://localhost:8090/add', true)
      xhr.send(JSON.stringify(addJson))
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
    const edit = () => {
      let names = document.querySelectorAll("#edit .name");
      let addJson = {}
      addJson.beforeName = names[0].value
      addJson.afterName = names[1].value
      xhr.open('put', 'http://localhost:8090/edit', true)
      xhr.send(JSON.stringify(addJson))
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
    const select = () => {
      xhr.open('get', 'http://localhost:8090/select', true)
      xhr.send()
      xhr.onreadystatechange = () => {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText;
            let tdData = JSON.parse(res).data
            let tableT = document.querySelector("table");
            if(isFirstRender){
              tdData.forEach(element => {
                let tableB = document.createElement('tr')
                tableB.className = 'tableB'
                tableB.innerHTML = `
                <td>${element.id}</td>
                <td>${element.name}</td>
                <td>${element.age}</td>
                <td>${element.major}</td>
                <td>${element.hobby}</td>
                `
                tableT.appendChild(tableB)
              });
            }else{
              let delTableB = document.querySelectorAll('.tableB')
              for(let i = 0;i<delTableB.length;i++){
                tableT.removeChild(delTableB[i])
              }
              tdData.forEach(element => {
                let tableB = document.createElement('tr')
                tableB.className = 'tableB'
                tableB.innerHTML = `
                <td>${element.id}</td>
                <td>${element.name}</td>
                <td>${element.age}</td>
                <td>${element.major}</td>
                <td>${element.hobby}</td>
                `
                tableT.appendChild(tableB)
              });
            }
          }
        }
      }
    }
    const del = () => {
      let input = document.querySelector("#del input");
      xhr.open('delete', 'http://localhost:8090/del?name=' + input.value, true)
      xhr.send()
      xhr.onreadystatechange = function () {
        if (xhr.readyState === 4) {
          if (xhr.status === 200) {
            let res = xhr.responseText
            isFirstRender = false
            alert(JSON.parse(res).msg);
            select()
          }
        }
      }
    }
  </script>
</body>

</html>

🥨后端 python

import pymysql
from flask import Flask,request
import json
from flask_cors import CORS
app = Flask(__name__)
CORS(app=app)
app.debug=True
db = pymysql.connect(host='localhost',user='root',password='root',database='python')
cursor = db.cursor() #创建游标
@app.route('/add',methods=['post'])
def add():
  req_data = request.get_data()
  data = json.loads(req_data)
  print(data)
  try:
    sql_data = (data['name'],int(data['age']),data['major'],data['hobby'])
    sql = "insert into userinfo(name,age,major,hobby) values (%s,%s,%s,%s)"
    cursor.execute(sql,sql_data)
    db.commit()
    return {'code':200,'msg':'数据新增成功'}
  except:
    db.rollback()  # 发生错误时回滚 
    return {'code':1000,'msg':"添加失败"}

@app.route('/del',methods=['delete'])
def delete():
  deleteName = request.args.get('name')
  sql=f'delete from `userinfo` where name="{deleteName}";'
  try:
    cursor.execute(sql)
    db.commit()
    return {'code':200,'msg':'删除成功'}
  except:
    db.rollback()  # 发生错误时回滚 
    return {'code':1000,'msg':"删除失败"}
@app.route('/edit',methods=['put'])
def edit():
  req_data = request.get_data()
  data = json.loads(req_data)
  print('修改消息:',data)
  try:
    sql = f"update userinfo set name='{data['afterName']}' where name='{data['beforeName']}'"
    cursor.execute(sql)
    db.commit()
    return {'code':200,'msg':'修改成功'}
  except:
    db.rollback() 
    return {'code':1000,'msg':"修改失败"}

@app.route('/select',methods=['get'])
def select():
  try:
    cursor.execute("SELECT * FROM userinfo")
    array = []
    data=()
    while isinstance(data,tuple):#循环遍历出data的数据
      data = cursor.fetchone() #fetchone方法用于取出数据库中查询的单个数据
      if(data == None): break
      obj = {}
      obj['id'] = data[0]
      obj['name'] = data[1]
      obj['age'] = data[2]
      obj['major'] = data[3]
      obj['hobby'] = data[4]
      array.append(obj)
    return {'code':200,'msg':'查询成功','data':array}
  except:
    db.rollback() 
    return {'code':1000,'msg':"查询失败"}
  
if __name__ == '__main__':
  app.run(host="localhost",port='8090')
  cursor.close()
  db.close()

结语

最后这里忽然感觉也没什么好说的了
如果文章有什么不正确的地方,希望在评论区指出,我们共同进步。谢谢大家

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/22930.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMM 套利者

AMM 套利者 理由 以太坊和其他支持 EVM 的区块链上有很多 AMM。其中许多 AMM 是 UniswapV2 的分叉项目或与 UniswapV2 具有相同的接口。这些 AMM 的列表&#xff1a; Uniswap V2(以太坊)寿司交换&#xff08;以太坊&#xff09;煎饼掉期(BSC)MDEX(BSC/heco) ... 一旦相同代币…

SpiderPool - 云原生容器网络 IPAM 插件

SpiderPool 来源于容器网络落地实践的经验积累&#xff0c;是「Daocloud 道客」开源的原生容器网络 IPAM 插件&#xff08;github&#xff1a;https://github.com/spidernet-io/spiderpool&#xff09;&#xff0c;主要用于搭配 Underlay CNI 实现容器云平台精细化的管理和分配…

策略验证_指标买点分析技法_运用boll布林线指标选择买点

写在前面&#xff1a; 1. 本文中提到的“股票策略校验工具”的具体使用操作请查看该博文&#xff1b; 2. 文中知识内容来自书籍《同花顺炒股软件从入门到精通》 3. 本系列文章是用来学习技法&#xff0c;文中所得内容都仅仅只是作为演示功能使用 目录 解说 策略代码 结果 解…

基于云原生网关的可观测性最佳实践

作者&#xff1a; 井轶 为什么要进行可观测性建设 可观测性并不是一个新词&#xff0c;该词来源于控制理论&#xff0c;是指系统可以由其外部输出推断其其内部状态的程度&#xff0c;随着 IT 行业几十年的发展&#xff0c;IT 系统的监控&#xff0c;告警&#xff0c;问题排查…

【附源码】计算机毕业设计JAVA学生信息管理系统

【附源码】计算机毕业设计JAVA学生信息管理系统 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; JAVA my…

联想Filez助力知名生物制药企业 建立业务数据安全体系

苏州某生物制药企业是一家抗体研发企业&#xff0c;其研发生产基地设在苏州。主要从事临床样品&#xff08;原液和成品&#xff09;的开发和生产&#xff0c;致力于通过持之以恒的研发和专业的生产技术&#xff0c;以最快的速度实现生物制品的批准。 随着企业各项业务的快速发展…

Redis——》数据类型

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 Redis——》数据类型5种基本类型3种特殊类型数据类型和底层数据结构5种基本…

第一个 GoWeb 程序,三款主流框架 Beego、Gin 和 Iris 快速入门

1、什么是web应用 Web应用程序是一种可以通过Web访问的应用程序&#xff0c;程序的最大好处是用户很容易访问应用程序&#xff0c;用户只需要有浏览器即可&#xff0c;不需要再安装其他软件。 一个Web应用程序是由完成特定任务的各种Web组件构成的并通过Web将服务展示给外界。…

网络是怎样连接的--生成HTTP请求消息过程

文章目录1.1 何为网址1.2 解析网址1.3 HTTP在干嘛1.4 生成http请求和响应1.1 何为网址 网址&#xff0c;准确来说应该叫URL,比如以http://开头的那一串东西.但实际上除了“http:”&#xff0c;网址还可以以其他一些文字开头&#xff0c;例如“ftp:”“file:”“mailto:”等。而…

免费申请Jetbrains全家桶

文章目录Jetbrains全家桶免费申请的人群学生和老师申请的要求申请方式申请流程解决收不到邮件的问题编辑内容进行认证申请成功Jetbrains全家桶 Jetbrains是著名的编程工具商业软件提供商&#xff0c;旗下有很多软件。包括IDE、团队开发工具、插件和微软.Net辅助工具、包括自创语…

[附源码]java毕业设计小型银行贷款管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C\C++刷题DAY4

目录 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 1.第一题 206. 反转链表 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a;调转指向关系&#xff0c;使用双指针的思想 1指向2&#xff0c;改成2指向1&#xff0c;以此类推。 参考代码&#xff1a; struct L…

2022年NPDP新版教材知识集锦--【第三章节】(5)

【系统工程】 系统工程的概念 系统工程原理将系统思维和系统工程过程模型的概念结合起来&#xff0c;通过设计、项目管理工具和方法的系统和集成过程将问题转化为解决方案。 所有系统都由具有属性或功能的部分组成&#xff0c;元素之间通过关系相互联系。 系统复杂性由结构…

想学爬虫爬取网页,但是不知道流程?

爬取网页总体概述&#xff1a; 1.使用urllib请求网页&#xff0c;获取网页源码。 2.使用bs4配合re正则表达式进行页面数据解析&#xff0c;获取到自己想要的数据。 3.使用pymysql保存到数据库或xlwt保存成excel文件。 温馨提示&#xff1a;学习之前需要先了解py基础知识&#x…

PTA题目 计算符号函数的值

对于任一整数n&#xff0c;符号函数sign(n)的定义如下&#xff1a; 请编写程序计算该函数对任一输入整数的值。 输入格式: 输入在一行中给出整数n。 输出格式: 在一行中按照格式“sign(n) 函数值”输出该整数n对应的函数值。 输入样例1: 10输出样例1: sign(10) 1输入样…

住宅代理详细介绍——助您快速入门!

Oxylabs的高级代理池能够为客户提供来自世界各地的1亿多个住宅代理&#xff0c;并且其规模还在不断壮大中&#xff0c;即使是难搞的网络抓取任务也能够处理。住宅代理能轻松从复杂的目标中收集数据&#xff0c;帮助您在无需面对CAPTCHA验证或封锁的情况下实现抓取。 想要全方位…

在 Kubernetes 上最小化安装 KubeSphere

文章目录什么是 KubeSphere搭建环境准备工作部署 KubeSphere卸载 KubeSphere常见问题什么是 KubeSphere KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统&#xff0c;完全开源&#xff0c;支持多云与多集群管理&#xff0c;提供全栈的 IT 自动化运维能力…

免费公众号题库

免费公众号题库 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转…

java之《图书管理系统》庖丁解牛

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《java练级之旅》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我…

大数据挖掘建模平台是怎样的?

大数据挖掘建模平台是可视化、一站式、高性能的数据挖掘与人工智能建模服务平台。面向企业级用户的大数据挖掘建模平台。平台采用可视化操作方式&#xff0c;通过丰富内置算法&#xff0c;帮助用户快速、一站式地进行数据分析及挖掘建模&#xff0c;可应用于处理海量数据、高复…