当前位置: 首页 > news >正文

Flask 第四课 -- 基本概念

目录

一. 前言

二. 路由 (Routing)

三. 视图函数 (View Functions)

四. 请求对象 (Request Object)

五. 响应对象 (Response Object)

六. 模板 (Templates)

七. 应用工厂 (Application Factory)

八. 配置对象 (Configuration Objects)

九. 蓝图 (Blueprints)

十. 静态文件 (Static Files)

十一. 扩展 (Extensions)

十二. 会话 (Sessions)

十三. 错误处理 (Error Handling)


一. 前言

上一个章节我们已经学会了如何创建第一个 Flask 应用,本章节我们将来详细了解 Flask 的一些基本概念。

了解 Flask 的基本概念对于开发高效的 Web 应用非常重要。

以下是 Flask 的主要基本概念的详细解析:

  • 路由:路由是 URL 到 Python 函数的映射。Flask 允许你定义路由,这样当特定的 URL 被访问时,就会调用相应的函数。

  • 视图函数:视图函数是处理请求并返回响应的 Python 函数。它们通常接收请求对象作为参数,并返回响应对象。

  • 请求对象:请求对象包含了客户端发送的请求信息,如请求方法、URL、请求头、表单数据等。

  • 响应对象:响应对象包含了发送给客户端的响应信息,如状态码、响应头、响应体等。

  • 模板:Flask 使用 Jinja2 模板引擎来渲染 HTML 模板。模板允许你将 Python 代码嵌入到 HTML 中,从而动态生成网页。

  • 应用工厂:应用工厂是一个 Python 函数,它创建并返回一个 Flask 应用实例。这允许你配置和初始化你的应用,并且可以创建多个应用实例。

  • 配置对象:Flask 应用有一个配置对象,你可以使用它来设置各种配置选项,如数据库连接字符串、调试模式等。

  • 蓝图:蓝图是 Flask 中的一个组织代码的方式,它允许你将相关的视图函数、模板和静态文件组织在一起,并且可以在多个应用中重用。

  • 静态文件:静态文件是不会被服务器端执行的文件,如 CSS、JavaScript 和图片文件。Flask 提供了一个简单的方法来服务这些文件。

  • 扩展:Flask 有许多扩展,可以添加额外的功能,如数据库集成、表单验证、用户认证等。

  • 会话:Flask 使用客户端会话来存储用户信息,这允许你在用户浏览你的应用时记住他们的状态。

  • 错误处理:Flask 允许你定义错误处理函数,当特定的错误发生时,这些函数会被调用。

二. 路由 (Routing)

路由是 URL 到 Python 函数的映射。Flask 允许你定义路由,使得当用户访问特定 URL 时,Flask 会调用对应的视图函数来处理请求。

from flask import Flaskapp = Flask(__name__)@app.route('/')
def home():return 'Welcome to the Home Page!'@app.route('/about')
def about():return 'This is the About Page.'
  • @app.route('/'):将根 URL / 映射到 home 函数。
  • @app.route('/about'):将 /about URL 映射到 about 函数。

三. 视图函数 (View Functions)

视图函数是处理请求并返回响应的 Python 函数。它们通常接收请求对象作为参数,并返回响应对象,或者直接返回字符串、HTML 等内容。

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

greet 函数接收 URL 中的 name 参数,并返回一个字符串响应。

四. 请求对象 (Request Object)

请求对象包含了客户端发送的请求信息,包括请求方法、URL、请求头、表单数据等。Flask 提供了 request 对象来访问这些信息。

from flask import request@app.route('/submit', methods=['POST'])
def submit():username = request.form.get('username')return f'Hello, {username}!'

request.form.get('username'):获取 POST 请求中表单数据的 username 字段。

五. 响应对象 (Response Object)

响应对象包含了发送给客户端的响应信息,包括状态码、响应头和响应体。Flask 默认会将字符串、HTML 直接作为响应体。

from flask import make_response@app.route('/custom_response')
def custom_response():response = make_response('This is a custom response!')response.headers['X-Custom-Header'] = 'Value'return response

make_response:创建一个自定义响应对象,并设置响应头 X-Custom-Header。

六. 模板 (Templates)

Flask 使用 Jinja2 模板引擎来渲染 HTML 模板。模板允许你将 Python 代码嵌入到 HTML 中,从而动态生成网页内容。

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

模板文件 (templates/hello.html):

<!DOCTYPE html>
<html>
<head><title>Hello</title>
</head>
<body><h1>Hello, {{ name }}!</h1>
</body>
</html>

七. 应用工厂 (Application Factory)

应用工厂是一个 Python 函数,用于创建和配置 Flask 应用实例。这种方法允许你创建多个应用实例,或者在不同配置下初始化应用。

from flask import Flaskdef create_app(config_name):app = Flask(__name__)app.config.from_object(config_name)from . import routesapp.register_blueprint(routes.bp)return app

create_app 函数创建一个 Flask 应用实例,并从配置对象中加载配置。

八. 配置对象 (Configuration Objects)

配置对象用于设置应用的各种配置选项,如数据库连接字符串、调试模式等。可以通过直接设置或加载配置文件来配置 Flask 应用。

class Config:DEBUG = TrueSECRET_KEY = 'mysecretkey'SQLALCHEMY_DATABASE_URI = 'sqlite:///mydatabase.db'

app.config.from_object(Config):将 Config 类中的配置项加载到应用配置中。

九. 蓝图 (Blueprints)

蓝图是 Flask 中的组织代码的方式。它允许你将相关的视图函数、模板和静态文件组织在一起,并且可以在多个应用中重用。

from flask import Blueprintbp = Blueprint('main', __name__)@bp.route('/')
def home():return 'Home Page'

注册蓝图 (app/__init__.py):

from flask import Flask
from .routes import bp as main_bpdef create_app():app = Flask(__name__)app.register_blueprint(main_bp)return app

十. 静态文件 (Static Files)

静态文件是不会被服务器端执行的文件,如 CSS、JavaScript 和图片文件。Flask 提供了一个简单的方法来服务这些文件。

访问静态文件示例:

<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">

静态文件目录:将静态文件放在 static 文件夹中,Flask 会自动提供服务。

十一. 扩展 (Extensions)

Flask 有许多扩展,可以添加额外的功能,如数据库集成、表单验证、用户认证等。这些扩展提供了更高级的功能和第三方集成。

from flask_sqlalchemy import SQLAlchemyapp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///mydatabase.db'
db = SQLAlchemy(app)

SQLAlchemy:用于数据库集成的扩展。

十二. 会话 (Sessions)

Flask 使用客户端会话来存储用户信息,以便在用户浏览应用时记住他们的状态。会话数据存储在客户端的 cookie 中,并在服务器端进行签名和加密。

from flask import session# 自动生成的密钥
app.secret_key = 'your_secret_key_here'@app.route('/set_session/<username>')
def set_session(username):session['username'] = usernamereturn f'Session set for {username}'@app.route('/get_session')
def get_session():username = session.get('username')return f'Hello, {username}!' if username else 'No session data'

session 对象用于存取会话数据。

你可以使用 Python 内置的 secrets 模块生成一个强随机性的密钥。

python3 -c 'import secrets; print(secrets.token_hex())'

十三. 错误处理 (Error Handling)

Flask 允许你定义错误处理函数,当特定的错误发生时,这些函数会被调用。可以自定义错误页面或处理逻辑。

@app.errorhandler(404)
def page_not_found(e):return 'Page not found', 404@app.errorhandler(500)
def internal_server_error(e):return 'Internal server error', 500

@app.errorhandler(404):定义 404 错误的处理函数,返回自定义错误页面。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 决策树模型的可解释性
  • 122.rk3399 uboot(2017.09) 源码分析2-initf_dm(2024-09-09)
  • 5--SpringBoot、Mybatis
  • 如何通过Python SDK获取Collection列表
  • 使用Python本地搭建http.server文件共享服务并实现公网环境远程访问——“cpolar内网穿透”
  • 大数据-132 - Flink SQL 基本介绍 与 HelloWorld案例
  • Android 进程间通信
  • QLORA:高效微调量化大型语言模型
  • pico2 开发环境搭建-基于ubuntu
  • 初识Linux · 进程(2)
  • 《HTML 与 CSS—— 响应式设计》
  • 机器学习:opencv--图像金字塔
  • 《Nginx核心技术》第16章:实现Nginx的高可用负载均衡
  • HDMI彩条显示——FPGA学习笔记12
  • 从基础到进阶:利用EasyCVR安防视频汇聚平台实现高效视频监控系统的五步走
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • es6要点
  • HTML-表单
  • js递归,无限分级树形折叠菜单
  • Lsb图片隐写
  • mysql外键的使用
  • QQ浏览器x5内核的兼容性问题
  • Spark学习笔记之相关记录
  • Spring框架之我见(三)——IOC、AOP
  • SSH 免密登录
  • 离散点最小(凸)包围边界查找
  • 聊聊sentinel的DegradeSlot
  • 盘点那些不知名却常用的 Git 操作
  • 使用SAX解析XML
  • 算法---两个栈实现一个队列
  • 优秀架构师必须掌握的架构思维
  • 06-01 点餐小程序前台界面搭建
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • # 计算机视觉入门
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #pragma预处理命令
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (39)STM32——FLASH闪存
  • (70min)字节暑假实习二面(已挂)
  • (Oracle)SQL优化技巧(一):分页查询
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (第一天)包装对象、作用域、创建对象
  • (多级缓存)缓存同步
  • (二)pulsar安装在独立的docker中,python测试
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (收藏)Git和Repo扫盲——如何取得Android源代码
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)四层和七层负载均衡的区别
  • .aanva
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • .gitignore文件—git忽略文件
  • .gitignore文件使用
  • .NET 8 中引入新的 IHostedLifecycleService 接口 实现定时任务
  • .net Stream篇(六)