python之flask框架(二)

咱们上篇文章呢已经给大家示范了一个很简单的例子,大家可能看的很懵,不知道其中的原理。或许照猫画虎能下来,但具体怎么运行还不是很清楚,那这篇文正给大家 解释一下其中的原理帮助大家理解一下,也增添一些新的内容。先看看上次咱们写的代码


from flask import Flask

# 实例化Flask,参数是本文件
app = Flask(__name__)


# 装饰器,像一顶装饰的帽子,指引调用函数,具体过程可以看源函数
@app.route("/")
def hello():
    return "hello world"


if __name__ == '__main__':
    # 运行服务器
    app.run(debug=True)

具体解释说明如下:

1、首先我们导入了 Flask 类。 该类的实例将会成为我们的 WSGI 应用。具体关于WSGI的介绍大家可以看一下这个网址:https://baike.baidu.com/item/wsgi/3381529?fr=aladdin

2、接着我们创建一个该类的实例。第一个参数是应用模块或者包的名称。如果你使用 一个单一模块(就像本例),那么应当使用 __name__ ,因为名称会根据这个 模块是按应用方式使用还是作为一个模块导入而发生变化(可能是 ‘__main__’ , 也可能是实际导入的名称)。这个参数是必需的,这样 Flask 才能知道在哪里可以 找到模板和静态文件等东西。

3、然后我们使用 route() 装饰器来告诉 Flask 触发函数的 URL 。

4、函数名称被用于生成相关联的 URL 。函数最后返回需要在用户浏览器中显示的信息。

那么具体让我们看到网页上显示的内容是路由函数,这里详细说明一下路由

现代 web 应用都使用有意义的 URL ,这样有助于用户记忆,网页会更得到用户的青睐, 提高回头率。

使用 route() 装饰器来把函数绑定到 URL,你可以在上面的代码基础上添加这样一段类似的代码

@app.route('/hello')
def welcome():
    return 'welcome! thank you!'

然后运行,在浏览器输入:http://127.0.0.1:5000/hello,你会发现发现出现了以下内容。相信大家对URL和路由已经基本清楚了吧,

当然这些都是一些静态的URL部分,对于一些动态变化的URL怎么操作呢,接下来介绍一种变量规则:通过把 URL 的一部分标记为 <variable_name> 就可以在 URL 中添加变量。标记的 部分会作为关键字参数传递给函数。通过使用 <converter:variable_name> ,可以 选择性的加上一个转换器,为变量指定规则。请看下面的例子:

@app.route('/user/<username>')
def show_user_profile(username):

    return 'User %s' % escape(username)

@app.route('/post/<int:post_id>')
def show_post(post_id):
    return 'Post %d' % post_id

@app.route('/path/<path:subpath>')
def show_subpath(subpath):
    return 'Subpath %s' % escape(subpath)

转换器类型:

string(缺省值) 接受任何不包含斜杠的文本
int接受正整数
float接受正浮点数
path类似 string ,但可以包含斜杠
uuid接受 UUID 字符串

将上面的例子添加到咱们写的代码中,然后在顶部加入导入一下

from html import escape

然后运行,在浏览器中输入:http://127.0.0.1:5000/user/xiaoli,会出现以下内容

在浏览器中输入:http://127.0.0.1:5000/post/1,会出现以下内容

那么如果输入:http://127.0.0.1:5000/post/xiaoli会怎么样呢,可以试一下,会出现not found,这是因为接受的类型为int类型,所以其他类型不能访问

接下来在浏览器中输入:http://127.0.0.1:5000/path/a/a,将会看到以下内容,path后面可以加带斜杠的内容

接下来说一下一条规则:唯一的 URL / 重定向行为,先看下面的代码

@app.route('/zhou/')
def projects():
    return 'Mr zhou'

@app.route('/hong')
def about():
    return 'Mr hong'

zhou的 URL 是中规中矩的,尾部有一个斜杠,看起来就如同一个文件夹。 访问一个没有斜杠结尾的 URL 时 Flask 会自动进行重定向,帮你在尾部加上一个斜杠。

hong 的 URL 没有尾部斜杠,因此其行为表现与一个文件类似。如果访问这个 URL 时添加了尾部斜杠就会得到一个 404 错误。这样可以保持 URL 唯一,并帮助 搜索引擎避免重复索引同一页面。

接下来说一下URL的构建,使用url_for() 函数,url_for()函数接受函数的名称作为第一个参数,以及一个或多个关键字参数,每个参数对应于URL的变量部分。下面举个例子,首先导入一下url_for和redirect

from flask import Flask, redirect, url_for

然后在之前的基础上增加如下代码,然后启动

@app.route('/xiao')
def hello_xiao():
    return 'Hello xiao'


@app.route('/li/<li>')
def hello_li(li):
    return 'Hello %s as li' % li


@app.route('/cus/<name>')
def hello_user(name):
    if name == 'xiao':
        return redirect(url_for('hello_xiao'))
    else:
        return redirect(url_for('hello_li', li=name))

启动完之后,在浏览器上面输入以下两URL看一下效果

先输入一下:http://127.0.0.1:5000/cus/xiao

再输入一下:http://127.0.0.1:5000/cus/xia

同时咱们也会发现地址栏中URL进行了重定向,这个就是url_for() 函数的作用

好了,本篇文章就到这里了,更多内容等待下一篇的更新