初始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.2:app.py代码

5.3:index.html模板

5.4:代码解析

5.5:运行博客应用


1:Flask框架概述

Flask 是一个基于 Python 的 轻量级 Web 框架,遵循 “微框架”(Microframework) 设计理念。它提供了 Web 开发的核心功能(如路由、请求/响应处理、模板渲染等),但不强制集成额外组件(如数据库 ORM、用户认证),开发者可以自由选择扩展来增强功能。

1.1:安装Flask

Linux自带python:
pip3 config set global.index-url http://mirrors.aliyun.com/pypi/simple
#信任更新源
pip3 config set install.trusted-host mirrors.aliyun.com
pip3 install --upgrade pip           #设置更新源
history

网站编程:
Flask框架:
#安装Flask框架:
pip install flask

1.2:创建你的的一个Flask应用

创建一个测试文件vim aaa.py

from  flask import Flask		#导入模块

app=Flask(_name_)		#创建一个flask应用

@app.route('/')		#定义路由和视图函数
def hello_word():
	return 'hello,word!\n'

#api应用层接口,默认监听5000端口
if _name_ == '_main_':		#启动应用,创建入口
	app.run(host='0.0.0.0',port=5000,debug=True)		#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应用

#运行程序
python3 aaa.py
#客户端访问
curl 192.168.10.101:5000

2:Flask路由与视图函数

2.1:动态路由

  • 作用:处理URL中的可变部分,实现参数传递。

  • 语法:@app.route('/path/<variable>')<variable>默认是字符串类型。

  • 类型转换器:

    • string:默认,接受任何不包含斜杠的文本。

    • int:接受正整数。

    • float:接受正浮点数。

    • path:类似string但包含斜杠。

    • uuid:接受UUID字符串。

@app.route('/greet/<name>')	#动态路由
de greet(name):
	return f'hello,{name}\n'		#f返回的是字符串

2.2:支持多种HTTP请求方法

  • 默认方法:GET,可通过methods参数指定其他方法(如POSTPUTDELETE等)。

  • 获取请求方法:通过request.method判断当前请求类型。

#支持多种HTTP请求方法
@app.route('/submit',methods=['POST'])		
def submit():
	return 'Form submitted successfully!\n'

代码解析:

  • methods=['POST'] 限制该路由只能通过 POST 请求访问。如果客户端发送 GET 请求到 /submit,会返回 405 Method Not Allowed 错误。

2.3:使用jinja2模板渲染HTML

  • 步骤:

    1. 创建templates文件夹存放HTML模板。

    2. 使用render_template()函数渲染模板并传递变量。

  • 变量传递:在模板中用{{ variable }}显示动态内容。

  • 控制结构:支持{% if %}``{% for %}等逻辑语句。

mkdir templates	#创建文件用于存放模块
cd templates/
vim greet.html
<html>
<head>
<meta charset='UTF-8'>
<title>zhangsan</title>
</head>

<body>
<h1>hello,{{ name }}</h1>
</body>

</html>
:set paste       #取消自动缩进

#修改aaa.py
from  flask import Flask,render_template	#导入模块
#修改aaa.py中的动态路由
@app.route('/greet/<name>')	#动态路由
de greet(name):
	return render_template('greet.html',name=name)
客户端访问浏览器:
http://192.168.10.101

代码解析:

  • render_template('模板名.html', 变量名1=值1, 变量名2=值2, ...)。模板文件需放在项目根目录下的 templates 文件夹中。

2.4:模板继承与块

  • 模板继承:通过{% extends "base.html" %}继承基础模板,避免重复代码。

  • 块(Block):

    • 基础模板中定义可替换块:{% block block_name %}{% endblock %}

    • 子模板中覆盖块内容:{% block block_name %}New Content{% endblock %}

cd templates/
基础模板(父模版)vim base.html

<html>
<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>
#div:分区标签
子模版(子模版调用父模版)vim  index.html
{% extends 'base.html' %}

{% block title %}Home{% endblock %}

{% block content %}
<h2>Welcome to the homepage!</h2>
{% endblock %}

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

3.1:安装Flask-WTF

  • 作用:Flask-WTF是简化表单处理的扩展,集成WTForms(表单验证和渲染库)。

  • 安装

pip install flask-wtf

3.2:创建一个简单的表单

from flask_wtf import FlaskForm
from wtforms import StringField, PasswordField, SubmitField
from wtforms.validators import DataRequired, Email

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)

代码解析:

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

index.html模板:

<html>
<head>
<meta charset='UTF-8'>
<title>zhangsan</title>
</head>

<body>
<h1>Enter your name:</h1>
<form method="POST">
{{ form.csrf_token }}
<label for="name">Name:</label>
{{ form.name() }}<br><br>
<button type="submit">Submit</button>
</form>

{% if form.name.data %}
<h2>hello,{{ from.name.data }}</h2>
{% endif %}
</body>
</html>

代码解析:

  • {{form.csrf_token}}:Flask-WTF 会自动生成并验证 CSRF token,以防止跨站请求伪造攻击。
  • {{form.name () }}:这是通过 Jinja2 模板渲染 NameForm 表单的字段。form.name () 会生成对应的 HTML 标签。
  • {% if form.name.data %}:如果用户提交了表单并且 name 字段不为空,则显示欢迎信息。

3.3:表单验证

  • 验证流程:

    1. 视图函数中创建表单实例。

    2. 调用form.validate_on_submit()检查请求是否为POST且数据有效。

    3. 若验证通过,处理数据;否则返回模板显示错误。

  • 错误显示:通过form.field.errors获取错误信息。

  • Length (min=2, max=50):验证输入的长度。
  • Email ():验证输入是否是有效的邮箱地址。
  • EqualTo ('password'):验证两个字段的值是否相等。

4:Flask的项目结构与部署

4.1:项目结构

/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:项目结构

blog_app/
│
├── app.py               # 主应用文件
├── templates/           # 模板目录
│   └── index.html       # 首页模板
├── static/              # 静态文件目录(可选)
│   ├── css/             # CSS样式文件
│   └── js/              # JavaScript文件
└── requirements.txt     # 依赖文件(可选)

5.2:app.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)

5.3:index.html模板

<!DOCTYPE html>
<html>
<head>
    <title>简单博客</title>
</head>
<body>
    <h1>我的博客</h1>
    
    <h2>添加新文章</h2>
    <form action="/add" method="post">
        <label for="title">标题:</label><br>
        <input type="text" id="title" name="title" required><br>
        <label for="content">内容:</label><br>
        <textarea id="content" name="content" required></textarea><br>
        <button type="submit">发布</button>
    </form>
    
    <h2>文章列表</h2>
    {% if posts %}
        <ul>
        {% for post in posts %}
            <li>
                <h3>{{ post.title }}</h3>
                <p>{{ post.content }}</p>
            </li>
        {% endfor %}
        </ul>
    {% else %}
        <p>还没有文章,赶快添加一篇吧!</p>
    {% endif %}
</body>
</html>

5.4:代码解析

  1. 数据存储:我们通过 Python 的 posts 列表存储所有提交的文章,每一篇文章由一个包含 title 和 content 的字典表示。
  2. 表单提交:当用户通过表单提交文章时,Flask 会将文章的标题和内容添加到 posts 列表中。
  3. 模板渲染:Flask 通过 render_template 将所有文章渲染到 index.html 模板中,使用 {% for post in 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、付费专栏及课程。

余额充值