蓝布编程网

分享编程技术文章,编程语言教程与实战经验

【Python】网络开发之高效Web 框架 - Flask 库

Flask 简介

#python##python自学#

Flask 是一个轻量级的 Python Web 开发框架。它具有简单、灵活、易扩展的特点,适用于构建各种类型的小型和中型 Web 应用程序。

Flask 的核心思想是将 Web 开发过程中的各个部分进行分离,例如请求处理、URL 路由、模板渲染等,使得开发者能够更加专注于业务逻辑的实现。它提供了一系列工具和扩展,帮助开发者快速实现需求。

与其他 Web 框架相比,Flask 的优势在于它的简单性和灵活性,这使得它非常适合用于快速原型开发和小型 Web 应用的构建。它没有复杂的配置和约束,可以让开发者快速上手,并且具有良好的扩展性,可以根据需求添加各种插件和扩展。

总体而言,Flask 是一个非常优秀的 Web 开发框架,适用于各种场景,是快速构建 Web 应用的理想选择。

Flask 基本用法

Flask 的基本用法如下:
安装 Flask:在命令行或终端中执行以下命令,即可完成安装。

pip install Flask

创建 Flask 应用:在 Python 文件中导入 Flask 库,创建 Flask 应用对象,代码如下:

from flask import Flask

app = Flask(__name__)

定义路由:使用 Flask 的 route 装饰器定义请求 URL 和对应的处理函数,代码如下:

@app.route('/')
def index():
    return 'Hello, Flask!'
启动 Flask 应用:使用 Flask 应用对象的 run 方法启动 Flask 应用,代码如下:
python
Copy code
if __name__ == '__main__':
    app.run()

测试 Flask 应用:在浏览器中访问 http://localhost:5000,查看 Flask 应用的输出。
以上是 Flask 的基本用法,你可以通过编写代码实现更复杂的功能,例如处理表单数据、使用模板渲染页面、设置路由参数等

Flask 高级用法

Flask 高级用法包括:
模板渲染:Flask 使用 Jinja2 模板引擎进行模板渲染,可以动态生成 HTML 页面。

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

在模板文件 index.html 中使用 Jinja2 语法,例如:

<!DOCTYPE html>
<html>
<head>
    <title>Flask 高级用法 - 模板渲染</title>
</head>
<body>
    <h1>{{ title }}</h1>
    <p>{{ message }}</p>
</body>
</html>

表单处理:Flask 支持处理 HTML 表单数据,例如:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        username = request.form['username']
        return 'Hello, {}!'.format(username)
    return render_template('index.html')

在模板文件 index.html 中创建 HTML 表单,例如:

<!DOCTYPE html>
<html>
<head>
    <title>Flask 高级用法 - 表单处理</title>
</head>
<body>
    <form action="/" method="post">
        <input type="text" name="username">
        <input type="submit" value="提交">
    </form>
</body>
</html>

路由参数:Flask 可以在 URL 中包含参数,并在处理函数中获取参数值。

from flask import Flask

app = Flask(__name__)

@app.route('/user/<username>')
def user(username):
    return 'Hello, {}!'.format(username)

在浏览器中访问
http://localhost:5000/user/flask,即可看到 "Hello, flask!" 的输出。

数据库:Flask 支持使用多种数据库,例如 SQLite、MySQL、PostgreSQL 等,可以使用 Flask-SQLAlchemy 模块简化数据库操作。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

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

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)
    
    def __repr__(self):
        return '<User %r>' % self.username
        
@app.route('/')
def index():
    user = User.query.first()
    return 'Hello, {}!'.format(user.username)

文件上传:Flask 支持文件上传,例如:

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        file = request.files['file']
        file.save('uploads/' + file.filename)
        return '文件上传成功!'
    return render_template('index.html')

在模板文件 index.html 中创建 HTML 文件上传表单,例如:

<!DOCTYPE html>
<html>
<head>
    <title>Flask 高级用法 - 文件上传</title>
</head>
<body>
    <form action="/" method="post" enctype="multipart/form-data">
        <input type="file" name="file">
        <input type="submit" value="提交">
    </form>
</body>
</html>

认证和授权:Flask 可以使用 Flask-Login 模块实现用户认证和授权功能。

from flask import Flask, redirect, url_for, request, render_template
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required

app = Flask(__name__)
app.secret_key = 'secret_key'

login_manager = LoginManager()
login_manager.init_app(app)

class User(UserMixin):
    def __init__(self, id):
        self.id = id
        self.username = 'user' + str(id)
        self.password = self.username + '_secret'
        
    def __repr__(self):
        return '<User %r>' % self.username

users = [User(id) for id in range(1, 6)]

@login_manager.user_loader
def load_user(user_id):
    return users[int(user_id) - 1]

@app.route('/')
def index():
    return '首页'

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        for user in users:
            if user.username == username and user.password == password:
                login_user(user)
                return redirect(url_for('protected'))
        return '用户名或密码错误!'
    return render_template('login.html')

@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('index'))

@app.route('/protected')
@login_required
def protected():
    return '登录成功!'

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

在上面的代码中,通过 login_manager.user_loader 装饰器为 Flask-Login 指定一个用户加载回调函数,在这个回调函数中,根据给定的用户 ID 返回一个用户对象。
通过 @login_required 装饰器保护了一些页面,要求登录后才能访问,否则会被重定向到登录页面。
如果你需要更多信息,请参阅 Flask-Login 官方文档

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言