前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >视图概述与路由

视图概述与路由

作者头像
星哥玩云
发布2022-09-14 18:49:23
2080
发布2022-09-14 18:49:23
举报
文章被收录于专栏:开源部署

一、视图概述

  • 作用 接收web请求并返回web响应
  • 本质 python的函数
  • 使用 先定义视图再匹配路由

二、路由

概述

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

格式

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

url_map属性

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

使用:app.url_map

无参路由

代码语言:javascript
复制
<span class="hljs-meta">@app.route('/index/')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">index</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">'Hello Flask'</span>

传参路由

A、带一个参数的路由

代码语言:javascript
复制
<span class="hljs-comment"># 带参路由,参数写在&lt;&gt;中</span>
<span class="hljs-meta">@app.route('/arg/&lt;name&gt;')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">arg</span><span class="hljs-params">(name)</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">'Hello %s !'</span> % name

B、带多个参数的路由

代码语言:javascript
复制
<span class="hljs-meta">@app.route('/args/&lt;name&gt;_&lt;age&gt;')</span>
<span class="hljs-meta">@app.route('/args/&lt;name&gt;/&lt;age&gt;')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">args</span><span class="hljs-params">(name, age)</span>:</span>
    print(name, age)
    <span class="hljs-keyword">return</span> name, age

C、参数类型限制

  • string 默认 参数类型为字符串
  • int 限制参数类型为整数
  • float 限制参数类型为小数
  • path 其实也是字符串,只是’/'不再是分隔符
代码语言:javascript
复制
<span class="hljs-meta">@app.route('/welcome/&lt;string:name&gt;/&lt;int:age&gt;/&lt;float:height&gt;/&lt;path:pstr&gt;/')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">welcome</span><span class="hljs-params">(name, age, height, pstr)</span>:</span>
    print(type(name),type(age), type(height), type(pstr))
    print(name, age, height, pstr)
    <span class="hljs-keyword">return</span> <span class="hljs-string">'类型限制'</span>

注意:

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

D、正则约束

作用

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

正则转换类(app.py)

代码语言:javascript
复制
<span class="hljs-keyword">from</span> werkzeug.routing <span class="hljs-keyword">import</span> BaseConverter
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">RegexConverter</span><span class="hljs-params">(BaseConverter)</span>:</span>
    <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">__init__</span><span class="hljs-params">(self, url, *args)</span>:</span>
        super().__init__(url)
        self.regex = args[<span class="hljs-number">0</span>]

给app对象注册路由转换类

代码语言:javascript
复制
app.url_map.converters[<span class="hljs-string">"regex"</span>] = RegexConverter

使用

代码语言:javascript
复制
<span class="hljs-meta">@app.route("/test_regex/&lt;regex('\d{2}'):age&gt;/")</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_regex</span><span class="hljs-params">(age)</span>:</span>
    <span class="hljs-comment"># 正则约束是约束的值的样子,不会约束类型</span>
    print(age)
    <span class="hljs-keyword">return</span> age

HTTP方法

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

GET

代码语言:javascript
复制
<span class="hljs-meta">@app.route("/get/")</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_get</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">"GET"</span>

POST

代码语言:javascript
复制
<span class="hljs-meta">@myApp.route("/post/", methods=["POST"])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_post</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">"POST"</span>

GET OR POST

代码语言:javascript
复制
<span class="hljs-meta">@myApp.route("/get_post/", methods=["GET", "POST"])</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">test_get_post</span><span class="hljs-params">()</span>:</span>
    <span class="hljs-keyword">return</span> <span class="hljs-string">"test_get_post"</span>

http请求方式

  • get
  • post
  • put
  • patch
  • delete
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、视图概述
  • 二、路由
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档