匠心精神 - 良心品质腾讯认可的专业机构-IT人的高薪实战学院

咨询电话:4000806560

【一步一步教】Python Flask Web框架入门实战教程

【一步一步教】Python Flask Web框架入门实战教程

Python是当下最受欢迎的编程语言之一,其优雅简洁的代码风格和强大的生态系统赢得了无数开发者的青睐。而在Python的Web框架中,Flask凭借着其轻量级、易用性和高灵活性,在不断壮大的Python生态圈中愈发受到欢迎。本文将从实战出发,一步一步教你如何使用Flask Web框架搭建一个简单的Web应用。

1. 环境准备

在开始之前,我们需要准备好Python的环境和必要的依赖库。确保你的电脑上已经安装了Python3和pip,并在命令行中执行以下命令安装Flask和其它必要的依赖库:

```
pip3 install flask
pip3 install flask-wtf
pip3 install flask-bootstrap
pip3 install flask-login
pip3 install flask-migrate
```

2. 创建一个Flask应用

Flask应用的核心是一个Python模块,我们可以先在项目目录下创建一个app.py文件,并在其中导入Flask库:

```python
from flask import Flask

app = Flask(__name__)
```

这里我们创建了一个名为app的Flask对象。__name__参数用来表示这个模块会作为整个Flask应用的主模块。

3. 创建一个简单的路由

路由用来指定浏览器访问应用时的URL对应哪个Python函数,接下来我们创建一个简单的路由,让应用返回“Hello, world!”:

```python
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello, world!'
```

这里我们使用了@app.route装饰器来指定路由。当用户访问应用的根路径时,Flask会调用hello函数并将其返回值显示在浏览器中。

4. 添加HTML模板支持

现在我们来让应用返回一个HTML页面。Flask支持使用Jinja2模板引擎来渲染HTML模板,一般我们把模板放在templates目录下。首先在项目目录下创建一个templates目录,并在其中创建一个index.html文件:

```html



    Hello, world!


    

Hello, world!

``` 接下来我们修改app.py文件,让路由返回这个HTML模板: ```python from flask import Flask, render_template app = Flask(__name__) @app.route('/') def index(): return render_template('index.html') ``` Flask提供了render_template函数来渲染HTML模板。在路由中返回render_template('index.html')会自动读取templates目录下的index.html文件,并将其渲染后返回给浏览器。 5. 创建一个表单 现在我们来创建一个表单,让用户可以输入一些数据并提交到服务器。首先我们需要在HTML模板中添加一个表单,并使用Flask-WTF库来处理表单的验证和提交: ```html Hello, Flask!

Hello, Flask!

{{ form.csrf_token }} {{ form.name.label }} {{ form.name() }}
{{ form.email.label }} {{ form.email() }}
``` 这里我们使用了Flask-WTF库的表单处理功能。我们首先定义了一个名为form的变量,其值为一个FlaskForm对象。然后我们在HTML模板中使用{{ form.name() }}和{{ form.email() }}来渲染表单的输入框,同时也渲染了一个csrf_token隐藏字段,用来防止跨站请求伪造攻击。 接下来我们修改app.py文件,让路由处理表单提交,并在提交成功后重定向到一个结果页面: ```python from flask import Flask, render_template, redirect, url_for from flask_wtf import FlaskForm from wtforms import StringField, SubmitField from wtforms.validators import DataRequired, Email app = Flask(__name__) app.config['SECRET_KEY'] = 'mysecretkey' class MyForm(FlaskForm): name = StringField('Name', validators=[DataRequired()]) email = StringField('Email', validators=[DataRequired(), Email()]) submit = SubmitField('Submit') @app.route('/', methods=['GET', 'POST']) def index(): form = MyForm() if form.validate_on_submit(): return redirect(url_for('result', name=form.name.data, email=form.email.data)) return render_template('index.html', form=form) @app.route('/result//') def result(name, email): return f'Thank you, {name}! We have received your email: {email}.' if __name__ == '__main__': app.run(debug=True) ``` 这里我们首先定义了一个MyForm类来呈现表单,然后在路由中使用form = MyForm()来创建一个表单实例。在路由函数中我们使用form.validate_on_submit()来验证表单是否被提交,并获取表单中的数据。如果表单验证成功,我们使用redirect(url_for('result', name=form.name.data, email=form.email.data))来重定向到结果页面,并将表单数据作为参数传递给结果页面的路由。如果表单验证失败,我们将其传递给HTML模板,并在模板中渲染出错误信息。 6. 添加用户认证功能 最后我们来添加一些用户认证功能,让应用可以识别已经登录的用户。首先我们使用Flask-Login库来处理用户认证: ```python from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required login_manager = LoginManager() login_manager.login_view = 'login' login_manager.init_app(app) class User(UserMixin): pass @login_manager.user_loader def load_user(user_id): return User() @app.route('/login') def login(): user = User() login_user(user) return redirect(url_for('index')) ``` 这里我们首先定义了一个User类来代表应用中的用户。然后我们使用Flask-Login库的login_user函数来实现用户登录功能。在登录路由中我们创建了一个新的User实例,并将其传递给login_user函数。 接下来我们需要创建一个logout路由,以实现用户退出功能: ```python @app.route('/logout') @login_required def logout(): logout_user() return redirect(url_for('index')) ``` 这里我们使用了@login_required装饰器来保护logout路由,确保只有已经登录的用户才可以访问。 最后,我们在index路由的HTML模板中添加一些用户认证相关的信息,以便用户可以通过登录和退出来切换身份: ```html Hello, Flask!

Hello, Flask!

{% if current_user.is_authenticated %}

Welcome, {{ current_user.get_id() }}! Logout

{% else %}

You are not logged in. Login

{% endif %}
{{ form.csrf_token }} {{ form.name.label }} {{ form.name() }}
{{ form.email.label }} {{ form.email() }}
``` 这里我们首先使用了Flask-Login库提供的current_user变量来判断当前用户是否已经登录,如果是,则显示欢迎信息和退出链接,否则显示登录链接。注意到我们使用了current_user.get_id()来获取当前登录用户的ID,因为我们的User类中没有实现__str__方法。 至此,我们已经完成了一个简单的Flask应用的搭建,其中包含了路由、HTML模板、表单处理、用户认证等多个功能。希望本文可以帮助你入门Flask,也希望你能在实际项目中应用Flask来开发更加高效、灵活、易用的Web应用。