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
除此之外,你还可以自定义异常,并且统一响应格式。(这部分太简单,不写了)
Flask 的设计思想核心是"micro"(微), 微不是功能少能力低,而是为了保持核心简单而又可扩展。
这非常贴近现代软件工程推崇尽量高内聚低耦合的组件化思想。
如何表现:
由于“永远不要信任用户输入”,所以 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 删除。