您的位置:

Flask入门指南

一、什么是Flask

Flask是一个轻量级、开源的Python Web框架,基于Werkzeug工具箱和Jinja2模板引擎,它的设计目标是简单、灵活的,适用于小型应用和个人项目。

相较于其他Python Web框架,Flask的特点是代码简洁、易学易用,没有过多的依赖和默认配置,可以轻松地进行扩展和定制。

Flask的主要特色:

  • 微型框架,只提供了最基本的功能
  • 灵活的扩展机制
  • 可定制性强
  • 支持多种数据库
  • 有丰富的社区资源

二、Flask的基本使用

搭建环境

在开始使用Flask前,需要先安装相应的依赖包。可以使用下面的命令:

pip install Flask

安装完成后,在Python的交互式环境中尝试一下import,如果没有报错,则说明安装成功。

编写Hello World应用

下面我们来尝试编写一个最简单的Flask应用,输出“Hello World”。在项目根目录下创建一个Python文件app.py:

from flask import Flask

app = Flask(__name__)

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

if __name__ == '__main__':
    app.run()
  • 首先引入Flask模块,然后实例化Flask类
  • @app.route('/')是一个装饰器,用于绑定URL和视图函数
  • def hello_world()是一个简单的视图函数,返回'Hello, World!'字符串
  • 最后判断是否为主模块,然后执行app.run()

在终端中执行以下命令,启动Flask应用:

FLASK_APP=app.py flask run

此时可以在浏览器中访问http://127.0.0.1:5000/ ,可以看到输出了“Hello, World!”

三、Flask的路由定义

参数传递

路由规则中可以指定参数,参数的格式为“<param_type:param_name>”,其中param_type表示参数类型,例如int、float、path等,param_name表示参数名称。在函数中,可以通过argement获取参数值。

from flask import Flask

app = Flask(__name__)

@app.route('/user/
   ')
def show_user_profile(user_id):
    return 'User %d' % user_id

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

   

上述代码中指定路由规则为/user/<int:user_id>,其中user_id是int类型。在函数中直接使用user_id参数,访问http://127.0.0.1:5000/user/123 可以看到输出了“User 123”。

HTTP方法

Flask默认只支持GET方法,可以使用methods参数指定支持哪些HTTP方法。

from flask import Flask, request

app = Flask(__name__)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 验证用户名和密码
        return 'Login Success!'
    else:
        return 'Please Login!'

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

上述代码中,指定路由规则为/login,支持GET和POST方法。如果是POST方法,取出表单中的username和password进行验证,否则返回“Please Login!”

四、使用模板引擎

模板引擎的概念

模板引擎是一种用于生成动态HTML页面的工具,通常会带有一些控制流程、条件语句和变量等基本功能。在Flask中,常用的模板引擎包括Jinja2和Mako等。

Jinja2的使用

Jinja2是一个基于Python的模板引擎,可以非常方便地和Flask集成。Jinja2的语法简单易懂,非常适合用于构建HTML和XML等动态页面。

首先需要在项目目录下创建一个templates目录,用于存放模板文件。下面是一个简单的模板文件login.html,用于展示一个用户登录界面:

<html>
  <head>
    <title>Login</title>
  </head>
  <body>
    <form method="post" action="/login">
      <label>Username:</label><br/>
      <input type="text" name="username" /><br/>
      <label>Password:</label><br/>
      <input type="password" name="password" /><br/>
      <input type="submit" value="Login" /><br/>
    </form>
  </body>
</html>

在Flask应用中,需要引入render_template方法,然后通过它输出模板页面。

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 验证用户名和密码
        return 'Login Success!'
    else:
        return render_template('login.html')

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

上述代码中,当请求为GET方法时,使用render_template方法输出login模板页面。当请求为POST方法时,进行登录验证。

五、使用数据库

ORM介绍

ORM(Object Relational Mapping)是一种面向对象编程语言中,用于实现关系数据库数据与对象之间转换的技术。ORM框架屏蔽了底层数据库的具体实现细节,使得使用者可以更加专注于业务逻辑和程序设计,降低了开发难度和维护成本。

SQLAlchemy的使用

SQLAlchemy是一个基于Python的ORM框架,封装了Python和多种数据库之间的底层API,可以轻松实现数据库的增删改查等基本操作。在Flask中,常用的使用第三方扩展Flask-SQLAlchemy来集成。

首先需要安装Flask-SQLAlchemy:

pip install flask_sqlalchemy

下面是一个简单的数据库模型,用于表示用户信息:

from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()

class User(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(255), nullable=False)
    password = db.Column(db.String(255), nullable=False)
    created_at = db.Column(db.DateTime, default=datetime.now)

    def __repr__(self):
        return '
   ' % self.username

   

在主应用中,需要初始化db对象,然后注册对应的路由,使用db对象进行数据库操作。

from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)

# 用户登录
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 验证用户名和密码,这里假设验证成功

        # 将用户名保存到数据库中
        user = User(username=username, password=password)
        db.session.add(user)
        db.session.commit()

        return 'Login Success!'
    else:
        return render_template('login.html')

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

上述代码中,首先指定了数据库URI为sqlite格式。在登录函数中,如果验证通过,则将用户名和密码保存到数据库中。

六、扩展和定制Flask

Flask扩展介绍

Flask自身功能比较简洁,可以通过第三方的Flask扩展来实现更多的功能。Flask扩展通常包含一组函数和类,用于扩展Flask的功能,例如发送邮件、上传文件、缓存等。

Flask邮件扩展

Flask-Mail是一个常用的邮件扩展,用于发送和接收邮件。首先需要安装Flask-Mail:

pip install Flask-Mail

下面是使用Flask-Mail发送邮件的示例代码:

from flask_mail import Mail, Message
from flask import Flask

app = Flask(__name__)

app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'yourname@qq.com'
app.config['MAIL_PASSWORD'] = 'yourpassword'

mail = Mail(app)

@app.route('/')
def index():
    msg = Message('Hello', sender='yourname@qq.com', recipients=['recipient@example.com'])
    msg.body = "Hello Flask!"
    mail.send(msg)
    return 'Mail sent successfully!'

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

在Flask应用中,需要初始化Mail对象,然后定义路由函数发送邮件。

七、总结

在这篇文章中,我们对Flask进行了全面的介绍。从基本使用到路由定义、模板引擎和数据库的使用,再到Flask的扩展和定制,都进行了详细的阐述。通过学习Flask的使用,可以构建出轻巧、高效的Web应用。