flask开发restful api系列(6)-配置文件

  任何一个好的程序,配置文件必不可少,并且很是重要。配置文件里存储了链接数据库,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最最精华的一部分,蓝图。

相关文章
相关标签/搜索