• 【毕设必备】手把手带你用Python搭建一个简单的后端服务- API的创建,前后端交互的数据传递,GET,POST,JSON,FLASK


    Python 介绍

    Python是一种流行的高级编程语言,具有易于学习和使用的特性,被广泛应用于各种领域。

    Python的特性

    1. 简单易学:Python的语法清晰简洁,易于理解和学习。与其他编程语言相比,Python的语法设计非常直观,使得编程新手也能快速上手。
    2. 强大的标准库和丰富的第三方库:Python拥有一个庞大的标准库,提供了许多用于各种任务的实用模块,如文件处理、网络编程、数据库交互等。此外,Python的第三方库非常丰富,包括科学计算、数据分析、机器学习、Web开发等。
    3. 动态类型:Python是动态类型的语言,这意味着开发者不需要在声明变量时指定其类型。这可以使代码更加简洁,但也需要开发者注意运行时可能出现的类型错误。
    4. 解释型语言:Python是解释型语言,这意味着代码可以在运行时直接解释执行,而不需要预先编译。这提高了开发效率,并使得Python适合于快速原型开发。
    5. 面向对象:Python支持面向对象的编程风格,可以用来创建类和对象。这使得Python可以更好地组织和管理代码,并支持复杂的程序设计。

    Python的使用场景

    1. Web开发:Python的Web框架如 DjangoFlask 非常流行,可用于构建各种类型的Web应用。
    2. 数据分析和机器学习:Python的第三方库如NumPy、Pandas、Scikit-learn和TensorFlow等在数据分析和机器学习领域具有广泛的应用。
    3. 自动化和脚本编写:Python的简洁语法和动态类型使得编写自动化脚本和批处理任务变得非常简单。
    4. 科学计算和工程:Python的NumPy和SciPy库为科学计算提供了强大的支持,适用于工程和科学应用。
    5. 网络编程和物联网:Python可以用于编写各种网络服务,包括REST API、WebSocket等,适用于物联网(IoT)和其他网络相关的应用。
    6. 游戏开发:Python有许多用于游戏开发的库和引擎,如Pygame和Panda3D,可以用于开发各种类型的游戏。
    7. 嵌入式系统和硬件交互:Python可以通过与C/C++等语言进行混合编程,用于与嵌入式系统和其他硬件设备进行交互。

    总之,Python是一种用途广泛且功能强大的编程语言,适用于各种应用领域。它简单易学,能够提高开发效率和代码质量,因此在软件开发、数据分析、自动化脚本编写、网络编程等领域得到了广泛的应用。


    python基本语法

    变量命名规则

    Python中的变量命名遵循以下规则:
    
    起始字母: 变量名应始终以字母(a-z,A-Z)或下划线(_)开始。
    后续字符: 变量名的后续字符可以是字母,数字或下划线。
    大小写敏感性: Python是大小写敏感的,因此myVariable和myvariable会被视为两个不同的变量。
    不要使用Python内建关键字: 变量名不应与Python的关键字冲突,如for, if, while, break, continue, pass等等。
    不要使用Python内建模块名: 避免使用Python内建模块名作为变量名,例如importprint等。
    不要使用特殊符号: 除了下划线,避免在变量名中使用其他特殊符号,如连字符(-),点(.)等。
    连字符: 当变量名包含多个单词时,可以使用连字符(-)连接,例如my-variable。
    使用下划线: 当变量名包含多个单词时,也可以使用下划线(_)连接,例如my_variable。
    避免使用单个字符: 除非特殊情况,避免只使用单个字符作为变量名,这样的变量通常没有明确的含义。
    使用驼峰命名法: 类通常使用驼峰命名法(CamelCase),例如MyClass。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    数据类型

    Python是一种动态类型的语言,这意味着在Python中,你不必预先声明变量的数据类型。Python会根据赋予给它们的数据自动创建数据类型

    Number(数字):Python支持整数和浮点数。例如:123400.0。
    String(字符串):字符串是由零个或多个字符组成的一串字符。例如:"Hello""Python"。
    List(列表):列表是Python中非常常用的数据结构,它可以包含任意数量和类型的对象。例如:[1, "a", 2.3]。
    Tuple(元组):元组类似于列表,但元组的元素不能修改。例如:(1, "a", 2.3)。
    Dictionary(字典):字典是一个包含键值对的无序集合。例如:{"name": "Alice", "age": 20}。
    Set(集合):集合是一个无序且不重复元素的集合。例如:{1, 2, 3}。
    Boolean(布尔):布尔有两种值,TrueFalse。
    NoneType(None):NoneType表示没有任何东西,是Python的特殊类型。
    Function(函数):在Python中,函数也是一种数据类型,可以像其他数据类型一样被传递和返回。
    Class(类):类是创建对象的蓝图,定义了对象的结构和行为。
    Module(模块):模块是一种数据类型,可以包含函数、类、变量等。
    Generator(生成器):生成器是一个可以迭代的对象,用于创建迭代器。
    Coroutine(协程):协程是一种特殊类型的函数,可以在执行过程中暂停和恢复。
    Asynciofuture(异步io未来):这是用于处理异步I/O操作的对象。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    print(): 用于在控制台输出指定的信息。

    print('Hello World') #Hello World
    
    • 1

    type(): 用于获取指定对象的类型。

    print(type(123)) #
    
    • 1

    len(): 用于获取指定对象的长度(例如列表、字符串、元组等)。

    #字符串
    print(len('123')) #3
    
    #列表
    print(len([1,2,3])) #3
    
    #元组
    print(len((1,'2',2.4,[1]))) #4
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    for…in…: 用于循环遍历序列(例如列表、元组、字符串)或其他可迭代对象。例如,以下代码将遍历打印列表中的所有元素:

    my_list = [1, 2, 3, 4]  
    for element in my_list:  
        print(element) #1,2,3,4
    
    tuple = (1,'2.3',4)
    for t in tuple:
        print(t) #1,2.3,4
    
    str = "123"
    print(len(str)) #3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    if…elif…else…: 用于条件语句,根据条件执行不同的操作。

    num = 10  
    if num > 0:  
        print("positive")  
    elif num < 0:  
        print("negative")  
    else:  
        print("zero")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    def: 用于定义函数。例如,以下代码定义了一个函数,接受两个参数并返回它们的和:

    def addNum(a,b):
        return a+b
    
    • 1
    • 2

    return: 用于从函数中返回结果。例如,以下代码调用add函数并将结果打印出来:

    result = addNum(10, 20)  
    print(result) # prints 30
    
    • 1
    • 2

    and、or: 用于逻辑运算。例如,以下代码将判断是否满足条件:x > 0 and x < 100:

    x = 50  
    if x > 0 and x < 100:  
        print("x is between 0 and 100")
    
    • 1
    • 2
    • 3

    not: 用于逻辑非运算。例如,以下代码将判断是否不满足条件:x <= 0:

    x = -10  
    if not x <= 0:  
        print("x is not less than or equal to 0")
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    pip安装依赖

    pip install xxx
    
    pip install -r requestments.txt
    
    • 1
    • 2
    • 3

    python运行文件

    python main.py
    
    • 1

    Flask

    Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。

    Flask和Django都是使用Python开发的Web应用程序后端框架,两者的主要区别在于功能丰富程度、框架灵活性和体量大小。
    功能丰富程度:Django相比Flask更强大和复杂。Flask更轻量化,仅提供了框架化、流程化等关键功能。Django则提供了几乎在网站开发中需要使用的任何功能,包括用户认证、ORM、模板引擎等。
    框架灵活性:Flask在定制性方面相对较强。它允许用户自己决定定制哪些功能,可以自由地使用不同的数据库、模板引擎等,而且其插件库非常丰富,可以轻松实现个性化定制。而Django则更注重整体性和一致性,使用起来更加简洁,但相比Flask略显不够灵活。
    体量大小:Django被形容为“大而全”的框架,功能极其强大,是Python web框架的先驱,因此体量相对较大,对于小型微服务来说可能会显得过于臃肿。相比之下,Flask更加小巧、灵活,非常适用于小型网站或个人项目。
    总的来说,Flask更适合小型项目或初学者入门学习,而Django更适合大型企业级网站或复杂的Web应用开发

    在这里插入图片描述
    Django

    在这里插入图片描述
    Flask

    View

    
    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Documenttitle>
    head>
    <body>
        <h1>Hello World(html)h1>
        {{message}}
    
        <div id="listDom" style="display: none;">{{list}}div>
    
        <ul id="list">ul>
    body>
    <script>
        const listDom = document.querySelector('#listDom');
        let list = JSON.parse(listDom.innerText)
    
        var ul = document.getElementById("list");  
        list.forEach(l => {
            var item = document.createElement("li");  
            item.appendChild(document.createTextNode(l.name));  
            ul.appendChild(item);  
        });
    script>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    #!/usr/env python3
    # -*- coding: UTF-8 -*-
    
    # 导入Flask
    from flask import Flask,render_template
    
    # Flask类接收一个参数
    app = Flask(__name__)
    
    # 装饰器的作用是将路由映射到视图函数index上
    @app.route('/')
    def index():
        return '

    Hello World(/)

    '
    @app.route('/hello') def hello(): return render_template('index.html') # Flask应用程序实例的run方法启动web服务器 if __name__ == '__main__': app.run(debug=True, host='127.0.0.1', port=5000)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    Model

    1. 安装python操作MySQL的驱动
    pip install pymysql
    
    • 1
    1. 安装ORM工具(对象关系映射)
    pip install flask-sqlalchemy
    
    • 1

    在这里插入图片描述

    class User(db.Model):
        user_id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(80), unique=True, nullable=False)
        password = db.Column(db.String(128), nullable=False)
        
        def __repr__(self):
            return '' % self.name
        
        def to_dict(self):
            return{
                "userId":self.user_id,
                "name":self.name
            }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Control

    html

    # 渲染H5
    
    from flask import Flask,render_template
    
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return '

    Hello World(/)

    '
    #render_template @app.route('/renderTemplate') def renderTemplate(): return render_template('index.html') # Flask应用程序实例的run方法启动web服务器 if __name__ == '__main__': app.run(debug=True, host='127.0.0.1', port=5000)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    simple api

    # python接口
    
    from flask import Flask,request
    import json
    
    app = Flask(__name__)
    
    @app.route('/')
    def index():
        return 'api接口'
    
    @app.route('/list',methods=['GET','POST'])
    def list():
        lists = [1,2,3]
        return lists
    
    @app.route('/insert',methods=['GET','POST'])
    def insert():
        list = ['戴']
        if request.method == 'GET':
            name = request.args.get('name')
        if request.method == 'POST':
            name = request.values.get('name')
        list.append(name)
        return list
    
    if __name__ == '__main__':
        app.run(debug=True,host='127.0.0.1',port=5001)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    连接数据库

    # config.py
    class Config(object):
        # Database configuration mysql://username:password@hostname/database
        SQLALCHEMY_DATABASE_URI = "mysql://root:123456@localhost:3306/python?charset=utf8mb4"
        SQLALCHEMY_TRACK_MODIFICATIONS = True
    
    • 1
    • 2
    • 3
    • 4
    • 5
    # 连接数据库
    
    from flask import Flask,request
    import pymysql
    import json
    from flask_sqlalchemy import SQLAlchemy
    from config import Config
    
    app = Flask(__name__)
    app.config.from_object(Config)
    db = SQLAlchemy(app)
    
    @app.route('/')
    def index():
        return '连接数据库'
    
    # pymysql
    @app.route('/searchByPymysql')
    def searchByPymysql():
        conn = pymysql.connect(host='localhost',port=3306,user='root',passwd='123456',db='python')
        cursor = conn.cursor()
        sql = "SELECT * FROM user;"
        cursor.execute(sql)
        result = cursor.fetchall()
        print(result,'result')
        arr = []
        for row in result:
            tmp = {
                "userId":row[0],
                "password":row[1],
                "name":row[2]
            }
            arr.append(tmp)
    
        cursor.close()
        conn.close()
        return json.dumps(arr)
    
    # SQLAlchemy
    class User(db.Model):
        user_id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(80), unique=True, nullable=False)
        password = db.Column(db.String(128), nullable=False)
        
        def __repr__(self):
            return '' % self.name
        
        def to_dict(self):
            return{
                "userId":self.user_id,
                "name":self.name
            }
    @app.route('/searchBySqlAlchemy')
    def searchBySqlAlchemy():
        result = []
        user = User.query.all()
        for u in user:
            if u:
                result.append(u.to_dict())
        return json.dumps(result)
    
    # weather
    class Weather(db.Model):
        city = db.Column(db.String(80), unique=True, primary_key=True)
        weather = db.Column(db.String(80), nullable=False)
        tem = db.Column(db.Integer, nullable=False)
        
        def __repr__(self):
            return '' % self.city
        
        def to_dict(self):
            return{
                "city":self.city,
                "weather":self.weather,
                "tem":self.tem
            }
    
    @app.route('/getWeather')
    def getWeather():
        if request.method == 'GET':
            city = request.args.get('city')
        if request.method == 'POST':
            city = request.values.get('city')
        weather = Weather.query.filter(Weather.city == city).first()
        return weather.to_dict()
    
    if __name__ == '__main__':
        app.run(debug=True,host='127.0.0.1',port=5002)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88

    跨域

    pip install flask_cors
    
    • 1
    from flask_cors import CORS
    CORS(app,resources={r"/*":{"origins":"*"}})
    
    • 1
    • 2

    Mojo比python快68000倍

    比Python快68000倍!Mojo正式发布,网友:Python生态系统最重要的升级来了


    相关链接

    Flask中文网
    flask_sqlalchemy

  • 相关阅读:
    RT-Thread Nano系统启动过程研究
    2-4 ajax请求后台验证码数据返回到前端html页面
    STM32 | 零基础 STM32 第一天
    pandas dataframe 怎么保留重复的行
    Java 208 道面试题:Java 基础模块答案
    Spring Cloud Alibaba【Nacos配置动态刷新、Nacos集群架构介绍 、Nacos的数据持久化、认识分布式流量防护 】(五)
    leetcode每天5题-Day53-贪心2
    【Datawhale学习笔记】从大模型到AgentScope
    为什么vscode更新不成功,系统找不到指定路径
    【Transformers】第 10 章 :从零开始训练 Transformer
  • 原文地址:https://blog.csdn.net/weixin_46318413/article/details/133941924