Flask学习笔记(二)

Flask学习笔记(二)

前言

前面我们学习了flask的安装和用一个小程序测试flask是否安装成功,并且提及到jinja2模板。

jinja2模板使用

为了使用jinja2模板,我们需要在当前网站目录下建立一个templates的目录,将在templates文件夹中创建一个名为index.html的文件,其中的内容如下:


   
       
       jinja2模板
   
   
      {% if name %}
       

你好, { { name }}!

    {% else %}      

你好!小红!

    {% endif %}  

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,即会显示如下界面:

Flask学习笔记(二)_第1张图片

路由中的参数

为了动态变化预定义模板中的人员姓名,我们需要向路由中传递一个参数,形式如下:http://127.0.0.1:8090/hello/小绿,下面代码演示了这个功能如何实现:

@app.route("/hello//")
def hello(name):
    return render_template('index.html', name=name)

观察代码会发现其中加入了字样,这意味着在路由中添加了一个名为name的变量,相应地,由该路由修饰的函数需要接收name来进行处理,这时在浏览器地址栏输入http://127.0.0.1:8090/hello/小绿,则显示的图形如下所示:

Flask学习笔记(二)_第2张图片

这里有一个问题,就是当我们在路由上不输入参数的时候会是怎么样的呢?即直接输入http://127.0.0.1:8090/hello,根据上面我们的index.html,当没有接受到name变量时,应该输出你好!小红!,但是实际情况如下:

Flask学习笔记(二)_第3张图片

可以看到,明显报错了,从显示的出错信息可以看出,提示我们输入的url地址有问题,仔细分析后会发现,带参数的地址和不带参数的地址被Flask解释为不同的地址,这就需要用不同的路由都指向hello()函数,修改后的代码如下:

@app.route("/hello/")
@app.route("/hello//")
def hello(name=''):
    return render_template('index.html', name=name)

添加一个路由后,Flask就会正确解析空参数的地址了,但还有一个要注意的地方是需要在映射的函数hello()中给name赋予一个空字符串做为默认参数,这样在匹配/hello/时,会将默认参数值传入index.html模板中,这样就实现了我们的意图,显示如下:

Flask学习笔记(二)_第4张图片

路由中参数的类型

Flask中,路由中变量默认是字符串类型,其实除了字符串类型外,其实还有int,float,path

下面是有关代码:

@app.route("/num1/")
def num1(number1):
    return f"接收的整数数字是:{number1}"
​
@app.route("/num2/")
def num2(number2):
    return f"接收的浮点数字是:{number2}"
​
@app.route("/mypath/")
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},
当前URL:{request.url},
当前路径:{request.path}" ​

Flask学习笔记(二)_第5张图片

小结

本文对jinja2模板使用和Flask的路由进行了较详细的分析,如何利用路由进行整个系统的规划,是很重要的问题。

Flask学习笔记(一)

Flask学习笔记(三)

Flask学习笔记(四): Flask与数据库连接

 

你可能感兴趣的:(python,python,flask)