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

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

2024-04-29 12:04:27 前端知识 前端哥 137 390 我要收藏

目录

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

连接数据库

# 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
# 连接数据库

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

转载请注明出处或者链接地址:https://www.qianduange.cn//article/6383.html
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!