python Flask 框架入门

Flask 是一个轻量级的 Python Web 框架,它被称为"微框架"(microframework),因为它核心简单但可扩展性强。Flask 由 Armin Ronacher 开发,基于 Werkzeug WSGI 工具包和 Jinja2 模板引擎。

在Python的Flask框架中,代码结构通常遵循MVC(Model-View-Controller)或类似的设计模式,尽管Flask本身并不强制使用MVC模式,但它提供了足够的灵活性来支持这种结构。下面是一个基本的Flask应用的结构示例,其中包括了MVC的概念和一些常见的文件组织方式。

一、项目结构:

bash 复制代码
/my_flask_app
    /app
        __init__.py
        models.py
        views.py
        forms.py
    /static
        /css
        /js
        /images
    /templates
        base.html
        index.html
        about.html
    config.py
    run.py

二、主要文件说明

app/__init__.py

python 复制代码
from flask import Flask
from .views import main_blueprint  # 导入蓝图
 
def create_app():
    app = Flask(__name__)
    app.config.from_object('config.DevelopmentConfig')  # 加载配置
    
    # 注册蓝图
    app.register_blueprint(main_blueprint)
    
    return app

app/models.py

python 复制代码
from flask_sqlalchemy import SQLAlchemy
 
db = SQLAlchemy()
 
class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)

app/views.py (或称为 controllers)

python 复制代码
from flask import Blueprint, render_template, request, redirect, url_for
from .models import db, User  # 导入模型和数据库对象
from .forms import LoginForm  # 导入表单类(如果使用)
 
main_blueprint = Blueprint('main', __name__)  # 创建蓝图对象
 
@main_blueprint.route('/')
def index():
    return render_template('index.html')
 
@main_blueprint.route('/about')
def about():
    return render_template('about.html')

app/forms.py

python 复制代码
from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email, EqualTo, Length
 
class LoginForm(FlaskForm):
    username = StringField('Username', validators=[DataRequired()])
    password = PasswordField('Password', validators=[DataRequired()])
    submit = SubmitField('Log In')

config.py

python 复制代码
class Config:
    DEBUG = False
    TESTING = False
    SECRET_KEY = 'your_secret_key'  # 用于会话加密的密钥,应保持安全并更改生产环境的值。
    SQLALCHEMY_DATABASE_URI = 'sqlite:///your-database-path'  # 数据库URI配置。例如:'sqlite:///app.db' 或 'mysql://user:password@localhost/db_name' 等。
    SQLALCHEMY_TRACK_MODIFICATIONS = False  # 关闭对模型修改的跟踪,减少内存消耗。
    # 其他配置...

run.py__main__.py (启动文件)

python 复制代码
from app import create_app  # 从初始化文件导入create_app函数。确保你的初始化文件中有这个函数。
from app.models import db  # 导入数据库对象,用于创建表等操作。如果使用SQLAlchemy扩展。
import os  # 可能需要导入os来设置环境变量等。例如:os.environ['FLASK_ENV'] = 'development'。根据需要使用。
import click  # 可选:用于创建命令行接口。例如,用于数据库迁移等操作。如果使用,需要安装click库。pip install click。然后可以添加命令

主要特点

  1. 轻量级:核心功能简单,没有默认的数据库、表单验证等组件

  2. 灵活可扩展:可以通过扩展添加所需功能

  3. 易于学习:API 设计简洁,文档完善

  4. 开发快速:适合快速原型开发和小型项目

  5. Jinja2 模板引擎:内置强大的模板系统

  6. 内置开发服务器和调试器:方便开发和测试

基本组件

  • 路由系统:将 URL 映射到 Python 函数

  • 模板引擎:Jinja2,支持模板继承

  • 请求和响应对象:处理 HTTP 请求和响应

  • 会话管理:支持客户端会话

  • 扩展支持:数据库、表单验证、认证等通过扩展实现

常用扩展

  • Flask-SQLAlchemy:数据库ORM

  • Flask-WTF:表单处理

  • Flask-Login:用户认证

  • Flask-RESTful:构建REST API

  • Flask-Mail:发送邮件

  • Flask-Migrate:数据库迁移

适用场景

  • 小型到中型Web应用

  • 微服务架构

  • RESTful API 开发

  • 快速原型开发

  • 作为大型应用的前端服务

与Django的比较

特性 Flask Django
类型 微框架 全功能框架
灵活性 较低
学习曲线 平缓 较陡峭
内置功能 多(ORM,admin等)
适用项目 小型,API,灵活需求 大型,传统Web应用
相关推荐
lsx2024066 小时前
Java 对象概述
开发语言
啊阿狸不会拉杆6 小时前
《机器学习导论》第 9 章-决策树
人工智能·python·算法·决策树·机器学习·数据挖掘·剪枝
Mr_Xuhhh6 小时前
C++11实现线程池
开发语言·c++·算法
喵手6 小时前
Python爬虫实战:城市停车收费标准自动化采集系统 - 让停车费透明化的技术实践(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·城市停车收费标准·采集城市停车收费数据·采集停车数据csv文件导出
无水先生6 小时前
python函数的参数管理(01)*args和**kwargs
开发语言·python
py小王子6 小时前
dy评论数据爬取实战:基于DrissionPage的自动化采集方案
大数据·开发语言·python·毕业设计
Pyeako6 小时前
opencv计算机视觉--LBPH&EigenFace&FisherFace人脸识别
人工智能·python·opencv·计算机视觉·lbph·eigenface·fisherface
小陶的学习笔记6 小时前
python~基础
开发语言·python·学习
多恩Stone6 小时前
【3D AICG 系列-9】Trellis2 推理流程图超详细介绍
人工智能·python·算法·3d·aigc·流程图
ID_180079054736 小时前
Python结合淘宝关键词API进行商品价格监控与预警
服务器·数据库·python