Flask学习之旅——1.3 URL与视图(二)
前言
- 由于本小节内容较多,故分成几篇文章来记录。
- 本文为《知了传课——URL与视图》的学习笔记。
- 原文地址:第三节:URL与视图 - Python框架Flask基础教程 - 知了传课
- 上一篇:Flask学习之旅——1.3 URL与视图(一)
- 下一篇:Flask学习之旅——1.3 URL与视图(三)
构造URL(url_for函数)
目的:通过函数名去获得对应的URL
,避免因修改了一处URL
而导致大面积修改的情况发生。
url_for()语法:
url_for()
函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL
的后面作为查询参数。- url_for( “ 视图函数名 ” , 查询参数··· )
使用原因:
- 当修改了
URL
,但没有修改该URL
对应的函数名时,url_for()
函数会帮我们自动替换新的URL
url_for()
函数会转义一些特殊字符和unicode
字符串,这些事情url_for
会自动的帮我们搞定。
示例
from flask import Flask,url_for ###使用url_for()函数前需要先引入url_for库
app = Flask(__name__)
@app.route('/article/<id>/')
def article(id):
return '%s article detail' % id
@app.route('/')
def index(request):
print(url_for("article",id=1)) ###url_for()函数的使用
return "首页"
运行结果:在访问index的时候,会打印出/article/1/
。
指定URL末尾的斜杠
URL
的末尾有斜杠和没有斜杠是不同的URL
- 当访问一个结尾不带斜线的
URL
:/article
,会被重定向到带斜线的URL
:/article/
上去。 - 但访问一个结尾带斜线的
URL
:/article/
,不会被重定向到不带斜线的URL
:/article
上去,页面会返回404信息。
指定HTTP方法(关键字methods
)
- 通过关键字参数
methods
指定用户访问HTTP
时使用GET
或者POST
方法 - 在
@app.route()
中可以传入一个关键字参数methods
来指定本方法支持的HTTP
方法 - 默认情况下,只能使用
GET
请求
例子:
@app.route('/login/',methods=['GET','POST'])
def login():
return 'login'
让login
的URL
既能支持GET
又能支持POST
。
GET请求和POST请求分别在什么时候使用?
- 如果只是需要从服务器上获取数据,一般都是用
GET
请求。 - 如果前端需要把数据发送给服务器,一般用
POST
请求
补充:比较 GET 与 POST
GET | POST | |
---|---|---|
后退按钮/刷新 | 无害 | 数据会被重新提交(浏览器应该告知用户数据会被重新提交)。 |
书签 | 可收藏为书签 | 不可收藏为书签 |
编码类型 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。 |
历史 | 参数保留在浏览器历史中。 | 参数不会保存在浏览器历史中。 |
对数据长度的限制 | 当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。 | 无限制。 |
对数据类型的限制 | 只允许 ASCII 字符。 | 没有限制。也允许二进制数据。 |
安全性 | 与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。在发送密码或其他敏感信息时绝不要使用 GET ! | POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。 |
可见性 | 数据在 URL 中对所有人都是可见的。 | 数据不会显示在 URL 中。 |