Flask开发实战-初识Flask
Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
Flask与Django
Flask和Django都是Python Web开发框架,但它们各自有各自的特点和适用项目。以下是对它们的特点、区别和适用项目的详细描述: Flask的特点: 轻量级:Flask是一个轻量级的Web框架,它只提供了基本的框架结构和功能,没有内置的ORM、表单验证、用户认证等组件,因此更加灵活和易于扩展。 定制性强:由于Flask的灵活性,开发者可以自由选择和组合所需的组件,也可以方便地定制自己的组件,这使得开发过程更加具有创造性。 适合小型项目:由于Flask的轻量级和灵活性,它适合开发小型Web应用程序或微服务。对于需要快速开发原型或小型项目的场景,Flask是一个很好的选择。
Django的特点: 功能强大:Django是一个功能强大的Python Web框架,提供了完整的ORM、表单验证、用户认证、URL路由等功能,可以快速开发复杂的应用程序。 结构化:Django采用MVT(Model-View-Template)架构模式,使得应用程序的结构更加清晰和易于维护。 安全性高:Django在默认情况下提供了很多安全措施,比如自动转义输出、防止跨站脚本攻击等,这使得使用Django开发的应用程序更加安全。 适合大型项目:由于Django的功能强大、结构化和安全性高,它适合开发大型、复杂的Web应用程序。对于需要长期维护和扩展的大型项目,Django是一个很好的选择。
适用项目: Flask适合小型项目或原型开发,而Django适合大型项目或企业级应用。在选择框架时,需要根据项目的需求和规模来决定。如果项目需要快速迭代或尝试新的技术,那么Flask可能更适合。如果项目需要长期维护和扩展,并且需要高度的功能和安全性,那么Django可能更适合。
环境准备
基于快速建站和轻量级的特点,我们选择flask作为开发框架,要想使用flask需要先准备一下环境:
操作系统:Windows11
集成开发环境:pycharm2022.3.1
开发语言:python3.8.10
要使用flask作为开发框架我们需要先安装一下:
pip3 install flask -i https://pypi.douban.com/simple
验证安装是否成功
pip show flask
快速开始一个项目
首先使用pycharm创建一个项目,不会的可以自行百度一下,然后在项目中创建一个app.py文件
# !/usr/bin/env python # -*- coding: UTF-8 –*- __author__ = 'Mr.Li' # 导入flask模块 from flask import Flask # 初始化实例 app = Flask(__name__) # 路由,当在页面访问ip:端口/index时,执行函数内的内容 @app.route('/index') def index(): return 'hello world' if __name__ == '__main__': app.run()
以上几行代码就实现了一个后端接口功能,虽然它很简单,但确实很方便
我们从浏览器中访问:http://127.0.0.1:5000/index
扩展
在安装flask时,会默认安装一些其他依赖比如Jinja2、Werkzeug,其中Jinja2是渲染模板用的,而Werkzeug是flask的核心,用来做请求和响应对象以及其他Web相关的工具,我们本次实战不使用Jinja2渲染模板,所以这里不多做介绍,感兴趣的可以自行百度一下。
flask其实只具备:路由/视图/模板Jinja2/session/中间件等,其他功能都是第三方组件实现的,让我们来用Werkzeug实现一下请求功能
# !/usr/bin/env python # -*- coding: UTF-8 –*- __author__ = 'Mr.Li' from werkzeug.serving import run_simple def func(environ,start_response): print('请求来了') pass if __name__ == '__main__': run_simple('127.0.0.1',5000,func)
在浏览器中直接访问http://127.0.0.1:5000/
可以看出,请求到达了后端了,虽然有报错,目前还只是单纯用Werkzeug实现wsgi功能,我们在改造一下
# !/usr/bin/env python # -*- coding: UTF-8 –*- __author__ = 'Mr.Li' # 导入werkzeug模块 from werkzeug.serving import run_simple # 定义一个类 class Flask(): # 类的回调函数 def __call__(self,nviron,start_response): print('请求来了') pass # 实例化自定义类 app = Flask() if __name__ == '__main__': # 使用werkzeug执行自定义类 run_simple('127.0.0.1',5000,app)
我们自定义了一个叫Flask的类(你也可以叫别的),然后给Flask类定义了一个回调函数(__call__),即Flask类的实例对象被当做函数时,被自动调用,目前看着已经有点眼熟了,我们再稍微修改一下
# !/usr/bin/env python # -*- coding: UTF-8 –*- __author__ = 'Mr.Li' # 导入werkzeug模块 from werkzeug.serving import run_simple # 定义一个类 class Flask(): # 类的回调函数 def __call__(self,nviron,start_response): print('请求来了') pass def run(self): run_simple('127.0.0.1', 5000, self) # 实例化自定义类 app = Flask() if __name__ == '__main__': # 使用werkzeug执行自定义类 app.run()
现在来看代码,是不是很眼熟,没错,真正的Flask其实就是这么实现的,基于我们快速开始一个flask项目的代码来说,flask用app.router()提供路由,后端的请求和响应其实都是Werkzeug来实现的,所有它可以这么少的代码就实现快速建站
-
flask框架是基于werkzeug的wsgi实现,flask本身没有wsgi
-
用户请求一旦到达,就会调用app._call_方法