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

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

          

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/177144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之STL库:string类(用法列举和总结)

前言 大家在学习STL库的时候一定要学会看英文文档&#xff0c;俗话说熟能生巧&#xff0c;所以还得多练&#xff01; 在使用string类之前&#xff0c;要包含头文件#include <string>和using namespace std; 文档链接&#xff1a;string - C Reference 一、string——构造…

Springboot日志-logback

logback-spring.xml的配置项 共有一个父标签、两种属性、三个节点: 一个父标签&#xff1a;configuration 两种属性&#xff1a;contextName和property 三个节点&#xff1a;appender、root、logger 日志级别 日志级别从低到高分为TRACE < DEBUG < INFO < WARN &…

filebeat日志收集工具

elk:filebeat日志收集工具和logstash相同 filebeat是一个轻量级的日志收集工具&#xff0c;所使用的系统资源比logstash部署和启动时使用的资源要小得多 filebeat可以运行在非Java环境&#xff0c;它可以代理logstash在非Java环境上收集日志 filebeat无法实现数据的过滤&…

Programming Abstractions in C阅读笔记:p197-p201

《Programming Abstractions in C》学习第64天&#xff0c;p196-p201总结。 一、技术总结 很难&#xff0c;唯有继续往下看才能让其变容易。 二、英语总结 1.psychologically是什么意思&#xff1f; 答&#xff1a; (1))psychology > psychological > psychologica…

名词解释之EID和SR

大家在聊辅助驾驶时&#xff0c;经常会发现有名词叫SR&#xff0c;或者EID&#xff0c;理想的环境感知界面叫EID&#xff0c;而其他很多车型里大家管那个界面叫SR。我们下面具体看下这两个词具体指什么。 SR是“Situational Awareness”的缩写,意思是环境感知或场景认知。 SR系…

【JMeter】配置元件

1. 元件的分类 HTTP Request Default 作用&#xff1a; 可以配置成通用的信息&#xff0c;可复用 ​​​​​​​ JDBC Connection Configuration 作用&#xff1a;连接数据库 前提&#xff1a; 下载好对应数据类型的jar包 ​​​​​​​ HTTP Header Manager信息头管理…

微信小程序推送服务号消息(一)【Go+微信小程序+微信服务号+微信开放平台】

一、需求场景 业务需要给微信小程序用户在某些场景推送微信服务号消息&#xff0c;例如&#xff1a;订单即将超时&#xff0c;电子合同签约超时等&#xff1b; 二、开发准备 1、开通微信服务号 入口&#xff1a;微信公众平台 1.1 在服务号中获取推送消息所需的配置信息&#…

免费部署开源大模型 ChatGLM-6B

参考&#xff1a;【大模型-第一篇】在阿里云上部署ChatGLM3-CSDN博客 ChatGLM 是一个开源的、支持中英双语的对话语言模型&#xff0c;由智谱 AI 和清华大学 KEG 实验室联合发布&#xff0c;基于 General Language Model (GLM) 架构&#xff0c;具有 62 亿参数。ChatGLM3-6B 更…

基于JavaWeb+SSM+Vue校园综合服务小程序系统的设计和实现

基于JavaWebSSMVue校园综合服务小程序系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 摘 要 I Abstract II 第一章 绪 论 1 1.1选题背景 2 1.2研究现状 3 1.3研究内容 …

易基因: MeRIP-seq等从m6A RNA甲基化角度揭示NFATc1对破骨细胞的调控机制|研究速递

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 双膦酸盐类药物是强效骨吸收抑制剂&#xff0c;是治疗骨质疏松症、多发性骨髓瘤、骨转移等疾病的首选药物。这些药物通过抑制甲羟戊酸通路和促进破骨细胞凋亡来促进骨吸收。双膦酸盐类药…

使用jenkins和tomcat创建并部署maven项目

准备三台服务器&#xff1a; 192.168.58.139 部署tomcat 详细参照&#xff1a;http://t.csdnimg.cn/Yp2z2 192.168.58.140 部署gitlab 详细参照&#xff1a;http://t.csdnimg.cn/Sb1uz 192.168.58.153 部署Jenkins 详细参照…

P8A005-A008系统加固

系统账户数据库安全 预备知识】 数据库研究跨越于计算机应用、系统软件和理论三个领域&#xff0c;其中应用促进新系统的研制开发&#xff0c;新系统带来新的理论研究&#xff0c;而理论研究又对前两个领域起着指导作用。 【实验步骤】 网络拓扑&#xff1a;server2008-bas…

【Unity基础】8.简单场景的搭建

【Unity基础】8.简单场景的搭建 大家好&#xff0c;我是Lampard~~ 欢迎来到Unity基础系列博客&#xff0c;所学知识来自B站阿发老师~感谢 &#xff08;一&#xff09;场景资源 &#xff08;1&#xff09;Import资源包 今天我们将手动去搭一个简单的场景&#xff0c;当…

IP-Adapter:文本兼容图像提示适配器,用于文本到图像扩散模型

IP-Adapter这是一种有效且轻量级的适配器&#xff0c;用于实现预训练文本到图像扩散模型的图像提示功能。只有 22M 参数的 IP 适配器可以实现与微调图像提示模型相当甚至更好的性能。IP-Adapter 不仅可以推广到从同一基本模型微调的其他自定义模型&#xff0c;还可以推广到使用…

机器学习(1)机器学习类型和机器学习的主要概念

0.前提 深度学习&#xff08;Deep Learing&#xff09;是机器学习&#xff08;Machine Learning&#xff09;领域中的一个新的研究方向&#xff0c;在如今的时代研究深度学习的大模型是十分热门的。我不知道有多少人有关注到最近openai的事件啊&#xff0c;说个比较让我惊讶的…

03、K-means聚类实现步骤与基于K-means聚类的图像压缩(1)

03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;1&#xff09; 03、K-means聚类实现步骤与基于K-means聚类的图像压缩&#xff08;2&#xff09; 开始学习机器学习啦&#xf…

解决:ModuleNotFoundError: No module named ‘PyQt5‘

解决&#xff1a;ModuleNotFoundError: No module named ‘PyQt5’ 文章目录 解决&#xff1a;ModuleNotFoundError: No module named PyQt5背景报错问题报错翻译报错位置代码报错原因解决方法安装PyQt5在PyCharm中配置PyQt5对于新项目对于已有项目 今天的分享就到此结束了 背景…

【序列推荐】MAN:跨领域顺序推荐的混合注意网络

#论文题目&#xff1a;MAN&#xff1a;Mixed Attention Network for Cross-domain Sequential Recommendation&#xff08;跨领域顺序推荐的混合注意网络&#xff09; #论文地址&#xff1a;https://dl.acm.org/doi/10.1145/3543507.3583278 #论文源码开源地址&#xff1a;http…

Docker可视化工具Portainer(轻量)或者Docker容器监控之 CAdvisor+InfluxDB+Granfana(重量)

Docker轻量级可视化工具Portainer 是什么 Portainer 是一款轻量级的应用&#xff0c;它提供了图形化界面&#xff0c;用于方便地管理Docker环境&#xff0c;包括单机环境和集群环境。 安装 官网 https://www.portainer.io/ https://docs.portainer.io/v/ce-2.9/start/instal…

CANdelaStudio 中 Bese Variant 和 Variant区别

关于 Bese Variant &#xff0c;其在 CDDT 和 CDD 文件中都存在&#xff0c;有且只有一个 主要包含三部分&#xff0c;重点只关注 DIDs 和 Supported Diagnostic Classes 而在 CDD 文件中&#xff0c;除了 Bese Variant 外&#xff0c;还有一个 Variant “Variant” 这个概…