前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python之flask框架(二)

python之flask框架(二)

作者头像
找Bug
发布2022-07-22 15:42:22
6390
发布2022-07-22 15:42:22
举报
文章被收录于专栏:你的Bug我做主你的Bug我做主

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

代码语言: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,你可以在上面的代码基础上添加这样一段类似的代码

代码语言:javascript
复制
@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> ,可以 选择性的加上一个转换器,为变量指定规则。请看下面的例子:

代码语言:javascript
复制
@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() 函数的作用

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 找Bug 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档