Flask学习笔记(二)
前言
前面我们学习了flask的安装和用一个小程序测试flask是否安装成功,并且提及到jinja2
模板。
jinja2
模板使用
为了使用jinja2
模板,我们需要在当前网站目录下建立一个templates
的目录,将在templates
文件夹中创建一个名为index.html
的文件,其中的内容如下:
<html>
<head>
<meta charset="utf-8" />
<title>jinja2模板</title>
</head>
<body>
{% if name %}
<h1>你好, {{ name }}! </h1>
{% else %}
<h2>你好!小红!</h2>
{% endif %}
</body>
</html>
jinja2
模板扩充了HTML
的语法,其中加入了逻辑判断和变量,变量是用双嵌套花括号{{}}
来引用的,而逻辑控制则用{%%}
来标识。这样可以动态控制HTML
显示的内容,比如上述代码中,如果name
变量有给出小明
,则页面显示你好,小明
,否则只显示你好!小红!
。
创建一个新的路由:
from flask import render_template
@app.route("/hello")
def hello():
return render_template('index.html', name="小明")
运行项目后访问http://127.0.0.1:8090/hello
,即会显示如下界面:
路由中的参数
为了动态变化预定义模板中的人员姓名,我们需要向路由中传递一个参数,形式如下:http://127.0.0.1:8090/hello/小绿
,下面代码演示了这个功能如何实现:
@app.route("/hello/<name>/")
def hello(name):
return render_template('index.html', name=name)
观察代码会发现其中加入了<name>
字样,这意味着在路由中添加了一个名为name
的变量,相应地,由该路由修饰的函数需要接收name
来进行处理,这时在浏览器地址栏输入http://127.0.0.1:8090/hello/小绿
,则显示的图形如下所示:
这里有一个问题,就是当我们在路由上不输入参数的时候会是怎么样的呢?即直接输入http://127.0.0.1:8090/hello
,根据上面我们的index.html
,当没有接受到name
变量时,应该输出你好!小红!
,但是实际情况如下:
可以看到,明显报错了,从显示的出错信息可以看出,提示我们输入的url
地址有问题,仔细分析后会发现,带参数的地址和不带参数的地址被Flask
解释为不同的地址,这就需要用不同的路由都指向hello()
函数,修改后的代码如下:
@app.route("/hello/")
@app.route("/hello/<name>/")
def hello(name=''):
return render_template('index.html', name=name)
添加一个路由后,Flask
就会正确解析空参数的地址了,但还有一个要注意的地方是需要在映射的函数hello()
中给name
赋予一个空字符串做为默认参数,这样在匹配/hello/
时,会将默认参数值传入index.html
模板中,这样就实现了我们的意图,显示如下:
路由中参数的类型
在Flask
中,路由中变量默认是字符串类型,其实除了字符串类型外,其实还有int,float,path
下面是有关代码:
@app.route("/num1/<int:number1>")
def num1(number1):
return f"接收的整数数字是:{number1}"
@app.route("/num2/<float:number2>")
def num2(number2):
return f"接收的浮点数字是:{number2}"
@app.route("/mypath/<path:curpath>")
def mypath(curpath):
return f"接收的路径是:{curpath}"
当为路由指定转换器后,凡不符合转换器指定内容的,页面将弹出404
错误。
打印当前IP地址及URL
有时候我们会需要得到IP地址及URL,此时用到Flask
中的request
对象,演示如下:
from flask import request
@app.route("/getpath/")
def getpath():
return f"当前IP地址:{request.remote_addr},<br/> 当前URL:{request.url},<br/>当前路径:{request.path}"
小结
本文对jinja2
模板使用和Flask
的路由进行了较详细的分析,如何利用路由进行整个系统的规划,是很重要的问题。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/61490.html