參考資料:http://python.jobbole.com/84003/ https://flask-cn.readthedocs.io/en/latest/tutorial/html
加載配置:python
app = Flask(__name__)
app.config.from_object(__name__)
from_object()
會識別給出的對象(若是是一個字符串,它 會自動導入這個模塊),而後查找全部已定義的大寫變量。在咱們這個例子裏,配置 在幾行代碼前。你也能夠把它移動到一個單獨的文件中。數據庫
app.config.from_envvar('FLASKR_SETTINGS', silent=True)
silent參數是爲了告訴Flask不要報錯,即便沒有設置 環境變量flask
===================api
從 _future_ 中的import內容要在因此import的最前面服務器
from __future__ import with_statement from contextlib import closing
===================多線程
from flask import g
@app.before_request def before_request(): g.db = connect_db() @app.after_request def after_request(response): g.db.close() return response
用 before_request()
裝飾的函數在每次請求以前 被調用,它沒有參數。用 after_request()
裝飾的函數是在每 次請求結束後被調用,並且它須要傳入response。這類函數必須返回同一個response 對象或者一個不一樣的response對象app
咱們把當前的數據庫鏈接保存在一個特殊的對象 g
裏面,這個對象 flask已經爲咱們提供了。這個對象只能用來爲一個請求保存信息,每個函數均可以 訪問這個對象。不要用其餘的對象來保存信息,由於在多線程的環境下會沒法工做。 g
對象是一個特殊的對象,它會在後臺作一些魔術來確保它可以跟我 們預想的同樣執行函數
===========================url
咱們的模版將使用 Jinja2 的格式,並且默 認是打開自動轉義的。這也就是說,除非咱們在代碼中用 Markup
標記一個值,或者在模版中用 |safe
過濾器,不然Jinja2會將一些特殊字符, 如 <
或 >
用XML格式來轉義
========================報錯郵件
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)
咱們建立了一個新的類 SMTPHandler
,他 將經過 127.0.0.1
的郵件服務器向全部的 ADMINS 用戶發送標題爲「YourApplication Failed」 郵件,而且將發件地址配置爲 server-error@example.com 。此外,咱們還提供了對 須要證書的郵件服務器的支持
==================配置
在Flask中,有一個現成的保存、載入的對象,就是 Flask
類中的 config
對象。在這個對象中Flask不只存放本身的配置,還存放拓展插件的配置,並且也存放你對於本身應用的本身的配置。
=================
怎麼拿到應用程序的當前配置呢?使用 current_app
:
from flask import current_app, Blueprint, render_template admin = Blueprint('admin', __name__, url_prefix='/admin') @admin.route('/') def index(): return render_template(current_app.config['INDEX_TEMPLATE'])
=================日誌
import logging from logging.handlers import SysLogHandler syslog_handler = SysLogHandler() syslog_handler.setLevel(logging.WARNING) app.logger.addHandler(syslog_handler)