咱们上篇文章呢已经给大家示范了一个很简单的例子,大家可能看的很懵,不知道其中的原理。或许照猫画虎能下来,但具体怎么运行还不是很清楚,那这篇文正给大家 解释一下其中的原理帮助大家理解一下,也增添一些新的内容。先看看上次咱们写的代码
代码语言:javascript复制
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 字符串 |
将上面的例子添加到咱们写的代码中,然后在顶部加入导入一下
代码语言:javascript复制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 / 重定向行为,先看下面的代码
代码语言:javascript复制@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
代码语言:javascript复制from flask import Flask, redirect, url_for
然后在之前的基础上增加如下代码,然后启动
代码语言:javascript复制@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() 函数的作用
好了,本篇文章就到这里了,更多内容等待下一篇的更新