关于Flask 视图介绍

 更新时间:2021年11月26日 09:47:48   作者:tigeriaf  
这篇文章主要分享的是关于Flask 视图介绍, Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数。下面来看文章的详细内容,需要的朋友也可以参考一下

1、视图函数

之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数。

@app.route('/user/<name>')

def hello_user(name):

    return 'Hello {}!'.format(name)

上面的hello_user()函数就是一个简单的视图函数。

当然我们也可以不使用app.route装饰器,使用app.add_url_rule()方法也可将视图函数和 url 进行绑定,实际上装饰器app.route也是调用的app.add_url_rule()方法。

def hello():

    return 'hello Flask!'

app.add_url_rule('/hello', view_func=hello)

通过app.add_url_rule()方法,可以将路由同视图分开,方便将路由进行统一管理。

2、类视图

我们之前包括上面使用的,都是基于函数的视图,这虽然是最简单便捷的用法,但是不容易扩展,其实视图函数也可以基于类来实现,好处就是类支持继承,可以把一些共性的代码放在父类中,其他子类可以继承,在某些情况下,使用类更合理,更易于扩展。

类视图分为标准类视图和基于调度方法的类视图,下面分别介绍一下。

2.1 标准类视图

标准类视图的写法:

  • 父类必须继承 flask.views.View
  • 子类实现dispatch_request()方法,完成自身的业务逻辑并返回结果
  • 子类使用app.add_url_rule()进行注册,其中view_func参数使用as_view()方法做类方法转换
  • 如果注册时指定了endpoint参数,endpoint的值会覆盖指定的视图名称,使用url_for时就必须使用endpoint指定的值

具体使用方式如下:

from flask.views import View

class ParentView(View):

    def __init__(self):

        super().__init__()

        # 公共部分信息

        self.public_data = 'Flask Web App'

class Index(ParentView):

    methods = ['GET']

    def dispatch_request(self):

        return self.public_data + " index"

class User(ParentView):

    methods = ['POST']

    def dispatch_request(self):

        return self.public_data + " user"

app.add_url_rule('/index', endpoint='index', view_func=Index.as_view('index'))

app.add_url_rule('/user', endpoint='user', view_func=User.as_view('user'))

上述代码中创建了一个 ParentView 类,继承自 flask.views.View 类,然后创建了 Index User 两个类继承自 ParentView 类,并分别重写实现了dispatch_request()函数,使用了父类 ParentView 的属性public_data, 实现自己的业务逻辑。然后我们通过as_view()方法把类转换为实际的视图函数,as_view()必须传入一个唯一不重复的视图名。此后,这个视图由app.add_url_rule()方法和指定路由绑定。

类视图支持的 HTTP 请求方法由视图类变量methods指定,默认只支持 GET 请求。

2.1.1 基于方法的视图

如果视图支持多种 HTTP 请求方法的话,之前我们都是在视图函数中进行判断,根据不同的请求方法执行不同的业务逻辑,那有没有更简单的方法呢?是有的,Flask 中的方法类视图 flask.views.MethodView 就可以做到,它是 flask.views.View 的子类,通过定义和请求方式同名的小写方法来完成了逻辑处理,不必提供methods属性,每个 HTTP 方法都映射到一个具有相同名称(小写)的函数。

下面看下详细使用方法。

from flask.views import MethodView

class UserView(MethodView):

    def get(self):

        user_id = request.args.get("user_id")

        return "Hello user:{}".format(user_id)



    def post(self):

        name = request.form.get("name")

        password = request.form.get("password")

        if name == "admin" and password == "123456":

            return "hello admin!"

        else:

            return "not allow!"

app.add_url_rule('/user/get_info', view_func=UserView.as_view('get'))

app.add_url_rule('/user/login', view_func=UserView.as_view('post'))

代码中定义的get()函数用于处理 GET 请求,post()函数用于处理 POST 请求,代码中省去了 HTTP 请求方法的判断语句,而且是不是更加RESTFul一些了。

请求测试:

到此这篇关于 关于Flask 视图介绍的文章就介绍到这了,更多相关Flask 视图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 关于Numpy中数组维度的理解

    关于Numpy中数组维度的理解

    这篇文章主要介绍了关于Numpy中数组维度的理解,多维Numpy数组也可以叫张量(tensor),当前所有机器学习系统都是使用张量作为基本数据结构,张量是一个数据容器,它包含的数据几乎是数值数据,因此它也是数字的容器,需要的朋友可以参考下
    2023-09-09
  • Python使用dict.fromkeys()快速生成一个字典示例

    Python使用dict.fromkeys()快速生成一个字典示例

    这篇文章主要介绍了Python使用dict.fromkeys()快速生成一个字典,结合实例形式分析了Python基于dict.fromkeys()生成字典的相关操作技巧,需要的朋友可以参考下
    2019-04-04
  • Python自动检测requests所获得html文档的编码

    Python自动检测requests所获得html文档的编码

    这篇文章主要为大家详细介绍了如何通过Python自动检测requests实现获得html文档的编码,文中的示例代码讲解详细,感兴趣的可以了解下
    2024-11-11
  • Python中Selenium库使用教程详解

    Python中Selenium库使用教程详解

    这篇文章主要介绍了Python中Selenium库使用教程详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • python重复值处理得方法

    python重复值处理得方法

    这篇文章主要介绍了python重复值处理得方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • Python实现微信消息防撤回功能的实例代码

    Python实现微信消息防撤回功能的实例代码

    这篇文章主要介绍了Python实现微信消息防撤回 ,需要的朋友可以参考下
    2019-04-04
  • 一文详解如何在浏览器前端运行Python程序

    一文详解如何在浏览器前端运行Python程序

    这篇文章主要介绍了如何在浏览器前端运行Python程序的相关资料,在前端运行Python代码的多种方式,包括Pyodide、Brython、Transcrypt等,每种方式都有其特点和适用场景,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • pytorch对可变长度序列的处理方法详解

    pytorch对可变长度序列的处理方法详解

    今天小编就为大家分享一篇pytorch对可变长度序列的处理方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • django使用图片延时加载引起后台404错误

    django使用图片延时加载引起后台404错误

    本文给大家介绍的是作者在Django中使用图片的延时加载技术后引起后台404错误的问题以及解决思路和方法,有需要的小伙伴可以参考下
    2017-04-04
  • 使用C语言扩展Python程序的简单入门指引

    使用C语言扩展Python程序的简单入门指引

    这篇文章主要介绍了使用C语言扩展Python程序的简单入门指引,来自于IBM官网网站技术文档,需要的朋友可以参考下
    2015-04-04

最新评论