CBV(源码分析)

  1. from flask import Flask, views
  2. app = Flask(__name__)
  3. class IndexView(views.MethodView):
  4. methods = ['GET', 'POST']
  5. def get(self):
  6. return '这个是get请求'
  7. def post(self):
  8. return '这个是post请求'
  9. app.add_url_rule('/', view_func=IndexView.as_view(name='index'), endpoint='xxx')
  10. if __name__ == '__main__':
  11. app.run()
app.add_url_rule参数
  1. @app.routeapp.add_url_rule参数:
  2. ruel,URL规则
  3. view_func,视图函数名称
  4. defaults = None,默认值,当URL中无参数,函数需要参数时,使用defaults = {'k',:'v'}
  5. 为函数提供参数
  6. endpoint = None,名称,用于反向生成URL,即:url_for("名称")
  7. methods = None,允许请求方式,如:["GET","POST"]
  8. # 对URL最后的/符号是否严格要求
  9. strict_slashes = None
  10. '''
  11. @app.route('/index', strict_slashes=False)
  12. #访问http://www.xx.com/index/ 或http://www.xx.com/index均可
  13. @app.route('/index', strict_slashes=True)
  14. #仅访问http://www.xx.com/index
  15. '''
  16. redirect_to = None
  17. '''
  18. @app.route('/index/<int:nid>', redirect_to='/home/<nid>')
  19. '''
支持正则
  1. '''
  2. 1. 写类,继承BaseConverter
  3. 2. 注册:app.url_map.converters
  4. 3. 使用:@app.route('/index/<regex("\d+"):nid>') 正则表达式会当作第二个参数传递到类中
  5. '''
  6. from flask import Flask, views, url_for
  7. from werkzeug.routing import BaseConverter
  8. app = Flask(import_name=__name__)
  9. class RegexConverter(BaseConverter):
  10. """
  11. 自定义URL匹配正则表达式
  12. """
  13. def __init__(self, map, regex):
  14. super(RegexConverter, self).__init__(map)
  15. self.regex = regex
  16. def to_python(self, value):
  17. """
  18. 路由匹配时,匹配成功后传递给视图函数中参数的值
  19. """
  20. return int(value)
  21. def to_url(self, value):
  22. """
  23. 使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
  24. """
  25. val = super(RegexConverter, self).to_url(value)
  26. return val
  27. # 添加到flask中
  28. # regex 是我们自定义的
  29. app.url_map.converters['regex'] = RegexConverter
  30. @app.route('/index/<regex("\d+"):nid>')
  31. def index(nid):
  32. print(type(nid))
  33. print(url_for('index', nid='888'))
  34. return 'Index'
  35. if __name__ == '__main__':
  36. app.run()

CBV、正则的更多相关文章

  1. python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统

    一.FBV和CBV1.基于函数的view,就叫FBV(Function Based View) 示例: def add_book(request): pub_obj=models.Publisher. ...

  2. python自动化开发-[第二十天]-form表单,CBV和FBV,序列化

    1.CBV和FBV的用法 2.序列化用法 3.form表单 一.CBV和FBV 1.cbv是 class based view(基于类),fbv是function based view(基于函数) 2 ...

  3. django基础之FBV与CBV,ajax序列化补充,Form表单

    目录: FBV与CBV ajax序列化补充 Form表单(一) 一.FBV与CBV 1.什么是FBV.CBV? django书写view时,支持两种格式写法,FBV(function bases vi ...

  4. django基础2: 路由配置系统,URLconf的正则字符串参数,命名空间模式,View(视图),Request对象,Response对象,JsonResponse对象,Template模板系统

    Django基础二 request request这个参数1. 封装了所有跟请求相关的数据,是一个对象 2. 目前我们学过1. request.method GET,POST ...2. reques ...

  5. Flask 的路由系统 FBV 与 CBV

    Flask的路由系统 本质: 带参数的装饰器 传递函数后 执行 add_url_rule 方法 将 函数 和 url 封装到一个 Rule对象 将Rule对象 添加到 app.url_map(Map对 ...

  6. 巨蟒python全栈开发django6: FBV&CBV&&单表查询的其他方法

    练习CBV用法 截图中的action="/cbv/",应该是这样 上边红图,说明mysql有问题,需要重启一下 返回,输入的内容 @wrapper==>cbv=wrapper ...

  7. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)

    摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...

  8. Django 路由视图FBV/CBV

    路由层  url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...

  9. Flask - 四剑客 | templates | 配置文件 | 路由系统 | CBV

    Flask框架简介 说明:flask是一个轻量级的web框架,被称为微型框架.只提供了一个高效稳定的核心,其它全部通过扩展来实现.意思就是你可以根据项目需要进行量身定制,也意味着你需要不断学习相关的扩 ...

随机推荐

  1. PAT 2-10. 海盗分赃(25)

    题目链接:http://www.patest.cn/contests/ds/2-10 解题思路:参考:http://blog.csdn.net/linsheng9731/article/details ...

  2. Swing记事本项目

    具备记事本功能:文件保存.文件打开.复制.黏贴.撤销.全选.字体修改.字体颜色修改.背景颜色修改

  3. 设置Anaconda启动jupyter的默认目录

    要解决的问题:安装好Anaconda后打开jupyter总是会自动跳到c:下的用户目录,通过以下方法可以修改其默认打开的目录 吐槽:竟然没有设置默认打开目录的选项,只能通过修改配置文件完成,让人不爽. ...

  4. 算法-搜索(5)m路搜索树

    动态m路搜索树即系统运行时可以动态调整保持较高搜索效率的最多m路的搜索树.以3路搜索树为例说明其关键码排序关系:   const int MaxValue=; template <class T ...

  5. linux上的deepin-qq不能显示图片解决方法

    在贴吧发现的一个方法 在终端输入以下命令,重新打开QQ即可 sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1 sudo sysctl -w net.piv ...

  6. Java基础的基础,花1h看这一篇就够了!

    ------------恢复内容开始------------ Java笔记 ​ 一直以来,总想着Java会点基础就可以写后端程序了,但越到后来越发现Java基础的重要性.更不必说在面试时,Java基础 ...

  7. 问题定位 | Peronca Xtrabackup 8.0近日踩坑总结 - xtrabackup 2.4和8.0区别

    目录 前言 适配过程中遇到的坑 xtrabackup 2.4和8.0区别 问题定位 坑一:MySQL 8.0 + Semi-Sync 重建问题 坑二:MySQL 8.0 + Group-Replica ...

  8. 硬核干货:4W字从源码上分析JUC线程池ThreadPoolExecutor的实现原理

    前提 很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章.之前在分析扩展线程池实现可回调的Future时候曾经提到并发 ...

  9. ORA-01455: converting column overflows integer datatypes.

    系统执行抛了一个ORA-01455: converting column overflows integer datatypes.把当时执行的SQL取出来,在plsql developer里面执行是没 ...

  10. guzzle下载图片(laravel+vue)

    先再laravel安装guzzle扩展包:composer require guzzlehttp/guzzle 之后再控制器操作: use GuzzleHttp\Client; //远程api数据的获 ...