写Flask应用时的一些优雅技巧
来源:互联网 发布:实变函数和实分析 知乎 编辑:程序博客网 时间:2024/05/29 18:22
借助find_modules
,import_string
优雅地注册蓝图模块
find_modules
, import_string
这两个函数包含在werkzeug.utils
工具包中,借助着两个工具函数可以帮助我们在更优雅的给应用注册blueprint
模块,尤其是当项目中blueprint
模块很多的时候,会节省很多行代码,看起来更加的舒服。
import_string(import_name, silent=False)
import_string 可以通过字符串导出需要导入的模块或对象:
参数
- import_name:要导入的对象的模块或对象名称
- silent:如果设置为True,则忽略导入错误,相反则返回None
find_modules(import_path, include_packages=False, recursive=False)
找到一个包下面的所有模块,这对于自动导入所有蓝图模块是非常有用的
参数
- import_path:包路径
- include_packages:如果设置为True,会返回包内的子包
- recursive:是否递归搜索子包
示例代码
blueprints/example.py
# 模块部分# create blueprint :)bp = Blueprint('bp_name', __name__)
app.py
# 注册部分def register_blueprints(app): """Register all blueprint modules""" for name in find_modules('blueprints'): module = import_string(name) if hasattr(module, 'bp'): app.register_blueprint(module.bp) return None
使用Flask中的flash闪存传递反馈信息
flask的闪存系统主要是用来想用户提供反馈信息。内容一般是对用户上一次请求中的操作给出反馈。反馈信息存储在服务端,用户可以在本次(且只能在本次)请求中访问上一次的反馈信息,当用户获得了这些反馈信息以后,就会被服务端删除。Flask为jinja2开放了一个get_flashed_messages(with_categories=False, category_filter=[])
函数来获取上一次的闪存信息,这个函数可以直接在模板中使用。
参数
- with_categories:True返回元祖,False返回消息本身
- category_filter:过滤分类关键词(字符串或列表)
后台当请求结束准备返回的时候,使用flash(message, category='message')
函数来为下次请求保存一条反馈信息。
参数
- message:信息文本
- category:自定义分类关键词
官方示例代码
使用Flask中内置日志系统发送错误日志邮件
Flask使用python内置的日志系统,它实际上可以发送错误邮件。
示例代码:
ADMINS = ['yourname@example.com']if not app.debug: import logging from logging.handlers import SMTPHandler mail_handler = SMTPHandler('127.0.0.1', #邮件服务器 'server-error@example.com', #发件人 ADMINS, #收件人 'YourApplication Failed') #邮件主题 mail_handler.setLevel(logging.ERROR) app.logger.addHandler(mail_handler)
还可以更进一步,将错误日志格式化,方便阅读:
from logging import Formattermail_handler.setFormatter(Formatter('''Message type: %(levelname)sLocation: %(pathname)s:%(lineno)dModule: %(module)sFunction: %(funcName)sTime: %(asctime)sMessage:%(message)s'''))
关于SMTPHandler的介绍,访问官网SMTPHandler手册
提前中断请求返回错误码,并定制相应错误页面
在Flask中我们能够用redirect()
函数重定向用户到其它地方。还能够用 abort()
函数提前中断一个请求并带有一个错误代码。
示例代码
from flask import abort, redirect, url_for@app.route('/')def index(): return redirect(url_for('login'))@app.route('/login')def login(): abort(404) this_is_never_executed() # 永远不会被执行到
配合Flask提供的 errorhandler()
装饰器定制自己的相应错误界面
from flask import render_template@app.errorhandler(404)def page_not_found(error): return render_template('page_not_found.html'), 404
注意到 404
是在 render_template()
调用之后。告诉 Flask 该页的错误代码应是 404
, 即没有找到。“
原文链接:http://vimiix.com/post/2017/12/18/some-useful-tricks-in-flask/
- 写Flask应用时的一些优雅技巧
- 关于开发Android应用时写从图库选择头像功能时遇到的一些问题。
- 测试redolog应用时用到的一些有用sql
- PID应用时要注意的一些点
- 本文我们将探讨一些技巧教你如何创建iPhone App以及在创建应用时应该避免的一些错误认知
- jQuery应用时的记录
- 指针应用时的注意事项
- delete 应用时应注意的问题
- 【Flask】关于Flask-Admin的一些坑及避开技巧
- C#写的ActiveX弹出窗口在Delphi程序中的应用时出现了问题。
- ajaxPro2.0应用时的一些问题(C#)ajax的 (遮罩层)登陆实例
- 初学ASP.NET开发web应用时遇到的一些常见问题和解决方法
- MyEclipse 6 GA平台下整合SSH开发应用时出现的一些问
- Unity开发Oculus Rift应用时,打包发布时遇到的一些坑
- Web应用时中文乱码的处理!
- Web应用时中文乱码的处理
- Command设计模式应用时的几个问题
- MySQL 开发应用时的超时问题
- c语言数据结构的练习
- C++Primer习题第十五章
- 深入Java虚拟机-类加载机制
- 剑指offer---打印1到n位的最大数(12)
- 基于fpga的串口通信实现
- 写Flask应用时的一些优雅技巧
- IM聊天室(一):WebSocket
- 正则表达式中的.*?,懒惰模式与贪婪模式
- MySQL的存储过程declare语句报错 游标
- Java基础--标识符,关键字,数字类型
- shell脚本题
- spring整合mybatis
- excel中如何将数字转换成文本
- this关键字