Flask Case:从入门到实践
Flask简介与安装
Flask 这是一个轻量级的 Python Web 应用框架。简单易用,同时为开发者提供多种扩展,可以快速构建基本的web应用。Flask的核心理念是“微核心”(microframework),这意味着它保持了一个简单的核心,但可以通过各种扩展来灵活扩展。
Flask的安装非常简单,如果您已经安装了pip,可以通过以下命令安装Flask。:
pip install Flask
安装完成后,您可以通过几行简单的代码启动最基本的Flask应用程序,体验其快速部署的特点。
Flask的基本用法
在Flask中,最简单的web应用程序包括三个部分:环境准备、路由设置和服务器启动。第一,我们需要将Flask类引入flask模块,并创建一个Flask的例子。接着,设置路由和相应的处理函数。最终,运行服务器来响应请求。
下面是创建Flask应用程序最简单的示例代码:
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello, World!' if __name__ == '__main__': app.run(debug=True)
该代码创建了一个处理器,以满足根URL('/')的要求,并在访问时返回。Hello, World!"。通过这些行代码,我们启动了一个简单的Web服务器。
Flask模板渲染
实际上,Web应用程序不能只回到简单的字符串。Flask可以通过Jinja2模板引擎将变量替换到HTML模板,从而提供模板渲染功能。它使我们能够创建一个动态的HTML页面,并在不同的请求中返回不同的内容。
假设我们有一个叫index的名字.位于templates目录下的html模板文件。本模板文件可以通过render_template函数加载,并将变量传递给它:
from flask import Flask, render_template app = Flask(__name__) @app.route('/hello/<name>') def hello(name): return render_template('index.html', name=name) if __name__ == '__main__': app.run(debug=True)
在上述代码片段中,hello函数中的“name"参数将被传入index.在html模板中,并渲染HTML页面。这样,每次用户访问“/hello当你的名字像URL一样时,页面会显示“Hello, 您的名字!"。
Flask中使用的数据库是什么?
在真实的应用场景中,通常需要存储和查询数据。Flask为操作数据库提供了扩展,例如Flask。-SQLAlchemy。它能方便地操作数据库,并能通过ORM操作数据库(Object-Relational Mapping)与直接使用SQL语句相比,技术操作对象。
下面是一个使用Flask-SQLAlchemy的例子,它创建了一个模型类User,并演示了如何将新用户添加到数据库中:
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.sqlite' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), nullable=False) def __repr__(self): return '<User %r>' % self.username # 创建数据库和表格 with app.app_context(): db.create_all() # 添加新用户 @app.route('/user/<username>', methods=['POST']) def add_user(username): new_user = User(username=username) db.session.add(new_user) db.session.commit() return 'User added.'
在上面的例子中,我们首先连接到一个SQLite数据库,并在数据库中定义了一个User模型。用户名可以通过访问特定的路由添加到数据库中。
Flask中的表单处理
站点应用程序通常需要处理用户输入的表单数据。Flask可配合Werkzeug工具箱处理HTTP请求数据。此外,Flask-WTF扩展为WTForms提供了集成,使得表单处理更加易用和安全。
下面的例子显示了如何使用Flask-WTF处理简单的登录表格:
from flask import Flask, render_template, flash, redirect, url_for from flask_wtf import FlaskForm from wtforms import StringField, PasswordField, SubmitField from wtforms.validators import DataRequired app = Flask(__name__) app.config['SECRET_KEY'] = 'your_secret_key' class LoginForm(FlaskForm): username = StringField('Username', validators=[DataRequired()]) password = PasswordField('Password', validators=[DataRequired()]) submit = SubmitField('Log In') @app.route('/login', methods=['GET', 'POST']) def login(): form = LoginForm() if form.validate_on_submit(): # 将验证用户登录的代码添加到此处 flash('Login requested for user {}, password={}'.format( form.username.data, form.password.data)) return redirect(url_for('index')) return render_template('login.html', title='Sign In', form=form) if __name__ == '__main__': app.run(debug=True)
在这个例子中,我们定义了一个LoginForm类别,它继承自FlaskForm类别。这个类别描述了一个包含用户名和密码输入框和提交按钮的表格。在/login路由中,我们创建了一个LoginForm的例子,并在用户提交表格时验证数据。如果验证成功,将显示一条消息,并将其重新定位到index页面。