Fork me on GitHub

Flask学习笔记(九)-构造URL(url_for)和重定向

一、构造URL(url_for)

一般我们通过一个URL就可以执行到某一个函数。如果反过来,我们知道一个函数,怎么去获得这个URL呢?url_for函数就可以帮我们实现这个功能。url_for()函数接收两个及以上的参数,他接收函数名作为第一个参数,接收对应URL规则的命名参数,如果还出现其他的参数,则会添加到URL的后面作为查询参数。

通过构建URL的方式而选择直接在代码中拼URL的原因有两点:

  1. 将来如果修改了URL,但没有修改该URL对应的函数名,就不用到处去替换URL了。
  2. url_for()函数会转义特殊字符和Unicode数据,这些工作都不需要我们自己处理。
from flask import Flask,url_for
# 已知路由访问函数
# 实例化app
app = Flask(__name__)

@app.route('/')
def hello_world():
    print(url_for('article_list',aid=1,page=1,name=1))
    # 添加参数用&连接
    return 'hello world'

# url_for   通过一个页面跳转到另一个页面   通过url_for 获取网页的url
@app.route('/article/<aid>')
def article_list(aid):
    print(url_for('hello_world',next='/'))
    return 'articleList {}'.format(aid)

if __name__ == '__main__':
    app.run(debug=True)

运行结果:

 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
/article/1?page=1&name=1
127.0.0.1 - - [06/Oct/2022 18:24:01] "GET / HTTP/1.1" 200 -
/?next=%2F
127.0.0.1 - - [06/Oct/2022 18:24:26] "GET /article/1 HTTP/1.1" 200 -

二、访问重定向

重定向分为永久性重定向和暂时性重定向,在页面上体现的操作就是浏览器会从一个页面自动跳转到另外一个页面。比如用户访问了一个需要权限的页面,但是该用户当前并没有登录,因此我们应该给他重定向到登录页面。

示例:

from flask import Flask ,url_for ,redirect,request
app = Flask(__name__)
@app.route('/login/',methods=['GET','POST'])
def login():
    return 'login page'

@app.route('/profile/',methods=['GET','POST'])
def profile():
    name = request.values.get('name')
    if not name:
        # 如果没有name,说明没有登录,重定向到登录页面
        return redirect(url_for('login'))
    else:
        return name

if __name__ == '__main__':
    app.run(debug=True)

访问http://127.0.0.1:5000/profile/

运行结果:

 访问url重定向到了/login/     

posted @ 2022-10-06 18:35  橘子偏爱橙子  阅读(107)  评论(0编辑  收藏  举报