二、URL反转,页面跳转和重定向
1、内容回顾
上篇文章简单说明了一下如何创建一个flask web应用程序,输出了一个hello world,这篇文章就和大家一起学习下flask框架中的url反转,页面跳转,以及重定向。
2、URL反转
url反转就是通过视图名称获得url。所用的函数是url_for()。那url反转有什么用呢?一般url反转是和重定向一块使用的,比如我们的网站主页为www.a.com,用户个人资料页是 www.a.com/zhangsan/detail,如果用户没有登录直接输入 www.a.com/zhangsan/detail,能看到东西吗?应该是不能的,因为用户还没登录,所以应该是直接跳转到登录页面,这里面就用到了url反转和重定向,重定向下面会讲到。下面咱们看看如何反转。
@app.route('/')
def index():
print(url_for('my_list'))
print(url_for('article',id='aaaa'))
return 'Hello World!'
这里面就是在运行index视图函数的时候,在pycharm控制台打印出/my_list,以及/article/aaaa,如图。
image.png
同时url_for()还可以用来加载文件,用VS2017,创建一个flask应用程序后可以发现在layout.html中写的有url_for()
,如图。
image.png
3、页面跳转
在地址栏输入不同的地址后,可以跳转到对应的页面。在这里我们先不添加页面,直接返回不同的字符串看看效果。代码如下
@app.route('/list/')
def my_list():
return 'list'
@app.route('/article/<id>/')
def article(id):
return u'请求的参数为:%s'% id
然后我们运行下,在浏览器地址栏接着输入 /list 会出现这个效果。
image.png
然后在浏览器输入/article/2,也出来了对应的字符串。这就是简单的页面跳转。
image.png
4、重定向
重定向使用的方法为redirect()。来看一段代码。
@app.route('/')
def index():
return redirect('www.baidu.com')
这段代码运行的结果就是,页面打开直接跳转到了百度主页,这个就是重定向。说白了就是重新定义浏览器的地址。在看一段代码。
@app.route('/')
def index():
login_url = url_for('login')
return redirect(login_url)
return u'这是首页'
这里就是先获取login视图函数所对应的url地址,然后重定向到这个地址。现在咱们回到上面的一个问题,如果用户还没有登录直接输入了www.a.com/zhangsan/detail,咱们该怎么做?请看代码。
@app.route('/question/<is_login>/')
def question(is_login):
if is_login == '1':
return u'发布问答页面'
else:
return redirect(url_for('login'))
运行试一下效果。现在我是刚输入了地址,还没按回车确定。
image.png
当我按下回车的时候,页面直接跳转到了登录页面
image.png
咱们在试一次,这个输入/question/1.
image.png
这次咱们看的输入/question/1就代表咱们是登录过了,就可以进行登录后的操作了,如果没有登录,则直接跳转到登录页面。
5、结语
好了,今天的代码就分享这么多。下篇文章教大家如何使用jinja2模板,以及如何向页面传递参数。
Study hard and make progress every day.
更多学习资料请关注"爱游戏爱编程"。
爱游戏爱编程.jpg