Flask开发实战-初识flask

LiRongYang / 2024-08-23 / 原文

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_方法