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

news2024/12/27 10:45:51

目录

  • Python 介绍
    • Python的特性
    • Python的使用场景
    • python基本语法
  • Flask
    • View
    • Model
    • Control
      • html
      • simple api
      • 连接数据库
    • 跨域
  • Mojo比python快68000倍
  • 相关链接

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。

数据类型

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操作的对象。

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

print('Hello World') #Hello World

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

print(type(123)) #<class 'int'>

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

#字符串
print(len('123')) #3

#列表
print(len([1,2,3])) #3

#元组
print(len((1,'2',2.4,[1]))) #4

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

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

num = 10  
if num > 0:  
    print("positive")  
elif num < 0:  
    print("negative")  
else:  
    print("zero")

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

def addNum(a,b):
    return a+b

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

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

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

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

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

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

在这里插入图片描述

pip安装依赖

pip install xxx

pip install -r requestments.txt

python运行文件

python main.py

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

<!--index.html-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</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>
#!/usr/env python3
# -*- coding: UTF-8 -*-

# 导入Flask
from flask import Flask,render_template

# Flask类接收一个参数
app = Flask(__name__)

# 装饰器的作用是将路由映射到视图函数index上
@app.route('/')
def index():
    return '<h1>Hello World(/)</h1>'

@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)

Model

  1. 安装python操作MySQL的驱动
pip install pymysql
  1. 安装ORM工具(对象关系映射)
pip install flask-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 '<User %r>' % self.name
    
    def to_dict(self):
        return{
            "userId":self.user_id,
            "name":self.name
        }

Control

html

# 渲染H5

from flask import Flask,render_template


app = Flask(__name__)

@app.route('/')
def index():
    return '<h1>Hello World(/)</h1>'

#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)

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)

连接数据库

# 连接数据库

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 '<User %r>' % 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 '<City %r>' % 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)

跨域

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

Mojo比python快68000倍

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


相关链接

Flask中文网
flask_sqlalchemy

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

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

相关文章

移动硬盘被格式化了如何恢复数据?四步教你如何恢复

在日常生活中&#xff0c;我们常常会使用各种存储设备来保存和备份我们的重要数据。移动硬盘作为一种便携式的存储设备&#xff0c;被广泛应用于数据的存储和传输。然而&#xff0c;有时候我们会不小心将移动硬盘格式化&#xff0c;从而丢失了里面的数据。本文将介绍移动硬盘格…

如何通过沉浸式投影技术提升文旅夜游的互动体验?

伴随着国民经济的提升&#xff0c;文旅夜游市场也开始通过各类创新设计形式&#xff0c;来吸引更多的游客前来打卡游玩&#xff0c;使其逐渐成为了当下热度较高的一种游玩模式&#xff0c;其中在收集各类用户的体验反馈时&#xff0c;沉浸式投影依靠新颖的视觉体验以及沉浸式观…

安装Apache2.4

二、安装配置Apache&#xff1a; 中文官网&#xff1a;Apache 中文网 官网 (p2hp.com) 我下的是图中那个版本&#xff0c;最新的64位 下载下后解压缩。如解压到D:\Program Files\Apache\Apache24 PS&#xff1a;特别要注意使用的场景和64位还是32位版本 2、修改Apcahe配置文…

2023.10.18

头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slot…

电商数据采集的10个经典方法

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

什么是零拷贝

普通拷贝流程 在实际应用中&#xff0c;如果我们需要把磁盘中的某个文件内容发送到远程服务器上&#xff0c;那么它必须要经过几个拷贝的过程&#xff0c;。从磁盘中读取目标文件内容拷贝到内核缓冲区&#xff0c;CPU 控制器再把内核缓冲区的数据赋值到用户空间的缓冲区中&…

全志R128外设模块配置——ADC按键配置方法

ADC 按键配置方法 FreeRTOS平台上使用的按键为ADC-KEY&#xff0c;采用的ADC模块为GPADC。 按键功能驱动的实现是通过ADC分压&#xff0c;使每个按键检测的电压值不同&#xff0c;从而实现区分不同的按键。按下或者弹起中断之后&#xff0c;通过中断触发&#xff0c;主动检测…

电子技术基础之一(电容和电感)

Electronic Techonolgy 1、电容和电感1.1、电容(Capacitor)1.1.1、滤波功能1.1.2、储能功能 1.2、电感(Inductor)1.2.1、楞次定律1.2.2、储能作用 1、电容和电感 先讲一个概念&#xff0c;电流分为直流电和交流电&#xff0c;其中直流电再分为稳定直流电和脉动直流电。 直流电…

如何使用VSCode将iPad Pro转化为功能强大的开发工具?

文章目录 前言1. 本地环境配置2. 内网穿透2.1 安装cpolar内网穿透(支持一键自动安装脚本)2.2 创建HTTP隧道 3. 测试远程访问4. 配置固定二级子域名4.1 保留二级子域名4.2 配置二级子域名 5. 测试使用固定二级子域名远程访问6. iPad通过软件远程vscode6.1 创建TCP隧道 7. ipad远…

SpringBoot (3) Profiles,外部化配置,自定义starter

目录 1 Profiles 1.1 "组件"环境隔离 1.1.1 标识环境 1.1.2 激活环境 1.2 "配置"环境隔离 1.2.1 添加"副配置文件" 1.2.2 激活环境 2 外部化配置 2.1 配置优先级 2.2 快速部署 3 自定义starter 3.1 基本抽取 3.1.1 导yaml提示包 3…

mac录屏怎么录?看这里,告别繁琐操作!

屏幕录制是mac用户在日常生活中经常需要使用到的功能&#xff0c;无论是记录游戏精彩瞬间、分享在线会议、制作教学视频还是保存重要资料&#xff0c;屏幕录制都可以帮助我们更便捷地实现这些需求。但是很多用户并不知道mac录屏怎么录。在本文中&#xff0c;我们将介绍两种mac录…

TT119电源芯片用什么代替?

根据你提供的信息&#xff0c;Tt119电源芯片的替代选项可以是AH8652芯片。 AH8652芯片采用了SOT23-3封装&#xff0c;与Tt119芯片相同。同时&#xff0c;你提到外围元件也是一模一样的&#xff0c;因此不需要进行任何更改。 AH8652芯片的输入电压范围为45V至265V&#xff0c;…

用好快捷键事半功倍!如何在Excel中快速取消隐藏的行

工作时,我们需要经常取消隐藏Excel中的行。要知道行是否被隐藏,请仔细检查行号。如果缺少某些数字,则意味着行被隐藏。这样做很容易,而且您可以用不同的快捷方式取消隐藏Excel中的行。 在本文中,我将讨论如何在各种情况下取消隐藏Excel中的行的两种快捷方式。这些快捷方式…

【JavaEE】Java的多线程编程基础知识 -- 多线程篇(2)

Java多线程编程基础知识 一、多线程的创建二、Thread类常用的方法和API2.1 Thread 的几个常见的属性2.2 start 启动一个线程2.3 终止一个线程2.4 等待一个线程-join()2.5 线程休眠函数 -sleep() 三、线程状态3.1 观察所有线程的状态3.2 线程状态和线程转移的意义 四、线程安全&…

pytorch 训练可视化

pytorch 训练可视化 1.from torch.utils.tensorboard 1.from torch.utils.tensorboard from torch.utils.tensorboard import SummaryWriter在最新版本的pytorch中官方提供了tensorboard的api。以下是官方教程的链接 https://pytorch.org/tutorials/intermediate/tensorboard…

docker企业单位私有镜像仓库 Harbor 搭建

docker私有镜像仓库 Harbor 搭建 背景说明使用环境安装部署docker安装docker-compose安装 安装 HarborHarbor UI管理docker 登录docker推送镜像和拉取镜像docker推送镜像docker 拉取镜像 背景说明 为了方便管理docker容器镜像&#xff0c;通常使用各大云平台提供的镜像服务&am…

内裤洗衣机到底值不值得买?内衣洗衣机便宜好用的牌子

有很多姐妹上班累爆了&#xff0c;回家洗澡换下的衣物还要区分开来&#xff0c;将内衣裤用来自己手洗&#xff0c;还要专门使用杀菌洗衣液才能安心&#xff0c;而且随着科技的进步&#xff0c;现在市面上拥有了一款专门为女生设计的内衣洗衣机&#xff0c;可以解决日常手洗内衣…

英语 chatGPT分析句子与验证正确性 翻译

有时候我想说的时候&#xff0c;又不确定说的对不对。chatGPT知道。 “as well as” 和 “as good as” 都是英语中常见的短语&#xff0c;但它们有不同的用法和含义。 “As Well As”&#xff08;以及&#xff09;: “As well as” 是一个连接词短语&#xff0c;用来连接两…

最优闭回路问题

目录 一、欧拉回路与道路 1、欧拉回路与道路 2、欧拉图存在的条件 二、中国邮路问题 1、中国邮路问题 2、中国邮路问题求解 3、有奇点的G的中国邮路问题等价问题 例1 【问题分析】 &#xff08;1&#xff09;先求图1中任意两点之间的距离矩阵d1如表1&#xff08;Floyd算…

软件测试肖sir__python之ui自动化定位方法(2)

Selenium中元素定位方法 一、定位方法 要实现UI自动化&#xff0c;就必须学会定位web页面元素&#xff0c;Selenium核心 webdriver模块提供了9种定位元素方法&#xff1a; 定位方式 提供方法 id定位 find_element_by_id() name定位 find_element_by_name() class定位 find_elem…