flask-类视图


  • 标准类视图

    •  from flask import Flask, render_template, views, jsonify
      
       app = Flask(__name__)
      
       class JsonView(views.View):
      def get_response(self):
      raise NotImplementedError() def dispatch_request(self):
      response = self.get_response()
      return jsonify(response) class IndexView(JsonView):
      def get_response(self):
      context = {
      'username': 'ivy'
      }
      return context app.add_url_rule('/', view_func=IndexView.as_view('index')) class FakeView(object):
      def __init__(self):
      super().__init__()
      self.context = {
      'username': 'ivy',
      } class TestView(JsonView, FakeView):
      def get_response(self):
      self.context.update({'age': 23})
      return self.context app.add_url_rule('/test', view_func=TestView.as_view('test')) if __name__ == '__main__':
      app.run()

      标准类视图必须继承自flask的view.View且自定义实现dispatch_request方法,最后在app中使用add_url_rule实现路由,第一个参数是该视图对应的路由,view_func制定该路由对应的视图,类视图采用类视图的as_view方法作为视图函数对应。

    • 利用类视图可以实现抽象视图,让子类视图自定义实现返回规则,对于一些共同的属性可以采用多继承的方式获取。
  • 基于调度的类视图
    •  from flask import Flask, render_template, views, jsonify
      
       app = Flask(__name__)
      
       class LoginView(views.MethodView):
      def get(self):
      return 'get' def post(self):
      return 'post' app.add_url_rule('/login', view_func=LoginView.as_view('login')) if __name__ == '__main__':
      app.run()
      MethodView可以根据请求方法自己调用自定义类视图的方法函数,跟django的View类一样
  • 类视图使用装饰器
    •  from flask import Flask, views, request
      from functools import wraps app = Flask(__name__) def login_required(func):
      @wraps(func)
      def wrapper(*args, **kwargs):
      # 模拟登陆验证
      name = request.args.get('name')
      if name:
      return func(*args, **kwargs)
      return '未登录' return wrapper @app.route('/')
      @login_required
      def index():
      return 'index page' class IndexView(views.View):
      decorators = [login_required] def dispatch_request(self):
      return 'index page view' app.add_url_rule('/index', view_func=IndexView.as_view('index_view')) if __name__ == '__main__':
      app.run()

      类视图想和函数视图使用一样的装饰器,直接使用类属性decorators,  decorators是一个列表,里面接受装饰器的函数体

flask-类视图的更多相关文章

  1. Flask初学者:视图函数和类视图

    当一个url请求进入后台时,一般有两种方式来进行处理:视图函数和类视图.视图函数直接使用一个函数来进行处理并返回数据给浏览器,类视图则是使用类来进行处理并返回的,所以当需要进行的处理比较简单,则可以考 ...

  2. 9、Flask实战第9天:类视图

    之前我们接触的视图都是函数,所以一般简称为视图函数.其实视图函数也可以基于类来实现,类视图的好处是支持继承,写完类视图需要通过app.add_url_rule(url_rule, view_func) ...

  3. Flask(10)- 标准类视图

    前言 前面文章讲解 Flask 路由的时候,都是将 URL 路径和一个视图函数关联 当 Flask 框架接收到请求后,会根据请求 URL,调用响应的视图函数进行处理 Flask 不仅提供了视图函数来处 ...

  4. Flask之视图(一)

    2.关于Flask 知识点 从Hello World开始 给路由传递参数 返回状态码 重定向 正则URL 设置cookie和获取cookie 扩展 上下文 请求钩子 Flask装饰器路由的实现 Fla ...

  5. 【Flask】视图高级

    # 视图高级笔记:### `add_url_rule(rule,endpoint=None,view_func=None)`这个方法用来添加url与视图函数的映射.如果没有填写`endpoint`,那 ...

  6. Flask05 cookie、类视图、方法视图、自己的404页面

    1 什么是cookie 就是网站存放到你浏览器中的一部分固定内容:当你下次访问我这个网站的时候,你会把之前我存放到你浏览器中的数据带回来给我        你要先登录(用户名.密码) ->   ...

  7. flask类装饰器

    from flask import Flask,request,views from functools import wraps app = Flask(__name__) #自定义登录装饰器 de ...

  8. Visual studio 类视图和资源视图不显示的问题

    关于Visual studio 类视图和资源视图不显示的问题 解决方法: 1. 工具—选项—文本编辑器—C/C++—高级,浏览/导航下的禁用数据库选项置为False; 2. 输入命令:devenv / ...

  9. visual studio2010 “类视图”和“对象浏览器”图标

    “类视图”和“对象浏览器”显示一些图标,这些图标表示代码实体,例如命名空间.类.函数和变量. 下表以图文并茂的形式说明了这些图标. 图标 说明 图标 说明 namespace 方法或函数 类 运算符 ...

  10. 在DJANGO的类视图中实现登陆要求和权限保护

    以前接触的是基于函数的保护,网上材料比较多. 但基于类视图的很少. 补上! Decorating class-based views 装饰类视图 对于类视图的扩展并不局限于使用mixin.你也可以使用 ...

随机推荐

  1. Go 武林外传 - 初出茅庐

    没有旁白. 我叫小白, 白痴的白. 老头说我太笨了, 提前放我下山, 让我自生自灭. 对了, 忘了说了, 那老头是我师傅. 虽然我的内心深处是拒绝的, 但是我又打不过老头, 只好收拾铺盖滚犊子了. 算 ...

  2. 03-Vue数据请求

    1. vue-resource vue-resource jsonp请求 <body> <div id="app"> <!-- v-model 监听表 ...

  3. 【TIJ4】第五章全部习题

    第五章习题 5.1 package ex0501; //[5.1]创建一个类,它包含一个未初始化的String引用.验证该引用被Java初始化成null class TestDefaultNull { ...

  4. 最详细的 Spring Boot 多模块开发与排坑指南

    创建项目 创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提.你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目 ...

  5. Idea中使用http请求解决中文乱码问题

    以请求百度为例,使用如下代码即可解决: GET https://www.baidu.com User-Agent: Mozilla/.X MetaSr 1.0

  6. 【WebGL】WebGL API 详解

    基于 WebGL Specifications 最全面的API释疑. 类型以及对象定义 这部分内容主要定义一部分类型和数据结构. typedef unsigned long GLenum; typed ...

  7. MacOS下的渗透测试工具

    信息收集工具 工具名称 安装命令 CeWL brew install sidaf/pentest/cewl dirb brew install sidaf/pentest/dirb dnsrecon ...

  8. if-else代码优化的八种方案

    前言 代码中如果if-else比较多,阅读起来比较困难,维护起来也比较困难,很容易出bug,接下来,本文将介绍优化if-else代码的八种方案. 优化方案一:提前return,去除不必要的else 如 ...

  9. 洛谷 P3808 【模板】AC自动机(简单版) 题解

    原题链接 前置知识: 字典树.(会 \(\texttt{KMP}\) 就更好) 显然呢,本题用 字典树 和 \(\texttt{KMP}\) 无法解决问题. 所以我们发明了一个东西: \(\textt ...

  10. CDNbest-设置不缓存

    写在开始之前 有时候根据业务需求,我们网站不需要缓存,这时候就需要设置下 让网站不走缓存 步骤一 登录平台找到我们的站点->站点设置->缓存设置 如图 备注:填写需要操作的域名,时间为&q ...