3.1正则转换器定义

Class RegexConverter(BaseConverter):

  regex = "[0-9]{6}"

app.url_map.converters["re"] = RegexConverter

@app.route("/user/<re:user_id>")

def index():

  return "hello wolrd"

  1. from flask import Flask
  2. from werkzeug.routing import BaseConverter
  3.  
  4. # 创建自定义转换器
  5. class RegexConverter(BaseConverter):
  6. regex = "[0-9]{6}"
  7.  
  8. app = Flask(__name__)
  9. # 将自己的转换器加入默认的服务器列表中
  10. app.url_map.converters["re"] = RegexConverter
  11.  
  12. # 规则: /user/6位数字 [0-9]{6}
  13. # 自定义转换器
  14. @app.route("/user/<re:user_id>")
  15. def index(user_id):
  16. return "index + %s" % user_id
  17.  
  18. if __name__ == '__main__':
  19. app.run(debug=True)

创建自定义转换器

3.2正则自定义转换器

Class RegexConverter(BaseConverter):

  def __init__(self, url_map , *args):

    super(RegexConverter, self).__init__(url_map)

    self.regex = args[0]

app.url_map.converters["re"] = RegexConverter

@app.route("/user/<re(‘[0-9]{6}’):user_id>")

def index():

  return "hello wolrd"

  1. from flask import Flask
  2. from werkzeug.routing import BaseConverter
  3.  
  4. # 创建自定义转换器
  5. class RegexConverter(BaseConverter):
  6. # regex = "[0-9]{6}"
  7. def __init__(self, url_map, *args):
  8. super(RegexConverter, self).__init__(url_map)
  9. self.regex = args[0]
  10.  
  11. app = Flask(__name__)
  12. # 将自己的转换器加入默认的服务器列表中
  13. app.url_map.converters["re"] = RegexConverter
  14.  
  15. # 规则: /user/6位数字 [0-9]{6}
  16. # 自定义转换器
  17. @app.route("/user/<re('[0-9]{5}'):user_id>")
  18. def index(user_id):
  19. return "index + %s" % user_id
  20.  
  21. if __name__ == '__main__':
  22. app.run(debug=True)

自定义转换器

3.3 转换器 to_python to_url

class ListConverter():

  regex  = "(\\d,)+\\d$"

  

  1. # 匹配参数后 对参数进行处理 再返回到视图函数上去

  def to_python(self, value):

    return value.split(",")

  1. # 使用url_for 的时候,对视图函数传的参数进行处理,以匹配路由
    # redirect(url_for("demo1",user_id=[1,2,3,4]))

  def to_url(self, value):

    return ",".join(str(v) for v in value)

  

  1. from flask import Flask, redirect, url_for
  2. from werkzeug.routing import BaseConverter
  3.  
  4. # 创建自定义转换器
  5. class RegexConverter(BaseConverter):
  6. # regex = "[0-9]{6}"
  7. def __init__(self, url_map, *args):
  8. super(RegexConverter, self).__init__(url_map)
  9. self.regex = args[0]
  10.  
  11. class ListConverter(BaseConverter):
  12. regex = "(\\d+,)+\\d$"
  13.  
  14. # 匹配参数后 对参数进行处理 再返回到视图函数上去
  15. def to_python(self, value):
  16. return value.split(',')
  17.  
  18. # 使用url_for 的时候,对视图函数传的参数进行处理,以匹配路由
  19. def to_url(self, value):
  20. result = ",".join(str(v) for v in value)
  21. return result
  22.  
  23. app = Flask(__name__)
  24. # 将自己的转换器加入默认的服务器列表中
  25. app.url_map.converters["re"] = RegexConverter
  26. app.url_map.converters["list"] = ListConverter
  27.  
  28. # 规则: /user/6位数字 [0-9]{6}
  29. # 自定义转换器
  30. @app.route("/user/<re('[0-9]{5}'):user_id>")
  31. def demo1(user_id):
  32. return "index + %s" % user_id
  33.  
  34. @app.route("/users/<list:user_id>")
  35. def demo2(user_id):
  36. return "uses + %s" % user_id
  37.  
  38. @app.route("/demo3")
  39. def demo3():
  40. return redirect(url_for("demo2", user_id=[1, 2, 3, 4]))
  41.  
  42. if __name__ == '__main__':
  43. app.run(debug=True)

to_python to_url

3.4 错误捕捉 

abort(404) #直接抛出 404

@app.errorhandler(404)  # 捕捉404 返回不见了

def demo1():

  return "页面不见了"

【Flask】 python学习第一章 - 3.0 正则转换和错误捕捉的更多相关文章

  1. 【Flask】 python学习第一章 - 6.0 WTF表单 数据库 蓝图

    WTF表单  wtf.py pip install flask-wtf  # 安装 from flask_wtf import FlaskForm from wtform import StringF ...

  2. 【Flask】 python学习第一章 - 2.0 视图方式和返回值

    路由参数与请求方式制定   ALT+回车 pycharm 快速导包  demo3  指定访问地址  与请求方式  #   给路由传入参数 使用尖括号 ,视图函数需要接收参数 @app.route(&q ...

  3. 【Flask】 python学习第一章 - 5.0 模板

    jinjia2 模板 python实现 flask 内置语言  参照Djago实现  设置模板文件夹 设置模板语言 jinja2 demo6_template.html  ----> 从代码渲染 ...

  4. 【Flask】 python学习第一章 - 4.0 钩子函数和装饰器路由实现 session-cookie 请求上下文

    钩子函数和装饰器路由实现 before_request 每次请求都会触发 before_first_requrest  第一次请求前触发 after_request  请求后触发 并返回参数 tear ...

  5. 【Flask+Redis】 python学习第一章 - 7.0 断言 数据库测试 redis学习

    assert 断言 def div(num1, num2): # 断言 assert isinstance(num1, int), "值类型错误" assert isinstanc ...

  6. python学习 第一章(说不定会有第零章呢)one day

    ------------恢复内容开始------------ 一.啥是python python是吉尔·范罗苏姆于1989年开发的一个新的脚本解释程序,是ABC语言的一种继承. 二.python的特点 ...

  7. 【Flask】 python学习第一章 - 创建与运行参数

    windos 创建环境 sudo pip install virtualenv   # 安装virtualenv virtualenv -p python dir_name cd dir_name p ...

  8. Python 学习第一章

    学习内容如下: Python 介绍 Python 3 VS Python 2 软件的安装 第一个 Python 程序 变量与字符编码 用户输入与注释 一.Python 介绍 python的创始人为吉多 ...

  9. Python学习第一章

    1.Python保留字即是关键字,我们不可以把他们当作任何标识符名称. python的标准库提供了一个keyword模板,可以输出当前版本的关键字: >>>import keywor ...

随机推荐

  1. Linux中搜索大于200M的文件

    Linux中清理磁盘空间时,经常需要找出大于200M的文件. 这个命令可以实现这个功能: find / -size +200M -exec du -h {} \;

  2. [LeetCode] 583. Delete Operation for Two Strings 两个字符串的删除操作

    Given two words word1 and word2, find the minimum number of steps required to make word1 and word2 t ...

  3. POJ1166 The Clocks (爆搜 || 高斯消元)

    总时间限制: 1000ms,内存限制: 65536kB 描述 |-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | ...

  4. ubuntu samba 服务器搭建

    最近总是在搭建 samba 环境,写在笔记上记录下以备后用,长时间不操作了肯定会忘记. Linux 版本:Ubuntu 18.04 具体的操作命令: 1. 安装: sudo apt-get insta ...

  5. 华为路由器+三层交换,路由器配置DHCP,交换机中继DHCP

    LSW14:undo terminal monitorsystem-viewsysname SW1vlan batch 10 20 30 40 66interface Ethernet0/0/1por ...

  6. oracle11g数据库导入导出方法教程

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/xinxiaoyonng/article/ ...

  7. 21 javaweb开发--bug调试技巧

    1.当修改代码后,测试时没有任何效果 解决方案:换个浏览器试试,可能是浏览器缓存的原因.

  8. Spring Cloud初认识

    一.MicroService基本描述 微服务(MicroService)架构产生的原因:解决单体应用框架的缺点. 单体应用(Monolith)框架:所有的代码及功能都包含在一个WAR包中的项目组织方式 ...

  9. 分布式全文搜索引擎(ElasticSearch)

    1. ElasticSearch介绍(简称ES) ES即为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案. 首先,ES的索引库管理支持依然是基于Ap ...

  10. JZOJ

    题目: 三类动物A.B.C,A吃B,B吃C,C吃A.给出K句话来描述N个动物(各属于A.B.C三类之一)之间的关系,格式及意义如下:1 X Y:表示X与Y是同类: 2 X Y:表示X吃Y.K句话中有真 ...