组团学

视图概述与路由

阅读 (189424)

一、视图概述

  • 作用

    接收web请求并返回web响应

  • 本质

    python的函数

  • 使用

    先定义视图再匹配路由

二、路由

  • 概述

    请求地址会被底层Werkzeug库处理(去除ip和端口),用于进行路由匹配,匹配成功后将找打的视图函数进行调用,处理本次用户的请求

  • 格式

    • @工程对象.route(“url地址”)
    • @蓝图对象.route(“url地址”)
  • url_map属性

    功能:查看当前所有的路由配置

    使用:app.url_map

  • 无参路由

    @app.route('/index/') def index(): return 'Hello Flask'
  • 传参路由

    A、带一个参数的路由

    # 带参路由,参数写在<>中 @app.route('/arg/<name>') def arg(name): return 'Hello %s !' % name

    B、带多个参数的路由

    @app.route('/args/<name>_<age>') @app.route('/args/<name>/<age>') def args(name, age): print(name, age) return name, age

    C、参数类型限制

    • string 默认 参数类型为字符串
    • int 限制参数类型为整数
    • float 限制参数类型为小数
    • path 其实也是字符串,只是’/'不再是分隔符
    @app.route('/welcome/<string:name>/<int:age>/<float:height>/<path:pstr>/') def welcome(name, age, height, pstr): print(type(name),type(age), type(height), type(pstr)) print(name, age, height, pstr) return '类型限制'

    注意:

    • 路由末尾的’/'建议都加上,因为路由需要的时候浏览器会自动加上,输入时加不加都行
    • 若需要制定参数,将参数写在<>中,视图函数参数要与路由参数一致
    • 若需要知道参数类型,如:int/float/path等,写在参数前,用’:'与参数隔开
    • 不指定类型,参数默认是string,path其实也是字符串,只是’/'不再是分隔符

    D、正则约束

    • 作用

      使用正则表达式对路由进行更具体的约束

    • 正则转换类(app.py)

      from werkzeug.routing import BaseConverter class RegexConverter(BaseConverter): def __init__(self, url, *args): super().__init__(url) self.regex = args[0]
    • 给app对象注册路由转换类

      app.url_map.converters["regex"] = RegexConverter
    • 使用

      @app.route("/test_regex/<regex('\d{2}'):age>/") def test_regex(age): # 正则约束是约束的值的样子,不会约束类型 print(age) return age
  • HTTP方法

    概述:默认视图可以被GET访问,flask中可以规定以什么样的方式请求视图,如果使用不正确的请求方式会返回405错误

    GET

    @app.route("/get/") def test_get(): return "GET"

    POST

    @myApp.route("/post/", methods=["POST"]) def test_post(): return "POST"

    GET OR POST

    @myApp.route("/get_post/", methods=["GET", "POST"]) def test_get_post(): return "test_get_post"
  • http请求方式

    • get
    • post
    • put
    • patch
    • delete
需要 登录 才可以提问哦