flask初始化配置文件和使用的方法
这篇文章将为大家详细讲解有关flask初始化配置文件和使用的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
项目环境配置
安装python环境
校验python 和pip是否安装好
//查看python安装python-V//查看pip安装pip-V
新建项目文件夹 demo
mkdirflaskdemocdflaskdemo
安装 pipenv
pipinstallpipenv#这个是进行虚拟环境管理的工具,不同的项目分割不同的环境
进入到项目文件夹下,安装虚拟环境
//创建虚拟环境,如果里面有配置文件,会直接安装配置中的插件pipenvinstall//激活虚拟环境pipenvshell//退出exit//卸载包pipenvuninstallflask//查看包依赖关系pipenvgraph//进入虚拟环境中,查看虚拟环境的安装目录pipenv--venv
tips:在windows退出环境时没有提示,linux有提示
安装各种包:一下为基础通用的各种包,选择安装。
#安装flaskpipenvinstallflask#mysql驱动pinenvinstallcymysql==0.9.1#web登录插件pipenvinstallflask-login#email插件pipenvinstallflask-mail#表单字段校验插件pipenvinstallWIForms#请求库插件pipenvinstallrequests#数据库映射插件pipenvinstallFlask-SQLAlchemy#验证登录相关Flask-HTTPAuth==2.7.0#其他相关Flask-Cors==2.1.0Flask-WTF==0.14.2
开发工具: Pycharm,Xampp(mysql),Navicat(数据库可视化工具)
项目的初始化
新建配置文件:新建文件目录 app/config, 新建配置文件 secure.py 和 settings.py,主要存储项目中的配置信息
创建自定义 app/libs/redprint.py flask默认的是blueprint主要用作模块的区分,不建议为了分离视图是用 blueprint,可以优化url的路径
#根据blueprint源码的实现classRedPrint:def__init__(self,name):self.name=nameself.mound=[]defroute(self,rule,**options):defdecorator(f):self.mound.append((f,rule,options))returnfreturndecoratordefregister(self,bp,url_prefix=None):"""将redprint注册到blueprint,实际调用blueprint代码"""ifurl_prefixisNone:url_prefix='/'+self.nameforf,rule,optionsinself.mound:endpoint=options.pop("endpoint",f.__name__)bp.add_url_rule(url_prefix+rule,endpoint,f,**options)
创建视图函数文件
fromapp.libs.redprintimportRedPrintapi=RedPrint('book')@api.route('/create')defcreate_book():return'create_book'@api.route('/get')defget_book():return'get_book'------------------------------------------------------fromapp.libs.redprintimportRedPrintapi=RedPrint('user')#url/v1/user/create@api.route('/create')defcreate_user():return'create_user'@api.route('/get')defget_user():return'get_user'
在 v1/init.py 注册 redprint
fromflaskimportBlueprintfromapp.api.v1importbookfromapp.api.v1importuserdefcreate_blueprint_v1():"""创建blueprint并对自定义的redprint进行注册:return:"""bp_v1=Blueprint("v1",__name__)book.api.register(bp_v1,url_prefix='/book')user.api.register(bp_v1,url_prefix='/user')returnbp_v1
新建 ginger/app.py文件,flask核心对象相关的初始化的操作
tips:进入之后,可能包不能导入,需要自己手动确认设置虚拟环境
fromflaskimportFlaskdefregister_blueprint(app):fromapp.api.v1importcreate_blueprint_v1blueprint=create_blueprint_v1()app.register_blueprint(blueprint,url_prefix='/v1')defcreate_app():app=Flask(__name__)#导入配置文件app.config.from_object('app.config.settings')app.config.from_object('app.config.secure')#注册blueprintregister_blueprint(app)returnapp
其他相关
fromflaskimportFlaskapp=Flask(__name__)#导入配置文件,导入的是模块,app.config是dict的子类app.config.from_object('config')#定义路由规则@app.route("/hello/")#这种方式底层也是通过add_url_rule实现的defhello():#这种方式为函数视图#另外一种基于类的视图(即插视图),可以复用便于扩展return"helloword"#启动,配置debug=true表明为debug模式,每次修改代码保存之后,会列出详细错误信息,服务器会自动重启,不用自己手动重启#这种方式的话不能被外网,局域网访问,只能通过127.0.0.1这种方式访问#将host=‘0.0.0.0’的方式支持外网访问#if中的语句只在入口文件中执行if__name__=='__main__':app.run(host='0.0.0.0',port=5000,debug=app.config['DEBUG'])
URL配置说明
url配置为"/hello/",可以兼容url为hello,和url为hello/的情况,这种方式flask是通过url重定向来实现的,为了是保证url的唯一性,跟seo的优化有关系.一般直接配置为/hellodefhello():这种为函数视图的方式,还有另外一种方式,为基于类的视图(即插视图),基于类可以复用便于扩展
路由注册方式
#这种方式为装饰器的方式,查看源码底层也是采用的是app.add_url_rule这种方式注册的@app.route("/hello/")#直接配置注册的方式,基于类的视图这种,必须是这种方式app.add_url_rule('/hello',view_func=hello)
app.run()参数
默认的app.run(debug=True),这种方式是不能被外网,局域网访问,只能通过127.0.0.1这种方式访问将host修改为'0.0.0.0',可以允许外网访问,可以指定端口app.run(host='0.0.0.0',port=5000,debug=True)
统一配置文件:一般的环境切换更改等方式通过配置文件的方式来,不易出错
创建配置文件 config.py
#config.py配置示例#encoding:utf-8DEBUG=True一种方式:直接导入的方式fromconfigimportDEBUGapp.run(debug=TEBUG)导入模块的方式,注意路径,此时config文件与app同级,推荐这种方式app.config.form_object('config')**tips**通过app.config导入的方式,获取值的时候key必须大写,app.config['DEBUG'],否则会出错.app.config['DEBUG'],即使在配置文件没有配置该DEBUG,打印的时候也会有值false,因为DEBUG是在app.config默认参数,如果要覆盖该DEBUG值,在配置文件中必须大写
tips:可能存在需要导包的情况,需要设置虚拟环境
file->settings->procject->project interpreter ->选择对应的虚拟环境即可
Restful
实际经验区分:
标准的restful 适合对外提供,不用考虑太多的业务逻辑
在内部项目中,如有多个资源,需要同时操作,那需要多次的 http请求,而且对资源的设计需要很高的要求。
关于flask初始化配置文件和使用的方法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。