python web开发-flask中url带斜线/和不带斜线/的区别详解

flask中带斜线和不带斜线的url

通过flask进行路由配置的时候,有一个细节,就是同样的url,带上”/”和不带”/”有什么区别。

举例说明:

比如有个url,名字为”/url”

先同时定义两种url,一种带”/”,一种不带”/”,如下代码:

@app.route("/url")
def urlWithOut():
return "url with out /"


@app.route("/url/")
def urlWith():
return "url with /"

访问/url,效果如下:

访问/url/效果如下:

然后把/url这个定义注释掉,再次访问/url,发现会跳转到/url/这个地址上

如果把/url/这个定义注释掉,保留/url这个定义,再次访问/url/,发现报404错误

结论,当带斜线和不还斜线的url同时存在时,两个url相互独立可以各自处理各自的逻辑。

当带斜线的url存在,不带斜线的url不存在时,带斜线的url和不带斜线的url可以同时访问不过返回的结果是同样的。

当带斜线的url不存在,不带斜线的url存在时,带斜线的url返回404,不带斜线的url可正常访问。

原文地址:http://blog.51cto.com/12482328/2088474

时间: 2024-10-11 04:44:29

python web开发-flask中url带斜线/和不带斜线/的区别详解的相关文章

python web开发-flask中日志的使用

Flask使用日志记录的方式: 1. 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用logger方法 app.logger.info("my first logging") 这里记录的是info级别的日志 3. 查看结果 运行结果如下: INFO in Code [D:/xxxxx/flask/Code.py:20]: my first logging 默认情况下,f

python web开发-flask中访问请求数据request

Request对象在web应用的开发中是一个非常重要的对象,主要用来获取用户发来的请求数据. 常用属性参考:http://docs.jinkan.org/docs/flask/api.html#flask.request 下面我们以一个表单提交的例子来说明一些常用request属性的使用. 1. 创建一个表单的template 在templates文件夹下面创建form.html模板文件,输入下面的代码 {% extends "base.html" %} {% import "

python web开发-flask中读取txt文件内容

某些情况下,需要读取flask网站要目录下的txt文件.但是直接在flask网站的目录下创建一个文件是无法访问的.从网站找了一些资料,最终发现通过写一个方法返回txt内容比较简单方便,不过此方法适用于简单的文件读取以及读取量比较小的时候.详细代码如下: @app.route('/<path>')def today(path):base_dir = os.path.dirname(__file__)resp = make_response(open(os.path.join(base_dir,

python web开发-flask中sqlalchemy的使用

SqlAlchemy是一个python的ORM框架. 在flask中有一个flask-sqlalchemy的扩展,使用起来很方便. 1.       创建一个sqlalchemy的Model模块 创建一个models.py的模块 创建model的时候,首先引入flask-sqlalchemy的扩展 from flask import Flask from flask_sqlalchemy import SQLAlchemy 然后初始化app和sqlalchemy app = Flask(__na

python web开发-flask中消息闪现flash的应用

Flash中的消息闪现,在官方的解释是用来给用户做出反馈.不过实际上这个功能只是一个记录消息的方法,在某一个请求中记录消息,在下一个请求中获取消息,然后做相应的处理,也就是说flask只存在于两个相邻的请求中"闪现",第三次请求就不存在这个flash了. 下面我们用一个例子来说明一个是如何"闪"的. 首先引入flash和get_flashed_message方法 from flask import Flask,url_for,render_template,requ

关于web开发工程中URL参数的编码问题

近日在项目中,在velocity开发的页面模板中的使用a标签创建链接,并且带有需要提交的参数(这里没有使用form的原因是因为该模板生成的email,发送给客户,由于客户的email客户端可能是https,而模板上面的链接并不是跳转到https的站点,使用form将导致浏览器这种混合的链接).当通过该模板生成的页面上进行跳转时,发现链接提交的参数发生了变化,具体表现是参数提交时是一串包含10位任意可输出字符的字符串,字符串里有“+”字符,提交后后台后“+”字符不见了,取而代之是一个空格.通过fi

python web开发-flask连接sqlite数据库

在之前的文章中我们介绍了如何在centOS中安装sqlite数据库. Sqlite安装完成后,本节就用flask来连接和操作sqlite数据库. 1.       数据准备 先在sqlite3中创建一个数据库mydb,执行sqlite3 mydb 然后执行.databases命令,查看我们创建的数据库 可以看到我们把数据库文件放到了/www/db/mydb文件夹下面 然后我们创建一个user表 使用insert语句 ,写入一条数据到user表中 2.       在code.py中添加获取用户列

jq中append()、prepend()、after()、before()的区别详解

1.append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标签之前添加东西) 2.prepend() - 在被选元素的开头插入内容(内容的开始,比如说有个a标签,则是在<a>这个标签之后添加东西) 3.after() - 在被选元素之后插入内容(元素的结尾,比如说有个a标签,则是在</a>这个标签之后添加东西) 4.before() - 在被选元素之前插入内容(内容的开始,比如说有个a标签,则是在<a>这个标签之前添

jquery中append()、prepend()、after()、before()的区别详解

append() - 在被选元素的结尾插入内容(内容的结尾,比如说有个a标签,则是在</a>这个标签之前添加东西) prepend() - 在被选元素的开头插入内容(内容的开始,比如说有个a标签,则是在<a>这个标签之后添加东西) after() - 在被选元素之后插入内容(元素的结尾,比如说有个a标签,则是在</a>这个标签之后添加东西) before() - 在被选元素之前插入内容(内容的开始,比如说有个a标签,则是在<a>这个标签之前添加东西)