任何一個好的程序,配置文件必不可少,並且很是重要。配置文件裏存儲了鏈接數據庫,redis的用戶密碼,不容許有任何閃失。要有靈活性,用戶能夠本身配置;生產環境和開發環境要分開,最好能簡單的修改一個東西,就能達到要求;要有安全性,最好的方式,即便有一天前端服務器被竊取信息,配置文件裏的信息也不能泄露。前端
python自己帶有configparser庫,能夠解析普通文件的配置,可是這樣不但繁瑣,並且安全性也得不到保證。我在前面一再強調,能達到本身要求的實現方式,就是最好的方式。flask官方例子有一個很是好的事例,就是config文件自己就是一個py文件,直接導入,代碼簡單、實用。鏈接咱們以前的代碼,我寫了以下配置文件。python
config.pymysql
class Config(object): SECRET_KEY = 'saduhsuaihfe332r32rfo43rtn3noiYUG9jijoNF23' QINIU_ACCESS_KEY = 'hP7WNic×××××××××××××××××××××××××oZfrVs6' QINIU_SECRET_KEY = 'bBZ×××××××××××××××××××××××××××××××××VAV' BUCKET_NAME = 'dameinv' class DevelopmentConfig(Config): DEBUG = True REDIS_HOST = 'localhost' REDIS_PORT = 6380 REDIS_DB = 4 REDIS_PASSWORD = '××××××' MYSQL_INFO = "mysql://root:××××××××@127.0.0.1:3306/blog01?charset=utf8" class ProductionConfig(Config): DEBUG = False REDIS_HOST = 'server-ip' REDIS_PORT = 6380 REDIS_DB = 4 REDIS_PASSWORD = '×××××××××××' MYSQL_INFO = "mysql://××××××××××@server-ip:3306/blog01?charset=utf8"
Conf = DevelopmentConfig
整個過程很是簡單,就3個類,基類是Config,這裏面記載的配置信息,都各類開發環境公用的。若是有配置不公用,就把具體的配置信息放到子類中去,咱們只須要引用具體的子類便可,每次從開發環境轉移到生產環境時,只須要修改Conf參數就能夠了。redis
下面在view和model裏面使用一下吧。sql
首先在view.py裏面,把定義的那部分代碼修改以下:數據庫
from config import Conf app = Flask(__name__) app.config.from_object(Conf) app.secret_key = app.config['SECRET_KEY'] app.redis = redis.Redis(host=app.config['REDIS_HOST'], port=app.config['REDIS_PORT'], db=app.config['REDIS_DB'], password=app.config['REDIS_PASSWORD']) app.q = Auth(access_key=app.config['QINIU_ACCESS_KEY'], secret_key=app.config['QINIU_SECRET_KEY']) bucket_name = app.config['BUCKET_NAME']
×××××××××××××××
@app.route('/user')
@login_check
def user():
user = g.current_user
nickname = app.redis.hget('user:%s' % user.phone_number, 'nickname')
return jsonify({'code': 1, 'nickname': nickname, 'phone_number': user.phone_number})
××××××××××××××××××
if __name__ == '__main__':
app.run(debug=app.config['DEBUG'], host='0.0.0.0', port=5001)
其餘代碼就省略了,跟以前版本同樣,只是讓你們看到效果不一樣,每一個東西,均可以在配置文件裏進行修改。從開發環境轉到生產環境,只須要在config.py文件裏修改一下便可。是否是很是簡單?json
同理,model.py也同樣flask
from config import Conf engine = create_engine(Conf.MYSQL_INFO, pool_recycle=7200)
model裏面,沒有使用app環境來config,你們必定要記住,程序是寫的,怎麼簡單,怎麼寫,只要不影響效率,千萬不要被框架限定死。api
好了,上面顯示了,怎麼用config.py文件來作配置文件,基本使用會了,可是上面所說的安全性呢?若是哪天前端服務器的密碼被別人知道了,或者網站有重大漏洞,被別人看到config.py文件,他豈不是知道全部數據庫和redis的信息?那怎麼作呢?其實也很簡單,直接引用config.pyc文件便可,上傳正式服務器的時候,把config.py文件給移除出去。是否是很傻瓜?不要緊,像我以前所說的那樣,若是能用最簡單的辦法達到目的,我爲什麼還要走彎路呢?固然,仍是擋不住高手的,他們能夠反編譯pyc文件,這個就不要鑽牛角尖了。安全
整個配置文件是否是很簡單,這一章就講到這,下一章,咱們講講flask restful api最最精華的一部分,藍圖。