Flask介绍
Flask
1什么是flask?
Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务,在介绍Flask之前首先来聊下它和Django的联系以及区别,django个大而全的web框架,它内置许多模块,flask是一个小而精的轻量级框架,Django功能大而全,Flask只包含基本的配置, Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于2个外部库: Jinja2 模板引擎和 WSGI工具集--Werkzeug , flask的使用特点是基本所有的工具使用都依赖于导入的形式去扩展,flask只保留了web开发的核心功能。
WSGI(web服务器网关接口)是python中用来规定web服务器如何与python Web服务器如何与Python Web程序进行沟通的标准,本质上就是一个socket服务端。而 Werkzeug模块 就是WSGI一个具体的实现。
2为什么用flask?
flask性能上基本满足一般web开发的需求, 并且灵活性以及可扩展性上要优于其他web框架, 对各种数据库的契合度都非常高。
1. 性能基本满足需求。
2 .灵活性可拓展性强。
3. 对各种数据库的契合度都比较高。
4.在真实的生产环境下,小项目开发快,大项目设计灵活。
Flask创建
(略过)
解读Flask程序
“static文件夹”用于存放各种静态文件 css、js、图片等等
“templates文件夹”用于存放html模板文件
“app.py”为我们的主文件 ,启动项目需要启动该文件
注意 app.py 文件的名字我们可以自由命名,但是除了flask.py 这种和Flask库相冲突的名字
主文件app.py文件代码
from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run()
这段代码我们可以拆成三部分
第一部分:
from flask import Flask app = Flask(__name__)
导入我们安装好的flask包,通过flask包导入Flask类,Flask类即为Flask的核心,实例化这个Flask类的到一个实例化对象app。
__name__
这个特殊的参数:Python会根据所处的模块来赋予__name__
变量相应的值,对于我们的程序来说(app.py),这个值为app。
第二部分:
@app.route('/') def hello_world(): return 'Hello World!'
如果有过对其他web框架的了解,相信看见这个已经看出了一些门道。没错这个 @app.route('/')
就是用来匹配url的,在我们的flask里面是以装饰器来实现的,装饰器引用的也是我们上面实例化核心类出来的对象。
那么如果路由下面跟的函数什么呢 ?没错就是我们的视图函数,如果匹配到了路由就会触发我们的视图函数执行,并且return回具体的数据给前端或者移动端。
不是很理解没关系,我们先大概有个印象,会在接下来的章节详细讲解路由以及视图函数的使用。
第三部分
if __name__ == '__main__': app.run()
先不管逻辑判断,先看 app.run()
, app.run()
源码如下去阅读源码不难发现,在内部定义了默认的 ip+端口为127.0.0.1:5000,并且调用了werkzeug.serving为我们创建了一个开发服务器(由依赖包Werkzeug提供),对套接字有一定了解的朋友,其内部就是做了一个循环监听的功能以便交互.
关键词:app.run()
实现了flask
程序在开发环境下运行起来,并且默认ip和端口是127.0.0.1:5000
。
def run(self, host=None, port=None, debug=None, load_dotenv=True, **options): ... _host ='127.0.0.1' _port = 5000 ... host = host or sn_host or _host port = int(port or sn_port or _port) ... from werkzeug.serving import run_simple try: run_simple(host, port, self, **options) finally: # reset the first request information if the development server # reset normally. This makes it possible to restart the server # without reloader and that stuff from an interactive shell. self._got_first_request = False
在第三部分中还有一个if
判断,那么这个判断的作用是什么呢,有python基础的朋友对这个写法大概不陌生,if
逻辑判断时只有本文件为执行文件的时候才会执行,为什么要这么设计呢?因为在开发环境我们是以app.py作为执行文件,但是在真实的生产环境下 ,此文件会作为被调用的文件,并且真实的生成环境不会用到app.run()做监听分配
, 原因是性能太低了,
总结:导入Flask的核心类实例化对象app,然后app作为装饰器使用匹配url分发给下面的视图函数,然后执行该页面会触发app调用run()方法运行起来整个项目。