所有Flask程序必须有一个程序实例
Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。
当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。此时,Web服务器使用WSGI(Web Server Gateway Interface)协议,把来自客户端的所有请求都交给Flask程序实例。WSGI是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口,它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。
程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。 在Flask程序中,路由的实现一般是通过程序实例的route装饰器实现。route装饰器内部会调用add_url_route()方法实现路由注册。
调用视图函数,获取响应数据后,把数据传入HTML模板文件中,模板引擎负责渲染响应数据,然后由Flask返回响应数据给浏览器,最后浏览器处理返回的结果显示给客户端。
# 导入Flask类 from flask import Flask #Flask类接收一个参数__name__ app = Flask(__name__) # 装饰器的作用是将路由映射到视图函数index @app.route(‘/‘) def index(): return ‘Hello World‘ # Flask应用程序实例的run方法启动WEB服务器 if __name__ == ‘__main__‘: app.run()
$ cd /home/python/code
$ python helloworld.py
... app = Flask(__name__, static_url_path="/python", # 访问静态资源的url前缀, 默认值是static static_folder="static", # 静态文件的目录,默认就是static template_folder="templates", # 模板文件的目录,默认是templates ) ...
app.config.from_object() 从对象中导入
1 from flask import Flask 2 3 app = Flask(__name__, 4 static_url_path="/python", # 访问静态资源的url前缀, 默认值是static 5 static_folder="static", # 静态文件的目录,默认就是static 6 template_folder="templates", # 模板文件的目录,默认是templates 7 ) 8 9 # 配置参数的使用方式 10 # 1. 使用配置文件 11 app.config.from_pyfile("config.cfg") 12 13 14 @app.route("/") 15 def index(): 16 """定义的视图函数""" 17 return "helloworld" 18 19 20 if __name__ == ‘__main__‘: 21 # 启动flask程序 22 app.run()
# config.cfg 文件 DEBUG = True
这样你重新运行一下
创建一个类,来定义类属性为配置项
# coding:utf-8 from flask import Flask app = Flask(__name__, static_url_path="/python", # 访问静态资源的url前缀, 默认值是static static_folder="static", # 静态文件的目录,默认就是static template_folder="templates", # 模板文件的目录,默认是templates ) # 2. 使用对象配置参数 class Config(object): DEBUG = True # 使用方法加载设置的配置 app.config.from_object(Config) @app.route("/") def index(): """定义的视图函数""" return "hello world" if __name__ == ‘__main__‘: # 启动flask程序 app.run()
from flask import Flask app = Flask(__name__, static_url_path="/python", # 访问静态资源的url前缀, 默认值是static static_folder="static", # 静态文件的目录,默认就是static template_folder="templates", # 模板文件的目录,默认是templates ) # 3. 直接操作config的字典对象 app.config["DEBUG"] = True @app.route("/") def index(): return "hello flask" if __name__ == ‘__main__‘: # 启动flask程序 app.run()
1.如果你在当前能访问到app的情况下
app.config.get("DEBUG")
2.如果你无法拿到app这个对象时,你只需要导入current_app,也是可以拿到配置信息的
current_app.config.get("DEBUG")
from flask import Flask, current_app @app.route("/") def index(): """定义的视图函数""" # 读取配置参数 # 1. 直接从全局对象app的config字典中取值 # print(app.config.get("ITCAST")) # 2. 通过current_app获取参数 # print(current_app.config.get("ITCAST")) return "hello flask"
if __name__ == ‘__main__‘: # 启动flask程序 # app.run() app.run(host="0.0.0.0", port=5000, debug=True) # port指定的端口,debug 是唯一可以指定在这里的配置项
你在开发的状态下,如果局域网中不需要别的主机访问,你可以不指定(host),如果你想在同一局域网中,别的主机也可以访问到,并且你自己还想以回环地址(127.0.0.1)访问的话就可以指定为‘0.0.0.0’
扩展: 0.0.0.0
IPV4中,0.0.0.0地址被用于表示一个无效的,未知的或者不可用的目标。
* 在服务器中,0.0.0.0指的是本机上的所有IPV4地址,如果一个主机有两个IP地址,192.168.1.1 和 10.1.2.1,并且该主机上的一个服务监听的地址是0.0.0.0,那么通过两个ip地址都能够访问该服务。
* 在路由中,0.0.0.0表示的是默认路由,即当路由表中没有找到完全匹配的路由的时候所对应的路由。用途总结:
- 当一台主机还没有被分配一个IP地址的时候,用于表示主机本身。(DHCP分配IP地址的时候)
- 用作默认路由,表示”任意IPV4主机”。
- 用作服务端,表示本机上的任意IPV4地址。
原文:https://www.cnblogs.com/Hannibal-2018/p/11206664.html