初识Flask框架

目录

1.Flask框架概述

1.1安装Flask

1.2创建你的第一个Flask应用

1.3运行Flask应用

2.Flask路由与视图函数

2.1动态路由

2.2支持多种HTTP请求方法

2.3使用Jinja2模块渲染HTML

2.4模板继承与块

3.Flask表单处理与用户输入

3.1安装Flask-WTF

3.2创建一个简单的表单

3.3表单验证

4.Flask的项目结构与部署

4.1项目结构

4.2部署Flask应用

5.小案例:简单博客应用

5.1项目结构

5.2app.py代码

5.3index.html模板

5.4代码解析

5.5运行博客应用


1.Flask框架概述

Flask作为一个微框架,强调简单性和灵活性。它依赖于两个重要的Python库来提供核心功能:
> Werkzeug:这是Flask的底层库,提供了WSGI接口、HTTP请采我和响应处理、路由等核心功能。
> Jinja2:一个功能强大的模板引擎,用于动态生成HTML页面。
Flask的设计目的是让开发者能够快速开发应用,并提供了灵活的方式进行扩展。如果你不需要复杂的功能,Flask的核心本身已经足够满足需求。如果你需要更多高级特性,可以通过Flask的扩展库进行补充。

1.1安装Flask

安装Flask非常简单,只需使用Python的包管理工具pip即可:

pip install flask

安装完成后,你可以通过创建一个简单的Flask应用来验证是否安安装成功

1.2创建你的第一个Flask应用

Flask的应用结构非常简单,只需创建一个Python文件,并通过FIlask()类来实例化应用对象。以下是一个最简单的Flask应用示例:

from flask import Flask

#创建Flask应用实例
app = Flask(_name_)

#定义路由和视图函数
@app.route(
def hello world():
    return 'Hello, World!'

#启动应用
if __name__ == '__main__':
    app.run(debug=True)

代码解析:
> Flask(_name_):创建Flask应用实例,_name_参数月于Flask了解当前模块的名称,通常我们使用这个参数来帮助Flask在不同模块间进行配置。
> @app.route('/'):定义路由和视图函数的映射。'/'是根路径,当用户访问根URL时,Flask会调用hello_world()函数。
> return'Hello,World!':视图函数返回一个简单的字符串响应,Flask 会将其作为HTTP响应返回给客户端。
> app.run(debug=True):启动Flask开发服务器,debug=True表示启用调试模式,这样可以在开发过程中自动重载应用,并在发生错误时显示详细信息。

1.3运行Flask应用

保存上述代码为app.py,然后在命令行中运行:

python app.py

这时Flask会启动一个开发服务器,默认会监听1277.0.0.1:5000。打开测览器,访问
http://127.0.0.1:5000/,你会看到"Hello,World!"的质面

2.Flask路由与视图函数

Flask的核心之一就是路由系统,它将用户访问的URL与对应的视图函数相连接。Flask通过装饰器
@app.route()来定义路由,而视图函数则负责处理用户的请求并返回响应。

2.1动态路由

Flask支持动态路由参数,可以通过URL中的动态部分来获取数据。以下是一个示例

@app.route('/greet/<name>')
def greet(name):
    return f'Hello, {name}!'

代码解析:
> <name>:这是一个动态路由参数,Flask会提取URL中的name部分并将其传递给视图函数。
> 当用户访问/greet/John时,name的值将为John,返回的响应为Hello,John!

2.2支持多种HTTP请求方法

Flask不仅支持GET请求,还支持其他常见的HTTP请求方法,如POST、PUT、DELETE等。你可以通过
methods参数来指定允许的请求方法:

@app.route('/submit', methods=['POST'])
def submit(
    return 'Form submitted successfully!'

代码解析:
methods=['POST']:只允许POST请求访问此路由。如果用户通过GET请求访问,Flask会返回
405 Method Not Allowed 错误。

2.3使用Jinja2模块渲染HTML

Flask结合Jinja2模板引擎来动态生成HTML页面。你可以将HTML文件与Python代码分离,保持应用结构清晰。在Flask中,模板文件默认存放在templates文件夹中

假设我们有一个名为greet.html的模板文件,内容如下:

<!DOCTYPE html>
<html lang="en""en">
<head>
    <meta charset="UTF-8">
    <title>Flask Example</title>
</head>
<body>
    <h1>Hello, {{ name }}!</h1>
</body>
</html>

在Flask应用中,我们可以通过render_template函数渲染模板并传专业动态数据

from flask import render_template
@app.route('/greet/<name>')
def greet(name):
    return render_template('greet.html', name=name)

代码解析:
> render_template('greet.html',name=name):Flask会加载greet.html模板,并将name
的值传递给模板。模板中的{{name}}会被替换为传入的值。

2.4模板继承与块

Flask支持模板继承和块(Block)功能,这对于构建复杂页面非常有用。你可以在基础模板中定义通用的布局结构,在子模板中覆盖特定的部分。

基础模板base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}My Website{% endblock %}</title
</head>
<body>
    <header>
        <h1>Welcome to My Website</h1>
    </header>
    <div>
        {% block content %}{% endblock %}
    </div>
    <footer>
        <p>&copy; 2025 My Website</p>
    </footer>
</body>
</html>

子模板index.html:
{% extends 'base.html' %}
{% block title %}Home{% endblock %}
{% block content %}
    <h2>Welcome to the homepage!</h2>
{% endblock %}

代码解析:
> extends'base.html'%}:子模板继承了base.html模板。
> blocktitle %}Home{%endblock %}:覆盖父模板中的title块
> {%block content%}:定义页面的主要内容区域。

3.Flask表单处理与用户输入

Flask可以通过表单来获取用户输入,常见的做法是结合Flask-WTF扩展来简化表单处理和验证。
Flask-WTF为Flask提供了一个表单类,你可以在表单类中定义字段和验证规则

3.1安装Flask-WTF

pip install flask-wtf

3.2创建一个简单的表单

from flask import Flask, render_template, request
from flask_wtf import FlaskForm
from wtforms import StringField
from wtforms.validators import DataRequired

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

class NameForm(FlaskForm):
    name = StringField('Name', validators=[DataRequired()])

@app.route('/', methods=['GET', 'POST'])
def index():
    form = NameForm()
    if form.validate_on_submit():
        return f'Hello, {form.name.data}!'
    return render_template('index.html', form=form)

if __name__ == '__main__':
  #app.run(debug=True)
  app.run(host='0.0.0.0', port=5000, debug=True)

代码解析:
> FlaskForm:继承自FlaskForm类,定义表单字段。
> StringField('Name', validators=[DataRequired()]): វិ义了一个文本输入字段,并且通过DataRequired()验证器确保字段不能为空。
> form.validate_on_submit():检查表单是否通过验证并被提交。

3.3表单验证

Flask表单处理的强大之处在于它的验证机制。通过wtforms,你你可以非常方便地为表单字段添加各种验证规则。比如,除了DataRequired(),你还可以使用:
> Length(min=2,max=50):验证输入的长度。
> Email():验证输入是否是有效的邮箱地址。
> EqualTo('password'):验证两个字段的值是否相等。

4.Flask的项目结构与部署

4.1项目结构

随着应用的复杂度增加,Flask应用的结构通常会发生变化。一个典型的Flask项目结构如下:

/my_flask_app
    /app
        /templates
            index.html
        /static
            /css
            /js
        __init__.py
        routes.py
        forms.py
     run.py

> /templates:存放所有HTML模板文件。
> /static:存放静态文件(如CSS、JS、图片等)。
> _init_.py:初始化Flask应用。
> routes.py:定义所有路由和视图函数。
> forms.py:定义表单类。

4.2部署Flask应用

Flask应用的开发环境通常使用Flask run启动,但在生产环境中,我们需要通过更强大的Web服务器
进行部署,常见的有:
Gunicorn:一个Python WSGI HTTP服务器,常用于生产环境部署。
Nginx:作为反向代理,前端处理静态文件请求,转发动态请求到Flask应用部署时,可以通过以下命令启动Flask应用:
gunicorn -w 4 run:app

5.小案例:简单博客应用

5.1项目结构

/simple_blog

    /app

        /templates

            index.html

        app.py

5.2app.py代码

from flask import Flask, render_template, request

app = Flask(__name__)

# 存储所有文章
posts = []

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        posts.append({'title': title, 'content': content})
    return render_template('index.html', posts=posts)

if __name__ == '__main__':
  #app.run(debug=True)
  app.run(host='0.0.0.0', port=5000, debug=True)

5.3index.html模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Simple Blog</title>
</head>
<body>
    <h1>Welcome to the Blog!</h1>
    <h2>Submit a Post</h2>
    <form method="POST">
        <label for="title">Title:</label>
        <input type="text" id="title" name="title" required><br><br>
        <label for="content">Content:</label>
        <textarea id="content" name="content" required></textarea><br><br><br>
        <button type="submit">Submit</button>
    </form>
    <h2>Posts:</h2>
    <ul>
        {% for post in posts %}
            <li>
                <h3>{{post.title }}</h3>
                <p>{{ post.content }}</p>
            </li>
        {%endfor %}
    </ul>
</body>
</html>

5.4代码解析

1.数据存储:我们通过Python的posts列表存储所有提交交的文章,每一篇文章由一个包含title和content的字典表示。
2.表单提交:当用户通过表单提交文章时,Flask会将文章的标题和内容添加到posts列表中。
3.模板渲染:Flask通过render_template将所有文章渲染到index.html模板中,使用{%forpostin posts%}循环显示每一篇文章。

5.5运行博客应用

1.将app.py和index.html保存到相应文件夹中。
2.在命令行中运行Flask应用:python app.py
3.访问http://127.0.0.1:5000/,你将看到一个简单的博客界面,能够提交文章并查看已发布的内容。
注意:
    和前面的实验一起做的时候这里可能访问报错,如果有钱错误,清理一下缓存即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值