Python搭建Flask+MySQL+Blueprint项目

本文介绍如何使用Python的Flask框架结合MySQL数据库和Blueprint组件构建Web项目,包括环境搭建、路由设置、数据库集成及RESTful API实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:Python搭建Flask+MySQL+Blueprint项目 - coder的自我修养

Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。
Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。

1、新建工程

我们在pycham里新建工程File --> New Project这里我们选择Flask工程,选择目录后点击Create

这样我们一个简单的flask工程就新建好了下面我们看一下目录结构

可以看到目录下文件很少下面我们来解释一下

  • static:存放静态资源

  • templates:存放页面模板

  • app.py:项目入口

2、设置运行环境

为了避免与其他项目的环境造成冲突,所以这里我们为本项目新建虚拟的python环境一般会默认新建一个,如果没有则按照以下步骤新建File --> Settings --> Project:flask-mysql --> Project Interpreter

选择好目录后点击 OK,这里我已经新建好了,就不在新建了

这样我们就创建了一个简单的flask项目,下面让我们来运行它

3、运行Flask项目

打开app.py

from flask import Flask

# Flask初始化参数尽量使用你的包名,这个初始化方式是官方推荐的
app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

右键 Run 'Flask(app.py)'运行项目

出现如下信息说明启动成功

flask的默认端口是5000,我们用Postman来访问一下

下面我们来修改一下启动端口及其他参数

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8090, debug=True)
  • host:默认 127.0.0.1,只能本机访问, 如果你需要外网访问,ip需要设置为0.0.0.0

  • port:端口,默认5000

  • debug: 调试模式,开发环境使用,生产不推荐

端口改为之后我们再访问8090端口

4、集成MySQL和Blueprint

我们使用Flask-SQLAlchemy来连接MySQL安装Flask-SQLAlchemy

pip3 install Flask-SQLAlchemy

这里我们直接在pycharm里安装File --> Settings --> Project:flask-mysql --> Project Interpreter点击红框中的 + 号

输入 Flask-SQLAlchemy

然后Install Package就好
按照以上方法来安装PyMySQL、Flask-Restful新建config.py用来配置一些MySQL相关信息写入以下配置

class DevConfig:
    SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:root@localhost:3306/test?charset=UTF8MB4"
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = True

新建database.py用来初始化db

写入以下代码

from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

flask_sqlalchemy模块并不需要与app一起初始化,可以使用空的代替而应用启动时,可以使用以下方式初始化

db.init_app(app)

新建user包,用来做查询测试在user包下新建如下文件

  • blueprint.py 蓝图restful api配置

  • models.py 用来存放数据库表模型

  • views.py 实体方法

models.py

from database import db


class User(db.Model):
    __tablename__ = 'user'
    __table_args__ = {"useexisting": True}
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(255))
    email = db.Column(db.String(255))
    password = db.Column(db.String(255))
    def __repr__(self):
        return '<User %r>' % self.username

User类与数据库中user表相对应user表结构如下

blueprint.py

# coding: utf8
from flask import Blueprint
from utils.blueprint_util import add_resource
from . import views


user_blueprint = Blueprint('user', __name__, url_prefix='/user')
config = [
    (views.UserView, '/')
]

add_resource(user_blueprint, config)

views.py

from flask_restful import Resource
from user.models import User
from database import db
from utils import db_util
from flask import request
import json


class UserView(Resource):
    # get方法
    def get(self):
        users = User.query.filter().all()
        return db_util.query_to_dict(users)
    
    # post方法
    def post(self):
        data = json.loads(request.data)
        user = User(username=data.get('username'), password=data.get('password'), email=data.get('email'))
        db.session.add(user)
        return db_util.query_to_dict(user)

新建utils工具包并在utils包下新建blueprint_util.py和db_util.py

  • blueprint_util.py:蓝图相关

  • db_util.py:models转为dict相关

blueprint_util.py

from flask_restful import Api


def add_resource(blueprint, config):
    """添加restful资源配置
    """
    api = Api(blueprint)
    for view, url in config:
        api.add_resource(view, url)

db_util.py

from datetime import datetime  # 有时候会返回datatime类型
from datetime import date, time
from flask_sqlalchemy import Model
from sqlalchemy import DateTime, Numeric, Date, Time  # 有时又是DateTime


def query_to_dict(models):
    if isinstance(models, list):
        if isinstance(models[0], Model):
            lst = []
            for model in models:
                gen = model_to_dict(model)
                dit = dict((g[0], g[1]) for g in gen)
                lst.append(dit)
            return lst
        else:
            res = result_to_dict(models)
            return res
    else:
        if isinstance(models, Model):
            gen = model_to_dict(models)
            dit = dict((g[0], g[1]) for g in gen)
            return dit
        else:
            res = dict(zip(models.keys(), models))
            find_datetime(res)
            return res

# 当结果为result对象列表时,result有key()方法
def result_to_dict(results):
    res = [dict(zip(r.keys(), r)) for r in results]
    # 这里r为一个字典,对象传递直接改变字典属性
    for r in res:
        find_datetime(r)
    return res

def model_to_dict(model):  # 这段来自于参考资源
    for col in model.__table__.columns:
        if isinstance(col.type, DateTime):
            value = convert_datetime(getattr(model, col.name))
        elif isinstance(col.type, Numeric):
            value = float(getattr(model, col.name))
        else:
            value = getattr(model, col.name)
        yield (col.name, value)

def find_datetime(value):
    for v in value:
        if isinstance(value[v], datetime):
            value[v] = convert_datetime(value[v])  # 这里原理类似,修改的字典对象,不用返回即可修改

def convert_datetime(value):
    if value:
        if isinstance(value, (datetime, DateTime)):
            return value.strftime("%Y-%m-%d %H:%M:%S")
        elif isinstance(value, (date, Date)):
            return value.strftime("%Y-%m-%d")
        elif isinstance(value, (Time, time)):
            return value.strftime("%H:%M:%S")
    else:
        return ""

现在项目最终的目录结构如下

修改app.py代码如下

from flask import Flask
from database import db
from user.blueprint import user_blueprint
from config import DevConfig


app = Flask(__name__)
app.config.from_object(DevConfig)

db.init_app(app)

app.register_blueprint(user_blueprint)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8090, debug=True)

下面我们再来启动app用postman访问post方式 http://localhost:8090/user/

看一下数据库中数据

新增成功再用get方式来访问http://localhost:8090/user/

查询成功本文只介绍了简单项目搭建以及简单的使用方法。详细用法见后续文章。如有错误请提出指正。

博客地址:http://www.imcoder.fun

博客链接:Python搭建Flask+MySQL+Blueprint项目 - coder的自我修养

欢迎关注公众号: coder 的自我修养

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值