flask開發restful api系列(6)-配置文件


  任何一個好的程序,配置文件必不可少,而且非常重要。配置文件里存儲了連接數據庫,redis的用戶密碼,不允許有任何閃失。要有靈活性,用戶可以自己配置;生產環境和開發環境要分開,最好能簡單的修改一個東西,就能達到要求;要有安全性,最好的方式,即使有一天前端服務器被竊取信息,配置文件里的信息也不能泄露。

  python本身帶有configparser庫,可以解析普通文件的配置,但是這樣不但繁瑣,而且安全性也得不到保證。我在前面一再強調,能達到自己要求的實現方式,就是最好的方式。flask官方例子有一個非常好的事例,就是config文件本身就是一個py文件,直接導入,代碼簡單、實用。連接我們之前的代碼,我寫了如下配置文件。

config.py

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參數就可以了。

  下面在view和model里面使用一下吧。

  首先在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文件里修改一下即可。是不是非常簡單?

同理,model.py也一樣

from config import Conf

engine = create_engine(Conf.MYSQL_INFO, pool_recycle=7200)

model里面,沒有使用app環境來config,大家一定要記住,程序是寫的,怎么簡單,怎么寫,只要不影響效率,千萬不要被框架限定死。

 

  好了,上面顯示了,怎么用config.py文件來做配置文件,基本使用會了,但是上面所說的安全性呢?如果哪天前端服務器的密碼被別人知道了,或者網站有重大漏洞,被別人看到config.py文件,他豈不是知道所有數據庫和redis的信息?那怎么做呢?其實也很簡單,直接引用config.pyc文件即可,上傳正式服務器的時候,把config.py文件給移除出去。是不是很傻瓜?沒關系,像我之前所說的那樣,如果能用最簡單的辦法達到目的,我為何還要走彎路呢?當然,還是擋不住高手的,他們可以反編譯pyc文件,這個就不要鑽牛角尖了。

  整個配置文件是不是很簡單,這一章就講到這,下一章,我們講講flask restful api最最精華的一部分,藍圖。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM