Pyhton3框架Flask 准备工作 (二)
一,一个最简单的Flask Web
from flask import Flask ''' 引入flask包内的Flask模块,注现在PyCharm的flask是默认的,并不是在虚拟环境内的flask, 所以要设置到本虚拟环境下的flask。通过命令行 pipenv --verv可以查看虚拟环境下的目录。 ''' app=Flask(__name__) '''实例化Flask,通常会内置变量做为参数。''' app.run() '''通过实例对象app的run方法来启动Web服务器'''
现在可以通过命令行来运行 >>>python tngh.py
二,简单的显图函数与路由。
上例只是一个空的Web服务器,没有任何实际意义。当有业务逻辑时要写一系列的视图函数。
from flask import Flask ''' 引入flask包内的Flask模块,注现在PyCharm的flask是默认的,并不是在虚拟环境内的flask, 所以要设置到本虚拟环境下的flask。通过命令行 pipenv --verv可以查看虚拟环境下的目录。 ''' app=Flask(__name__) '''实例化Flask,通常会内置变量做为参数。''' @app.route('/tngh') def tngh(): return 'tngh123' ''' 通过装饰器@来为tngh()函数定义一个路由,就可以使用http请求访问到tngh()函数。 route()内要传入一个路径做为参数 视图tngh()相当于MVC中的C控制器''' app.run(debug=True) '''
debug=True 设置调试模式,开启自动重启(当修改源代码时不再需要手动开启Web服务)
通过实例对象app的run方法来启动Web服务器'''
此时在浏览器中可以访问127.0.0.1:5000/tngh就可以了,
第二种路由方式,基由类
from flask import Flask app=Flask(__name__) #@app.route('/tngh') def tngh(): return 'tngh12dd3' app.add_url_rule('/tngh',view_func=tngh) app.run(debug=True)
通过app.add_url_rule来定义的路由,第一个参数为路由规则,第二个为视图函数。
三,外网(局域网)访问服务器。
from flask import Flask app=Flask(__name__) @app.route('/tngh') def tngh(): return 'tngh12dd3' #app.add_url_rule('/tngh',view_func=tngh) app.run(host='192.168.0.6',debug=True)
host可以指定为某一具体地址,也可以设为范指如host='0.0.0.0'。为所有地址都可以被访问。也可以指定端口port=81。
四,配置文件
配置文件使用方法一
from flask import Flask from config import DEBUG '''引入配置文件''' app=Flask(__name__) @app.route('/tngh') def tngh(): return 'tngh12dd3' #app.add_url_rule('/tngh',view_func=tngh) app.run(host='0.0.0.0',debug=DEBUG,port=81) '''使用配置文件中的DEBUG'''
配置文件使用方法二
from flask import Flask app=Flask(__name__) app.config.from_object('config') ''' 通过app对象的config属性下的from_object方法引入配置文件,参数为模块路径 ''' @app.route('/tngh') def tngh(): return 'tngh12dd3' #app.add_url_rule('/tngh',view_func=tngh) #config本身就是字典dict的子类 app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=81) '''使用(读取)配置文件中的DEBUG'''
使用此方法时配置文件中的DEBUG必须要大写。
五,入口文件的if判断
from flask import Flask app=Flask(__name__) app.config.from_object('config') @app.route('/tngh') def tngh(): return 'tngh12dd3' #app.add_url_rule('/tngh',view_func=tngh) if __name__ =='__main__': app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=81)
if的两层含义1)确保if下的语句只在入口文件内执行,当被其他的模块导入的话, app.run是不会被执行的。
2)在具体的flask框架内的含义,当我们开发环境下,启动的服务器为flask所自带的简单的服务器。但是如果项目部署到生产环境下,是不用使用flask自带的服务器的。生产环境下需要使用nginx+uwsgi来组合项目,nginx接收浏览器发来的请求,然后转发给uwsgi。生产环境下入口文件并不是手动执行的,而是uwsgi加载模块来启动的相关代码。所以在生产环境下,此文件并不是入口文件,只是被uwsgi加载的模块,所以在生产环境下,app.run是不会被执行的。如果在生产环境下没有了if判断,一但加载了此文件app.run就会被执行,生产环境下已经有了uwsgi做为服务器,而同时又启动了flask的自带的服务器,两个服务器是不可以同时存在的。
六,视图函数返回对象 response
from flask import Flask app=Flask(__name__) app.config.from_object('config') @app.route('/tngh') def tngh(): headers={ 'content-type':'text/plain' } return '<html></html>',404,headers #app.add_url_rule('/tngh',view_func=tngh) if __name__ =='__main__': app.run(host='0.0.0.0',debug=app.config['DEBUG'])
asdf