前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 进阶学习技巧一

Flask 进阶学习技巧一

原创
作者头像
迦伦
修改2019-10-10 10:31:14
4550
修改2019-10-10 10:31:14
举报

1. 高级用户自定义

Flask 提供大量的类,也就是说,你可以通过继承官方提供的各种类,打造一个高度自定义的 Flask , 如下所示:

# 自定义 Request, Flask, 

from flask import Flask, Request
from werkzeug.datastructures import ImmutableOrderedMultiDict

class MyRequest(Request):
    """Request subclass to override request parameter storage"""
    parameter_storage_class = ImmutableOrderedMultiDict
class MyFlask(Flask):
    """Flask subclass using the custom request class"""
    request_class = MyRequest

除此之外,你还可以自定义异常,并且统一响应格式。(这部分太简单,不写了)

2. Mirco - small is good!

Flask 的设计思想核心是"micro"(微), 微不是功能少能力低,而是为了保持核心简单而又可扩展。

这非常贴近现代软件工程推崇尽量高内聚低耦合的组件化思想。

如何表现:

  • Flask 并不强制决定你所使用的模板引擎, 数据库,但提供默认支持,一切由你做主
  • 大部分的中间件,类和方法都很简单,并且非常便于继承、重新包装、派生
  • 和 Django 不一样,Flask 本身仅提供开发生产所需要的基本功能。得益于社区强壮,你可以找到海量的 Flask 插件来解决各种常用常用业务需求(比如 Flask-Session, Flask-Migrate, Flask-sqlalchemy 等),如果你对这些插件都不满意,你还能参考它们自己写一个,也为开源社区做贡献。

3. 使用 URL 处理器

由于“永远不要信任用户输入”,所以 web 开发总离不开表单校验。

很多初级程序员喜欢复制粘贴, 但是进阶的程序员都会把表单校验统一处理。

那么怎样可以把这些脏活处理得更优美呢?

可以参考使用 Flask 的 URL 处理器 。

示例代码如下:

from flask import Flask, g

app = Flask(__name__)

@app.route('/<lang_code>/')
def index(lang_code):
    g.lang_code = lang_code
    ...

@app.route('/<lang_code>/about')
def about(lang_code):
    g.lang_code = lang_code
    ...

以上示例中出现重复 g.lang_code = lang_code, (通常现实中重复代码比这严重多了)

使用 Flask 提供 url_value_preprocessor 可以解决这个问题,如下:

@app.url_value_preprocessor
def g_lang_code(endpoint, values):
    g.lang_code = values.get('lang_code', None) 

refer: https://dormousehole.readthedocs.io/en/latest/index.html

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 高级用户自定义
  • 2. Mirco - small is good!
  • 3. 使用 URL 处理器
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档