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

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 Flask

app = 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 Flask

def create_app(config_name):
    app = Flask(__name__)
    app.config.from_object(config_name)

    from . import routes
    app.register_blueprint(routes.bp)

    return app

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

八. 配置对象 (Configuration Objects)

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

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

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

九. 蓝图 (Blueprints)

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

from flask import Blueprint

bp = Blueprint('main', __name__)

@bp.route('/')
def home():
    return 'Home Page'

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

from flask import Flask
from .routes import bp as main_bp

def 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 SQLAlchemy

app.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'] = username
    return 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 错误的处理函数,返回自定义错误页面。


http://www.kler.cn/a/300769.html

相关文章:

  • springboot多环境配置
  • LARGE LANGUAGE MODELS ARE HUMAN-LEVEL PROMPT ENGINEERS
  • Sentinel配置流控规则详解
  • Linux网络 TCP socket
  • Java基础(一)
  • 【进程与线程】前端进程与后端进程
  • Weakly-Supervised Video Moment Retrieval via Semantic Completion Network 论文阅读
  • 【Django】Django AI 聊天机器人项目:基于 ChatGPT 的 Django REST API
  • 优惠券线下使用情况数据分析
  • k8s防火墙networkPolicy,其他规则和端口规则ports的匹配顺序,进站策略ingress和出站策略egress中,ports规则的常用方法。
  • 【绝对有用】顶尖ChatGPT学术论文指令集
  • 【TabBar嵌套Navigation案例-复习昨天的内容-预习今天的内容 Objective-C语言】
  • JavaEE:多线程进阶(JUC [java.util.concurrent] 的常见类)
  • 论文学习笔记 VMamba: Visual State Space Model
  • Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
  • Mac在Python项目中通过opencv模版匹配定位不到图片
  • Unity面试:什么是UnityEvent?
  • 《 C++ 修炼全景指南:七 》优先级队列在行动:解密 C++ priority_queue 的实现与应用
  • 解锁SAP数据的潜力:SNP Glue与SAP Datasphere的协同作用
  • 【秋招笔试】9.05小米秋招改编题(算法岗)-三语言题解
  • 逆转链表的三种方法
  • 从C语言过渡到C++
  • 基于SpringBoot+Vue的学生选课系统
  • 贷款电话“轰炸式“营销背后:银行生存战与我们的“贷“价生活
  • RP2040 C SDK RTC功能使用
  • 6个免费icon图标素材网站