当前位置: 首页 > news >正文

FLASK博客系列4——再谈路由

        最近好像拖更有点久了。抱歉抱歉~

        

        今天我们继续来聊聊路由(其实就是我上次偷懒剩下一点没讲完)。

       通过上次的文章,我们基本了解了Flask中的路由,是不是比较简单呢?别急,今天来点猛料。

       一、路由之HTTP方法绑定。

            我们都知道网站通过HTTP与浏览器或其他客户端进行交互,而访问一个URL时通常有好几种访问方式。像我们用浏览器平时访问百度啊,用的其实是Get。像其他的方法还有POST、HEAD、PUT、DELETE等,详细的大家可以自行百度。

               在Flask中,路由默认设置使用GET方式进行路径访问。

         1、指定HTTP访问方式的方法。

                有小伙伴就说了,那我想改变访问的方式怎么办?

                其实很简单,我们只需要修改route()中的参数,就可以配置其他访问方式。举个栗子:

@app.route('/', methods=['GET', 'POST'])
def hello_world():return 'Hello World!'

               然后我们这次用大家都比较熟悉的神器postman来调用一下我们的接口。我们选择POST方法访问,可以看到我们成功访问了。如下图:

              

            如果不设置允许POST方法,那么flask就会返回405,如下图:

            

               那就算客户端用了不同的方式访问,我们怎么知道是哪一种呢?诶,调皮,Flask早就为我们考虑到了。我们可以通过request.method来获取客户端的请求方式。request是Flask框架的一个全局对象,可以获得很多和HTTP请求的客户端相关的信息,比如cookies、headers、data、file等等。示例代码如下:

@app.route('/', methods=['GET', 'POST'])
def hello_world():if request.method == "GET":return "GET方法"else:return 'Hello World!'

            当使用GET方法访问的时候,就会返回“GET方法”,而用POST就会返回“Hello World!

            对了,顺带说一句,设置允许请求方法的时候,名字是可以大小写混用的,你可以写成“get”或者“Get”,当然一般还是统一一下比较好。悄悄告诉你,这是因为Flask最终都会将你写的转为大写,所以不影响。可见人家早就预料到你们会搞这些花里胡哨的东西了。源码如下:

methods = set(item.upper() for item in methods)

            

        2、同一个URL映射到不同的函数

       有些小伙伴说我不想用request.method去判断,我想要花里胡哨。好,行行行,依你依你~

        我们来看一段代码:

@app.route('/hello', methods=['GET'])
def hello():return '花里胡哨的GET'@app.route('/hello', methods=['POST'])
def hi():return '花里胡哨的POST'

         再看看访问的结果:

        

        好啦。这就是你们要的花里胡哨的效果。之所以可以这样做(还不是人家早知道你们整天就喜欢搞这些花里胡哨的东西),实际上是Flask定义了2组隐式的访问方式的规则。

        二、路由地址反向生成

            通过签名花里胡哨的操作,不不不,是学习,相信你已经掌握了更多关于路由的功能。到这里,有些同学又要来搞一波操作了。既然能通过路由去访问到函数,那可不可以通过函数来知道路由地址呢?这个问题就很有水平了。答案当然是可以啦,我们一起来看看。

            这次不卖关子了,我们先从Flask包中引入url_for函数。

from flask import url_for

            接着看一则完整的例子:

from flask import Flask
from flask import url_forapp = Flask(__name__)@app.route('/')
def hello_world():# 返回hello函数所对应的URLreturn url_for("hello")@app.route('/hello')
def hello():return 'hello world!'if __name__ == '__main__':app.run()

            接着我们去访问 http://127.0.0.1:5000 。可以看到,hello函数对应的URL就显示出来了。

            

            url_for函数的第1个参数是需要获取URL的函数名,如果URL有变量,只需要在函数中添加参数然后对其赋值即可。我们再看一个例子:

            

from flask import Flask
from flask import url_forapp = Flask(__name__)@app.route('/')
def hello_world():print(url_for('hello'))  # /helloprint(url_for('hello', name="clannadhh"))  # /hello?name=clannadhhprint(url_for('hi', name="clannadhh"))  # /hi/clannadhhreturn "http://www.clannadhh.club"@app.route('/hello')
def hello():return 'hello world!'@app.route('/hi/<string:name>')
def hi(name):return 'hello %s' % nameif __name__ == '__main__':app.run()

            使用url_for函数有什么好处呢?

  •     反向解析比硬编码有更好的可读性和可维护性。比如,当需要更换路由函数中的URL的地址时,你的代码改动就会非常小。
  •     url_for函数还会自动处理特殊字符,同时也会做Unicode编码转换。像空格就会转换成“%20”,而中文同样的也会转换,因为flask是不知道中文的。

            最后教大家个花里胡哨的东西,至于效果怎样,那就等待大家试了之后留言吧。记得打赏,疯狂暗示~

@app.route('/rmb')
@app.route('/nb')
@app.route('/')
def hello_world():return "hello world!"

            现在再去访问以下3个地址,看会发生什么?

http://127.0.0.1:5000/
http://127.0.0.1:5000/nb
http://127.0.0.1:5000/rmb

          好啦,今天内容还是蛮多的。好看记得推荐给身边的朋友吧,打个赏再走呗~

          

  

相关文章:

FLASK博客系列4——再谈路由

最近好像拖更有点久了。抱歉抱歉~ 今天我们继续来聊聊路由&#xff08;其实就是我上次偷懒剩下一点没讲完&#xff09;。 通过上次的文章&#xff0c;我们基本了解了Flask中的路由&#xff0c;是不是比较简单呢&#xff1f;别急&#xff0c;今天来点猛料。 一、路由之HTTP方法绑…...

sql之left join、right join、inner join的区别

sql之left join、right join、inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 inner join(等值连接) 只返回两个表中联结字段相等的行 举例如下&#xff1…...

京东秒杀之秒杀详情

1 编写前端页面&#xff08;商品详情&#xff09; <!DOCTYPE html> <head><title>商品详情</title><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><script type"text/javascript" src&…...

mobaxterm 下载、安装、使用

下载 官网 MobaXterm free Xserver and tabbed SSH client for Windows 下载页面 MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download 点击下载 安装 双击安装 勾选协议 修改安装路径 &#xff0c;等待安装完成 使用 启动 新建连接 输入主机用户名和密…...

办公技巧:Word中插入图片、形状、文本框排版技巧

目录 一、插入图片排版技巧 二、添加形状排版技巧 三、插入“文本框”排版技巧 我们平常在制作word时候经常会遇到插入选项卡下的图片、形状和文本框这三种情况下&#xff0c;那么如何使得Word文档当中添加这三个元素的同时&#xff0c;又能保证样式美观呢&#xff0c;今天小…...

apple macbook M系列芯片安装 openJDK17

文章目录 1. 查找openjdk版本2. 安装openjdk3. 多jdk之间的切换 在这里我们使用 brew 命令查找并安装。 1. 查找openjdk版本 执行&#xff1a;brew search openjdk&#xff0c;注意&#xff1a;执行命令后&#xff0c;如果得到的结果中没有红框内容&#xff0c;则需要更新一下…...

C语言——打印出所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…...

<HarmonyOS第一课>应用程序框架 【课后考核】

【习题】应用程序框架 判断题 一个应用只能有一个UIAbility。错误(False)创建的Empty Ability模板工程&#xff0c;初始会生成一个UIAbility文件。正确(True)每调用一次router.pushUrl()方法&#xff0c;页面路由栈数量均会加1。错误(False) 单选题 API9及以上&#xff0c;r…...

自动驾驶学习笔记(十一)——高精地图

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo Beta宣讲和线下沙龙》免费报名—>传送门 文章目录 前言 高精地图 地图采集 底图制作 地图…...

HCIA-H12-811题目解析(2)

1、【单选题】 在以太网这种多点访问网络上PPPOE服务器可以通过一个以太网端口与很多PPPOE客户端建立起PPP连接&#xff0c;因此服务器必须为每个PPP会话建立唯一的会话标识符以区分不同的连接PPPOE会使用什么参数建立会话标识符? 2、【单选题】PPP协议定义的是OSI参考模型中…...

Docker-简介、基本操作

目录 Docker理解 1、Docker本质 2、Docker与虚拟机的区别 3、Docker和JVM虚拟化的区别 4、容器、镜像的理解 5、Docker架构 Docker客户端 Docker服务器 Docker镜像 Docker容器 镜像仓库 Docker基本操作 1、Docker镜像仓库 镜像仓库分类 镜像仓库命令 docker lo…...

Codeforces Round 911 (Div. 2)(C dp D gcd 分解+容斥 E tarjan+dp)

A.手玩题&#xff1a; 可以通过最后一个样例&#xff0c;如果是长度为3的连续O&#xff0c;直接在两边放就行&#xff0c;然后一直用中间的水填到其他地方 #include<bits/stdc.h> using namespace std; const int N 3e510,mod 998244353; #define int long long int n…...

给csgo游戏搬砖新手的十大建议

1、不要参与赌博性质的开箱和炼金&#xff0c;因为真的会上瘾&#xff0c;赚了还好&#xff0c;亏了你得哭。 2、实在想要玩饰品&#xff0c;直接去悠悠有品或者网易buff看价格&#xff0c;底价再砍10元&#xff0c;总会有人愿意卖的。 3、在steam上不要接受陌生人的好友申请…...

西南科技大学模拟电子技术实验一(常用电子仪器的使用及电子元器件的识别)预习报告

一、计算/设计过程 说明:本实验是验证性实验,计算预测验证结果。是设计性实验一定要从系统指标计算出元 1、用万用表电阻挡测量实验板(箱)上电位器(可调电阻)的参数范围。 0~1kΩ电阻: 1k*0%=0 1k*100%=1k 所以范围为0~1k 0~10kΩ电阻: 10k*0%=0 10k*…...

回归分析例题(多元统计分析期末复习)

例一 例二 一元线性回归 解&#xff1a; &#xff08;1&#xff09;y a ^ \hat{a} a^ b ^ \hat{b} b^x&#xff0c;求线性回归方程即求出 a ^ \hat{a} a^和 b ^ \hat{b} b^ 而 b ^ \hat{b} b^ L x y L x x { {L_{xy}} \over {L_{xx}} } Lxx​Lxy​​ 所以我们首先需要计算 L x…...

Linux多路转接select,poll

文章目录 目录 文章目录 一、五种IO模型 1.阻塞IO: 2.非阻塞IO 3.信号驱动IO 4.IO多路转接 5.异步IO 二、高级IO的一些重要概念 1.同步通信和异步通信 2.阻塞和非阻塞 三、其他高级IO 四、非阻塞IO 1.fctl函数 2.实现setNoBlock函数&#xff0c;将文件描述符设置…...

如何轻松将 4K 转换为 1080p 高清视频

由于某些原因&#xff0c;你可能有一些 4K 视频&#xff0c;与1080p、1080i、720p、720i等高清视频相比&#xff0c;4K 视频具有更高的分辨率&#xff0c;可以给您带来更多的视觉和听觉享受。但是&#xff0c;播放4k 视频是不太容易的&#xff0c;因为超高清电视没有高清电视那…...

责任链模式 (Chain of Responsibility Pattern)

定义 责任链模式是一种行为型设计模式&#xff0c;用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求&#xff0c;从而减少请求的发送者和接收者之间的耦合。在责任链模式中&#xff0c;每个接收者包含对另一个接收者的引用&#xff0c;形成一条链。如果一个对…...

企业营销管理能够实现自动化吗?怎么做?

当今企业面临着越来越多的营销难题&#xff1a;如何有效培育潜在客户、如何提高营销活动的效果、如何优化营销资源的分配......企业的营销管理怎么做&#xff1f;或许CRM系统营销自动化会起到作用。 客户细分&#xff1a; 企业可以通过CRM的客户细分功能&#xff0c;根据客户…...

【数据结构】什么是栈?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;栈的定义 &#x1f4cc;元素进栈出栈的顺序 &#x1f4cc;栈的抽象数据类型 &#x1f4cc;栈的顺序存储结构 &#x1f4cc;栈的链式存储结构 链栈的进…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

postgresql|数据库|只读用户的创建和删除(备忘)

CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

springboot整合VUE之在线教育管理系统简介

可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生&#xff0c;小白用户&#xff0c;想学习知识的 有点基础&#xff0c;想要通过项…...