Flask Web开发

Flask之旅《Flask Web开发:基于Python的Web应用开发实战》学习笔记 Flask 搭建博客网站 用户自定义头像 数据库模型,自动产生EER 阅读详情

示例地址 https://github.com/miguelgrinberg/flasky

第一章 安装

1.1使用虚拟环境

virtualenv --version查看安装VENV的版本

Python 3.3 通过 venv 模块原生支持虚拟环境,命令为 pyvenv。pyvenv 可以替
代 virtualenv。不过要注意,在 Python 3.3 中使用 pyvenv 命令创建的虚拟环
境不包含 pip,你需要进行手动安装。Python 3.4 改进了这一缺陷,pyvenv 完
全可以代替 virtualenv。

按照惯例,一般虚拟环境会被命名为 venv

激活命令是: venv\Scripts\activate

虚拟环境被激活后,其中 Python 解释器的路径就被添加进 PATH 中,但这种改变不是永久性的,它只会影响当前的命令行会话。

第二章 程序的基本结构

@app.route('/user/<name>')
尖括号中的内容就是动态部分,任何能匹配静态部分的 URL 都会映射到这个路由上。调用视图函数时,Flask 会将动态部分作为参数传入函数。

路由中的动态部分默认使用字符串,不过也可使用类型定义。例如,路由 /user/<int:id>只会匹配动态片段 id 为整数的 URL。Flask 支持在路由中使用 int、float 和 path 类型。path 类型也是字符串,但不把斜线视作分隔符,而将其当作动态片段的一部分。

2.5.1 程序和请求上下文

为了避免大量可有可无的参数把视图函数弄得一团糟,Flask 使用上下文临时把某些对象变为全局可访问。

在 Flask 中有两种上下文:程序上下文和请求上下文。

current_app 程序上下文 当前激活程序的程序实例
g 程序上下文 处理请求时用作临时存储的对象。每次请求都会重设这个变量
request 请求上下文 请求对象,封装了客户端发出的 HTTP 请求中的内容
session 请求上下文 用户会话,用于存储请求之间需要“记住”的值的词典

Flask 在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。程
序上下文被推送后,就可以在线程中使用 current_app 和 g 变量。类似地,请求上下文被
推送后,就可以使用 request 和 session 变量。如果使用这些变量时我们没有激活程序上
下文或请求上下文,就会导致错误。

>>> app_ctx = app.app_context()
>>> app_ctx.push()
>>> current_app.name
'hello'
>>> app_ctx.pop()
在这个例子中,没激活程序上下文之前就调用 current_app.name 会导致错误,但推送完上
下文之后就可以调用了。注意,在程序实例上调用 app.app_context() 可获得一个程序上
下文。


URL 映射是 URL 和视图函数之间的对应关系。Flask 使用 app.route 修饰器或者非修饰器形式的 app.add_url_rule() 生成映射。

app.url_map检查生成的映射

/static/<filename> 路由是Flask 添加的特殊路由,用于访问静态文件。

URL 映射中的 HEAD、Options、GET 是请求方法,由路由进行处理。

为了避免在每个视图函数中都使用重复的代码,Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。
请求钩子使用修饰器实现。

Flask 支持以下 4 种钩子

• before_first_request:注册一个函数,在处理第一个请求之前运行。
• before_request:注册一个函数,在每次请求之前运行。
• after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
• teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量 g。例如,before_request 处理程序可以从数据库中加载已登录用户,并将其保存到 g.user 中。随后调用视
图函数时,视图函数再使用 g.user 获取用户。


如果视图函数返回的响应需要使用不同的状态码,那么可以把数字代码作为第二个返回
值,添加到响应文本之后。例如,下述视图函数返回一个 400 状态码,表示请求无效:
@app.route('/')
def index():
return '<h1>Bad Request</h1>', 400
视图函数返回的响应还可接受第三个参数,这是一个由首部(header)组成的字典,可以
添加到 HTTP 响应中。一般情况下并不需要这么做,不过你会在第 14 章看到一个例子。
如果不想返回由 1 个、2 个或 3 个值组成的元组,Flask 视图函数还可以返回 Response 对
象。make_response() 函数可接受 1 个、2 个或 3 个参数(和视图函数的返回值一样),并
返回一个 Response 对象。有时我们需要在视图函数中进行这种转换,然后在响应对象上调
用各种方法,进一步设置响应。下例创建了一个响应对象,然后设置了 cookie:
from flask import make_response
@app.route('/')
def index():
response = make_response('<h1>This document carries a cookie!</h1>')
response.set_cookie('answer', '42')
return response
有一种名为重定向的特殊响应类型。

<pre name="code" class="python">from flask import redirect

@app.route('/')
def index():
       return redirect('http://www.example.com')


还有一种特殊的响应由 abort 函数生成,用于处理错误。

注意,abort 不会把控制权交还给调用它的函数,而是抛出异常把控制权交给 Web 服务器。

专为 Flask 开发的扩展都暴漏在 flask.ext 命名空间下。


第三章 模板

视图函数的作用很明确,即生成请求的响应。

业务逻辑和表现逻辑

默认情况下,Flask 在程序文件夹中的 templates 子文件夹中寻找模板

@app.route('/user/<name>')
def user(name):
     return render_template('user.html', name=name)
Flask 提供的 render_template 函数把 Jinja2 模板引擎集成到了程序中。render_template 函数的第一个参数是模板的文件名。随后的参数都是键值对,表示模板中变量对应的真实值。


模板中使用的 {{ name }} 结构表示一个变量,它是一种特殊的占位符,告诉模
板引擎这个位置的值从渲染模板时使用的数据中获取。
Jinja2 能识别所有类型的变量,甚至是一些复杂的类型,例如列表、字典和对象。在模板中使用变量的一些示例如下:
<p>A value from a dictionary: {{ mydict['key'] }}.</p>
<p>A value from a list: {{ mylist[3] }}.</p>
<p>A value from a list, with a variable index: {{ mylist[myintvar] }}.</p>
<p>A value from an object's method: {{ myobj.somemethod() }}.</p>

可以使用过滤器修改变量,过滤器名添加在变量名之后,中间使用竖线分隔。

safe 过滤器值得特别说明一下。默认情况下,出于安全考虑,Jinja2 会转义所有变量。例如,如果一个变量的值为 '<h1>Hello</h1>',Jinja2 会将其渲染成 '&lt;h1&gt;Hello&lt;/
h1&gt;',浏览器能显示这个 h1 元素,但不会进行解释。


{% if user %}
    Hello, {{ user }}!
{% else %}
    Hello, Stranger!
{% endif %}

<ul>
{% for comment in comments %}
<li>{{ comment }}</li>
{% endfor %}
</ul>

Jinja2 还支持宏。宏类似于 Python 代码中的函数。例如:

{% macro render_comment(comment) %}
<li>{{ comment }}</li>
{% endmacro %}
<ul>
{% for comment in comments %}
{{ render_comment(comment) }}
{% endfor %}
</ul>

为了重复使用宏,我们可以将其保存在单独的文件中,然后在需要使用的模板中导入:

{% import 'macros.html' as macros %}
<ul>
{% for comment in comments %}
{{ macros.render_comment(comment) }}
{% endfor %}
</ul>

需要在多处重复使用的模板代码片段可以写入单独的文件,再包含在所有模板中,以避免重复:
{% include 'common.html' %}


另一种重复使用代码的强大方式是模板继承,它类似于 Python 代码中的类继承。首先,创建一个名为 base.html 的基模板:

<html>
<head>
{% block head %}
<title>{% block title %}{% endblock %} - My Application</title>
{% endblock %}
</head>
<body>
{% block body %}
{% endblock %}
</body>
</html>

block 标签定义的元素可在衍生模板中修改。在本例中,我们定义了名为 head、title 和body 的块。注意,title 包含在 head 中。下面这个示例是基模板的衍生模板:

{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style>
</style>
{% endblock %}
{% block body %}
<h1>Hello, World!</h1>
{% endblock %}

extends 指令声明这个模板衍生自 base.html。在 extends 指令之后,基模板中的 3 个块被重新定义,模板引擎会将其插入适当的位置。注意新定义的 head 块,在基模板中其内容不是空的,所以使用 super() 获取原来的内容。

Flask 提供了 url_for() 辅助函数,它可以使用程序 URL 映射中保存的信息生成 URL。

调用 url_for('index', _external=True) 返回的则是绝对地址,在这个示例中是 http://localhost:5000/。

使用 url_for() 生成动态地址时,将动态部分作为关键字参数传入。例如,url_for('user', name='john', _external=True) 的返回结果是 http://localhost:5000/user/john。
传入 url_for() 的关键字参数不仅限于动态路由中的参数。函数能将任何额外参数添加到查询字符串中。例如,url_for('index', page=2) 的返回结果是 /?page=2。

默认设置下,Flask 在程序根目录中名为 static 的子目录中寻找静态文件。

{% block head %}
{{ super() }}
<link rel="shortcut icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
type="image/x-icon">
<link rel="icon" href="{{ url_for('static', filename = 'favicon.ico') }}"
type="image/x-icon">
{% endblock %}

第四章 WEB表单

默认情况下,Flask-WTF 能保护所有表单免受跨站请求伪造(Cross-Site Request Forgery,CSRF)的攻击。恶意网站把请求发送到被攻击者已登录的其他网站时就会引发 CSRF 攻击。

app.config 字典可用来存储框架、扩展和程序本身的配置变量。使用标准的字典句法就能把配置值添加到 app.config 对象中。这个对象还提供了一些方法,可以从文件或环境中导入配置值。

为了增强安全性,密钥不应该直接写入代码,而要保存在环境变量中。

Flask Web开发实战指南 本文还有配套的精品资源,点击获取 简介:《Web开发与烧瓶》是一本教授如何使用Python的Flask框架进行Web开发的教程。Flask被设计为轻量级且易于扩展的WSGI微框架,适合初学者和小型项目。教程内容包括Flask的基本概念、核心功能以及如何构建Web应用。涉及路由定义、视图函数编写、模板引擎Jinja2的应用、用户数据处理、数据库集成、安全性措施以及部署等方面。... 阅读详情

相关推荐

Python Flask Web应用开发实战指南

Flask是一个轻量级的Web应用框架,遵循Python编程语言的“约定优于配置”的原则。它为开发者提供了一个强大的基础,用于构建Web应用和服务。Flask的设计初衷是帮助开发者创建一个简单的应用,但是又不失扩展性,允许开发人员在必要时增加更多的功能。通过使用Jinja2作为模板引擎,以及Werkzeug作为WSGI工具集,Flask得以以简洁的API和灵活的方式快速构建Web应用。在Web开发中,路由和视图函数是构建应用基础结构的两个关键要素。它们共同作用于将用户请求转换为相应的页面或功能。

weixin_31459297的博客 1859

轻量级web开发框架:Flask 基础教程

Flask 简介 什么是Flask? Flask是一个用Python编写的Web应用程序框架。Flask基于Werkzeug(WSGI工具包)和Jinja2模板引擎。 什么是Web Framework? Web Application Framework(Web应用程序框架)或简单的Web Framework(Web框架)表示一个库和模块的集合,使Web应用程序开发人员能够编写应用程序,而......

薛定谔的猫-前端领域 4万+

数字音频接口之I2S总线协议详解

1、SDATA,也就是串行数据信号,使用二进制传输数字信号。请注意数据的传输形式为补码的方式2、例如音频的采样率是8K,一s内存采样8K个点,一个点包含一个左声道,一个右声道,所以LRCK是8K,BCLK是2×采样频率×采样位数3、同时双向(TX和RX)音频流:串行数据同步移位到时钟信号SCK和LRCK。在SCK的下降沿将TX数据写入SDOUT引脚,并在SCK的上升沿从SDIN引脚读取RX数据。始终首先发送最高有效位(MSB);TX和RX均可在主模式和从模式下使用。

卓学课堂 3万+

【Flask框架入门】构建你的第一个Web应用

Flask是一个轻量级的WSGI Web应用框架,由Python编写而成。它的设计哲学是“保持简单,但不简单”,即提供足够的灵活性以适应各种应用场景,而不过分复杂。Flask是微框架,意味着它不会强制你使用特定的工具或库,你可以根据项目的需要来决定使用哪些扩展包。接下来,我们定义一个数据模型(数据库表)。假设我们想要在应用中保存用户信息,我们可以创建一个Userid是主键,用于唯一标识每一个用户。username和email是字符串字段,并且必须是唯一的(),且不能为空(

一键难忘的博客 4063

端侧视觉赋能手游自动化:YOLOv8+NCNN实现低风险挂机与广告拦截

本文提出一种基于端侧AI的移动游戏自动化解决方案,采用YOLOv8目标检测和NCNN推理框架,结合AutoJS实现"感知-决策-执行"闭环。方案通过轻量化模型训练、多分辨率适配和行为拟态优化,解决了传统脚本的适配性和风控问题。关键技术包括:构建游戏专属数据集、模型量化优化、广告拦截和挂机功能实现,具有本地运行、安全稳定等特点,为个人开发者提供了一套完整的自动化开发框架。

milk416666的博客 1263

VS2022下OSG+OSGEARTH开发环境一键配置指南(Win10 x64+CMake自动化构建)

本文详细介绍了在VS2022环境下配置OSG和OSGEARTH开发环境的完整指南,包括软件下载、CMake自动化构建、编译实战及环境验证。通过一键配置脚本和常见问题解决方案,帮助开发者快速搭建3D开发环境,提升开发效率。

weixin_28828243的博客 405

Flask web开发基础

Flask是一个免费的web框架,也是一个年轻、充满活力的小型框架,开发文档齐全,社区活跃度高,有着众多支持者。Flask的设计目标是实现一个WSGI的微框架,其核心代码十分简单。

weixin_42577686的博客 2248

别再混淆了!5分钟搞懂机器人导纳控制与阻抗控制的本质区别(附Simulink对比仿真)

本文深入解析机器人柔顺控制中的导纳控制与阻抗控制的本质区别,通过信号流方向、架构对比和应用场景三个关键视角进行详细阐述。文章还提供Simulink对比仿真案例,帮助读者快速理解两种控制策略的差异及其适用场景,特别适合机器人控制领域的研究者和工程师参考。

weixin_42543046的博客 604

Python Flask-Web框架

Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务!

WK攻城狮的博客 2050

用 Claude Code 快速摸清一个陌生代码库

摘要:Claude Code作为AI编码助手,能帮助开发者快速理解陌生代码库。与传统代码搜索不同,它从项目根目录出发,通过分析目录结构、配置文件等技术栈信息,提供系统级的概览。最佳实践是先通过"give me an overview"获取整体架构,再深入数据模型、认证流程等核心模块。它能生成术语表、编码规范和推荐的代码阅读路径,极大降低新成员的学习成本。相比传统方式,Claude Code能主动探索项目上下文,无需人工整理相关文件,使代码理解过程更接近有经验的工程师带教。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 89

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 880

【Flask】Web启程与实现一个基于Flask的最小应用程序

虽然是一名算法工程师,但是实际情况是不仅要懂算法,还要懂工程。算法实现后,算法效果展示,算法落地等就需要一些工程化的内容。算法工程化的一个简单方式就是将落地的算法包装成服务,供他人调用。 那么问题来了,我们需要了解一下服务相关的内容。对外提供服务的方式也有多种方式,例如基于GRPC的服务,基于Restful的api接口服务等。当然,我个人感觉使用基于restful的api接口方式是使用比较多的。于是在了解Python web的相关框架,如Django,Flask, FastAPI等,综合考虑使用Flask去

让算法融入生活,改变生活! 1507

《网络安全自学教程》- SQL注入之报错注入原理+步骤+实战操作

这篇文章为大家解析报错注入的实现原理,结合实战案例讲解报错注入的使用步骤。

wangyuxiang946的博客 1万+

Python Flask开发web应用

Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。Flask是目前十分流行的web框架,采用Python编程语言来实现相关功能。

2869

ZED双目相机环境配置

ZED SDK 安装文件夹中有一个 Python 脚本(get_python_api.py),可以自动检测操作系统、CUDA 和 Python 版本并下载相应的预编译 Python API 包(pyzed)。安装SDK成功后,我们进入ZED SDK文件夹中的tools子文件夹,运行ZED Explorer.exe 以及 ZED Depth Viewer.exe,查看ZED相机是否能正常启用工作。在本例中,我们简单地检索ZED相机的序列号:打开 ZED相机,然后打印其序列号,然后关闭相机。

qq_53545309的博客 2134

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python web开发之flask项目实战总结

在线问答系统项目介绍功能描述一、前端设计二、数据库设计1.引入库2.读入数据总结 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录项目介绍功能描述一、前端设计二、数据库设计1.引入库2.读入数据总结 项目介绍     该系统是基于Python的Web开发实战项目,前端框架采用Bootstrap,后端采用Flask框架,模板引擎为Jinja2,数据库采用Mysql8.0,开发环境为Python3.9,Flask2.0.1。 功能描述 &n

weixin_51999266的博客 8809

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python开发从入门到精通:Web开发与Flask框架

Flask Web开发核心指南 本文介绍了使用Flask框架进行Web开发的全面知识体系,主要内容包括: Web开发基础:讲解了HTTP协议、请求响应机制、常见HTTP方法和状态码等核心概念 Flask框架入门:从安装配置到创建第一个"Hello World"应用,快速上手Flask开发 核心功能详解: 路由与视图函数:基本路由、变量路由和HTTP方法处理 Jinja2模板引擎:模板继承、变量渲染等高级用法 表单处理:使用Flask-WTF进行表单验证和数据处理 实战应用:通过登录和注册

编程世界如山海,探索不止。 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Python的Web 开发框架 Flask

Flask是一个基于Python的轻量级Web框架,其目标是使得构建Web应用程序更加容易。Flask使用简单,灵活性高,适合快速开发原型和小型Web应用程序。本文将介绍Flask的基础知识、特点、组成部分、路由机制、模板引擎、表单处理、扩展等相关内容。Flask的基础知识Flask是一个基于Python的Web框架,由Armin Ronacher在2010年创建。Flask使用Werkzeug和Jinja2这两个Python库构建,可以轻松地创建Web应用程序。

Kali与编程 1583

Flask Web 开发实战指南

### 背景简介 `flasky` 是由 Miguel Grinberg 创建的一个示例项目,旨在配合其 O'Reilly 出版书籍《Flask Web Development》(第二版)的教学,帮助读者深入理解和掌握 Flask 框架的应用开发流程。 该项目不仅包含了完整的 Web 应用程序实例,还详细展示了如何运用 Flask 及其扩展构建现代 Web 应用的关键技术点,包括但不限于路由、视...

gitblog_01016的博客 1156

Flask Web开发实战资源:助你快速掌握Web开发技能

Flask Web开发实战资源:助你快速掌握Web开发技能 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在Web开发领域,Flask作为一款轻量级的Python Web框架,因其简洁、灵活和易用性而备受开发者青睐。然而,对于初学者来说,如何将理论知识转化为实际项目经验仍然是一个挑战。为了帮助广大Flask开发者更好地掌握Web开发技能,我们推出了这个名为Flask-...

gitblog_09707的博客 998

python上手--flask框架web开发实践-数据库

这篇文章,由易而难,步骤清晰,思路讲得很明白。花两小时跟着作者稻谷先生的这篇文章走一遍,对学习python使用Flask来开发web的应用很有帮助。

plumlee的专栏 5691

使用Flask轻松开展Python Web开发之旅

使用Flask轻松开展Python Web开发之旅 在快速发展的Web开发领域中,找到一个既轻量又强大的框架至关重要。今天,我们将探索一款广受欢迎的开源框架——Flask,通过深入“Python Web Development with Flask”项目,这是一份由Miguel Grinberg精心准备的教程代码库,旨在让每一位开发者能够迅速上手并精通Flask。 项目介绍 该项目基于GitHub...

gitblog_00977的博客 745

Flask Web 开发

Falsk提供一个强健的核心,其中包含每个Web应用都需要的基本功能,而其他功能交给生态系统众多的第三方扩展,当然,也可以自行开发。让开发者做主,对应用拥有全面的创意控制。 在大多数标准中,Flask都算是小型框架,小到可以称为“微框架”。Flask非常小,因此一旦熟练使用它,很可能就能读懂它所有源码。

胡嚞衎的博客 1271

Flask Web应用开发

Flask Web应用开发是一个涉及多个步骤和技术的过程,主要包括环境搭建、需求分析、设计、编码、测试、部署和维护等阶段。

Flask Web 1028

python Web 开发 Flask 介绍

WEB开发是现在程序必会的技能,因为大部分软件都以Web形式提供,及时制作后台开发,或者只做前台开发,也需要了解Web开发的概念和特点。由于Python是解释性脚本语言,用来做Web开发非常适合,而且Python有上百种Web开发框架,以及成熟的模板技术,使得Web开发如虎添翼。今天借用Flask框架,快速学习一下Python的Web开发知识。 Flask框架 Flask的设计易于使用和扩展。它的初衷是为各种复杂的Web应用程序构建坚实的基础。可以自由地插入任何扩展。也可以自由构建自己的模块。Flask适合

Javachichi的博客 922

Flask开发系列之Web表单

Flask开发系列之Web表单 简单示例 from flask import Flask, request, render_template app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def home(): return render_template('home.html') ...

weixin_33775572的博客 1922
上一篇: Flask在SAE中的配置指南
下一篇: SAE 配置预装 django1.8.3中出现的问题
mighty13
博客等级 码龄23年 728粉丝 438原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值