昨天的文章写了使用Flask框架实现基础的增删改查,通篇只是一个.py文件,看起来非常的简单。
实际工作中,一个项目不可能就一个模块,比如首页、订单、我的等等。如果全部写在一个文件内,代码会非常冗余且逻辑也不清晰,查找起来也不方便。所以进行模块的拆分就非常有必要。
这篇文章目的主要是实现接口定义的模块化拆分和统一引入,保证接口能正常进行调用。
下面就开始进入正题吧!
首先打开Pycharm,假设你有以下文件结构:
在 _init_.py 中,创建Flask应用实例,并进行一些初始化操作:
# 需要用到的包引入
from pymysql import Connection
from flask import Flask
from flask_cors import CORS
conn = Connection(
host="localhost",
port=3306,
user="root",
password="123456",
autocommit=True
)
# 获取游标对象
cursor = conn.cursor()
# 选择数据库
conn.select_db("test")
# 后端服务启动 新建Flask实例
app = Flask(__name__)
# 为所有路径启用CORS
CORS(app)
# 导入视图模块来注册路由,. 符号用来表示当前包的目录;注意需要在app创建之后导入
# 可以根据自己项目需要拆分多个,这里只演示两个
from . import login
from . import student
在login.py中,定义路由和相应的视图函数:
from flask import request, jsonify
from flask_moudle.route import app, cursor
# 登录接口
@app.route("/login", methods=['POST'])
def login_student():
username = request.form.get("username")
password = request.form.get("password")
if not username or not password:
return jsonify({"message": "缺少必填参数"}), 400
query = "select * from user where username=%s and password=%s"
try:
cursor.execute(query, (username, password))
user_data = cursor.fetchone() # 获取查询结果的第一行
if user_data:
# 处理用户数据
return jsonify({"message": f"学生{username}登录成功"}), 200
else:
return jsonify({"message": "用户名或密码错误"}), 401
except Exception as e:
return jsonify({"message": str(e)}), 500
同理在student.py 也是定义了相关路由
from flask import request, jsonify
from flask_moudle.route import app, cursor
# 获取列表数据
@app.route("/student/list", methods=['GET'])
def student_list():
# 获取某个参数,例如 'name'
name = request.args.get('name')
# 构造查询语句
if name:
# 使用LIKE操作符和通配符%来查询包含name的记录
query = "select * from student where name like %s"
# 使用%%作为通配符%的转义,因为%在SQL中是特殊字符
cursor.execute(query, ('%' + name + '%',))
else:
# 如果没有name参数,查询所有记录
query = "select * from student"
cursor.execute(query)
try:
# 获取查询结果
data = cursor.fetchall()
except Exception as e:
# 处理数据库查询异常
print(f"查询异常: {e}")
return jsonify([]), 500
# 将结果转换为字典列表
# 这段代码使用了Python的列表推导式(list comprehension)来将一个数据库查询结果列表转换为包含字典的列表
result = [
{
"id": row[0],
"name": row[1],
"age": row[2]
} for row in data
]
# 返回JSON响应
return jsonify(result)
# 下面还有许多......
最后,在flask_app.py中,你可以导入app对象,并运行它:
from flask_moudle.route import app, conn
if __name__ == "__main__":
app.run("0.0.0.0", port=9090, debug=True)
# 关闭数据库
conn.close()
最后我们来通过postman验证一下接口是否可以正常访问。
一切OK~
想分几个模块就分几个,这样的话就可以肆无忌惮的写啦!