关于Flask 视图介绍

目录
  • 2、类视图
    • 2.1 标准类视图
      • 2.1.1 基于方法的视图

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 视图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Flask框架路由和视图用法实例分析

    本文实例讲述了Flask框架路由和视图用法.分享给大家供大家参考,具体如下: 创建一个简单flask框架程序 #1.导入Flask类 from flask import Flask #2.创建Flask对象接收一个参数__name__,它会指向程序所在的包 app = Flask(__name__) #3.装饰器的作用是将路由映射到视图函数index @app.route('/') def index(): return 'Hello World' #4.Flask应用程序实例的run方法,启动

  • Flask框架实现给视图函数增加装饰器操作示例

    本文实例讲述了Flask框架实现给视图函数增加装饰器操作.分享给大家供大家参考,具体如下: 在@app.route的情况下增加装饰器的写法: from flask import Flask,request,render_template,redirect,session,url_for,views from flask import render_template app = Flask(__name__) #实例化flask对象 app.debug = True #能够随时更改自动重启,不加的

  • flask框架视图函数用法示例

    本文实例讲述了flask框架视图函数用法.分享给大家供大家参考,具体如下: flask框架 视图函数当中 各种实用情况简单配置 1 建立连接 2 路由参数 3 返回网络状态码 4 自定义错误页面 5 重定向 6 正则url限制 和 url 优化 7 设置和获取cookie #coding:utf8 # 导入flask from flask import Flask,abort,redirect,make_response,request from werkzeug.routing import

  • python-Web-flask-视图内容和模板知识点西宁街

    基本使用 #设置cookie值 @app.route('/set_cookie') def set_cookie(): response = make_response("set_cookie") response.set_cookie("name","zhangsan") response.set_cookie("age","13",10) #10秒有效期 return response #获取cooki

  • python Web flask 视图内容和模板实现代码

    这篇文章主要介绍了python Web flask 视图内容和模板实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 基本使用 # 设置cookie值@ app.route('/set_cookie') def set_cookie(): response = make_response("set_cookie") response.set_cookie("name", "zhangsan"

  • 关于Flask 视图介绍

    目录 2.类视图 2.1 标准类视图 2.1.1 基于方法的视图 1.视图函数 之前的文章说过,在 Flask 中路由是请求的 url 与处理函数之间的映射,使用app.route装饰器将处理函数和 url 绑定,路由绑定的处理函数就被成为视图函数. @app.route('/user/<name>') def hello_user(name): return 'Hello {}!'.format(name) 上面的hello_user()函数就是一个简单的视图函数. 当然我们也可以不使用ap

  • Django框架视图介绍与使用详解

    本文实例讲述了Django框架视图介绍与使用.分享给大家供大家参考,具体如下: 视图 视图:即一个python函数,可以叫 视图函数,或者简称 视图,定义在 应用/views.py 文件中. 作用:接收并处理请求,调用M和T,响应请求(返回HttpResponse或其子类) 每一个用户请求,都对应着一个视图(和url地址),由视图处理请求后,再返回html页面内容给浏览器显示. URL配置及匹配 作用:建立url地址和视图函数的对应关系,当用户请求某个url地址时,让django能找到对应的视图

  • MYsql库与表的管理及视图介绍

    目录 库的管理 1.库的管理 2.表的管理 3.表的修改 表操作的练习题 视图 视图的作用 应用场景 创建视图的语法 库的管理 1.库的管理 创建.修改.删除 1.库的创建 CREATE DATABASE UF NOT EXISTS books: 2.库的修改 库名一般不修改,不安全. 更改库的字符集 ALTER DATABASE books CHARACTER SET gbk; 3,删除 DROP DATABASE books; 2.表的管理 创建(create).修改(alter).删除(d

  • Sql Server中的视图介绍

    一):视图的定义 视图是由基于一个或多个表的一个查询所定义的虚拟表,它将查询的具体定义保存起来,视图不包含任何数据. 视图在操作上和数据表没有什么区别,但两者的差异是在其本质上的.数据表是实际存储记录的地方,然而视图并不是保存任何记录,它存储的实际上是查询语句. 相同的数据表,根据不同用户的不同需求,可以创建不同的视图. 二):视图的作用 1):筛选表中的行 2):防止未经许可的用户访问敏感数据 3):降低数据库的复杂程度 4):将多个物理数据抽象为一个逻辑数据库 三):创建视图实例 复制代码

  • 使用Python的Flask框架来搭建第一个Web应用程序

    1.初始化 在这章,你将学到Flask应用程序的不同部分.同时,你将编写和运行你的第一个Flask web应用程序. 所有的Flask应用程序都必须创建一个 应用程序实例 .使用web服务器网关接口协议将所有从客户端接收的请求传递给这个对象处理.这个应用程序实例就是Flask类的一个对象,通常使用下面的方式创建: from flask import Flask app = Flask(__name__) Flask类构造函数唯一需要的参数就是应用程序的主模块或包.对于大多数应用程序,Python

  • Flask response响应的具体使用

    目录 引言 response响应 元组形式响应 make_response函数 返回json格式数据 其他特殊响应 redirect() 重定向 abort() 中断 源代码 引言 客户端发送 http 请求给 Flask程序,Flask 调用视图函数后,会将其返回值作为响应的内容.大多情况下,响应就是一个简单的字符串,作为 Html 页面回送客户端. 但 http 协议需要的不仅是作为请求响应的字符串.http 响应中有一个很重要的部分是状态码,Flask设为200,代表请求已被成功处理. r

  • Pyhon Flask框架:第一个Flask程序

    目录 创建Flask项目 app.py介绍 运行Flask程序 总结 Flask框架介绍 Flask诞生于2010年,是Armin ronacher用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架,其本身相当于一个内核,其他几乎所有的功能都要用到扩展,都需要第三方的扩展来实现. 其WSGI工具箱采用Werkzeug(路由模块),模板引擎则使用Jinja2,这两个也是Flask框架的核心,它们分别负责业务处理和安全方面的功能.其中: Werkzeug库:支持URL路由请求集成

  • Python使用Web框架Flask开发项目

    目录 一.简介 二.安装 三.从 Hello World 开始 3.1 Hello World 3.2 修改Flask的配置 3.3 调试模式 3.4 绑定IP和端口 3.5 本节源码 四.获取 URL 参数 4.1 建立Flask项目 4.2 列出所有的url参数 4.3 获取某个指定的参数 4.4 如何处理多值 4.5 本节源码 五.获取POST方法传送的数据 5.1 建立Flask项目 5.2 查看POST数据内容 5.3 解析POST数据 5.4 本节源码 六.处理和响应JSON数据 6

  • Python flask使用ajax上传文件的示例代码

    目录 前言 JS Form的enctype属性 Input MIME类型(更多直接百度,类型超乎你的想想) 上传单个文件 html代码部分 javascript代码部分 flask 视图函数部分 上传多个文件 html js 出问题解决方案 前言 JS 为什么要用ajax来提交在使用from提交时,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名. 为安全起见,即file-upload 元素不允许 HTML 作者或 JavaScript 程序员指定一个默认的文件名.HTML value

随机推荐