草庐IT

Flask框架——路由(Route)、环境配置

白巧克力LIN 2023-10-12 原文

在上篇文章我们成功运行了Flask框架——第一个Flask程序,这篇文章我们学习Flask框架——路由(Route)。

上篇文章运行了Flask应用程序,访问http://127.0.0.1:5000/网页后,网页显示内容是Hello World!字符,那么为什么不是显示其他字符呢?

我们从源代码和终端运行结果分析,如下图所示:


我们发现网址最后的/和源代码中的@app.route('/')路由装饰器是对应的,其访问逻辑如下图所示:

客户端访问服务器中的http://127.0.0.1:5000/,服务器接收到请求后,先去查找有没有http://127.0.0.1:5000/,有则响应调用@app.route('/')路由装饰器中的视图函数,否则返回404。所以这里就打印出了Hello World!

所以控制什么URL显示什么内容的是路由及其视图函数。

路由(Route)

在Web应用程序都通过路由技术使用URL链接来控制网页显示的内容,只要知道URL链接,即使没有主页导航也可以直接访问所需网页。

在Flask框架中使用route()路由装饰器将URL绑定到视图函数中,示例代码如下所示:

from flask import Flask

app=Flask(__name__)

@app.route('/hello')        #路由装饰器
def hello_world():          #视图函数
    return 'hello world'

if __name__ == '__main__':
    app.run()

这里的将URL链接为http://127.0.0.1:5000/hello的网页绑定在hello_world()函数中,这样,当用户访问该URL链接时,就会调动hello_world()视图函数,这个视图函数执行结果是返回hello world,所以在浏览器中显示内容为hello world。

除了使用@app.route()路由装饰器将URL链接与视图函数绑定,我们还可以使用add_url_rule()方法将URL链接与视图函数绑定,add_url_rule()方法语法结构为:

app.add_url_rule(rule='',endpoint=None,view_func=None,options='')

其中:

  • rule:函数对应的url规则,满足条件和app.route()的第一个参数一样,必须以'/'开始;

  • endpoint:站点,就是在使用url_for()进行反转的时候,这个里面传入的第一个参数就是这个endpoint对应的值。这个值也可以不指定,那么默认就会使用函数的名字作为endpoint的值;

  • view_func:对应的函数;

  • options:该路由规则的方法(get或post)。

示例代码如下所示:

from flask import Flask

app=Flask(__name__)

def hello_world():
    return "Hello World!"
app.add_url_rule('/hello',view_func=hello_world)

if __name__ == '__main__':
    app.run()

使用add_url_rule()方法与使用@app.route()路由装饰器将URL链接与函数绑定的效果一样,但我们推荐使用@app.route()路由装饰器来绑定。

路由规则

为了给URL链接增加变量,我们可以定义路由规则,把变量部分用特定的字段标记成<varable_name>,其作为关键字参数传递给规则所关联的视图函数。

示例代码如下所示:

from flask import Flask

app=Flask(__name__)

data={'a':'北京','b':'上海','c':'深圳'}
@app.route('/getcity/<city>')
def get_city(city):
    return data.get(city)
if __name__ == '__main__':
    app.run()

运行Flask程序后,我们访问http://127.0.0.1:8080/getcity/a时,网页就会显示北京。

当然我们还可以通过转换器来指定规则,转换器有:

  • string:接收字符串;

  • int:接收整数;

  • float:接收浮点数;

  • path:接收字符串路径;

  • uuid:接收uuid字符串。

示例代码如下所示:

from flask import Flask

app=Flask(__name__)
#整型
@app.route('/getnum/<int:num>')
def get_num(num):
    return str(num)
#路径
@app.route('/path/<path:p>')
def get_path(p):
    return p
#唯一标识
@app.route('/uuid/<uuid:uid>')
def get_uuid(uid):
    return str(uid)
if __name__ == '__main__':
    app.run()

运行Flask程序后,我们分别访问下面几个URL链接:

http://127.0.0.1:8080/getnum/10
http://127.0.0.1:8080/path/first/1
http://127.0.0.1:8080/uuid/dac401f1-8622-4a03-b850-6f3049d30d35

网页就会分别显示以下内容:

10
first/1
dac401f1-8622-4a03-b850-6f3049d30d35

这里需要注意的是:

  • 函数的返回类型默认是字符串类型;

  • 函数返回类型必须是字符串、dict、tuple、响应实例或WSGI可调用;

  • <varable_name>字段必须要和函数传入的参数名一致。

环境配置

运行了上面的示例代码中,是不是觉得很不方便,每次修改Flask程序的代码就要在终端停止Flask程序的运行,再启动Flask程序才能测试修改后的运行结果,而且在终端中老是有个WARNING警告。

这时我们可以通过如下代码进行环境配置:

app.config['配置参数']='参数值'

我们可以配置debug调试模式使服务器自动加载修改后的代码,示例代码如下所示:

from flask import Flask

app=Flask(__name__)
print(app.config)           #打印app配置
app.config['DEBUG']=True

@app.route('/')
def index():
    return "第一个Flask"

if __name__ == '__main__':
    app.run()

调试模式,当debug=True时,只要代码改变,服务器就会自动加载最新的代码,只要刷新网页就呈现最新的网页,适用于开发环境,默认为Flase,适用于产品环境;

为了满足我们的开发需求,只是配置debug远远不够的,运行上面的Flask程序,如下图所示:



可以发现有那么多配置,随着Flask项目的开发,需要的配置会越来越多,配置都通过app.config['配置参数']='参数值'来配置,这显然是不可取的,不可能在启动文件中编写配置的代码,而且启动文件越简单越好,那么我们可以创建一个setting.py文件来存放配置。

settings.py示例代码如下:

#配置文件
ENV='development'
DEBUG='True'

写好配置文件后,我们可以使用app.config.from_object()来加载我们的配置,示例代码如下所示:

#配置文件
ENV='development'
DEBUG='True'

运行结果如下图所示:



这样我们就成功修改了配置。

好了,有关Flask框架——路由(Route)、环境配置就讲到这里了,感谢观看!!!下篇文章我们学习Flask框架——response响应及requests请求。
公众号:白巧克力LIN

有关Flask框架——路由(Route)、环境配置的更多相关文章

  1. ruby-on-rails - Rails 3 中的多个路由文件 - 2

    Rails2.3可以选择随时使用RouteSet#add_configuration_file添加更多路由。是否可以在Rails3项目中做同样的事情? 最佳答案 在config/application.rb中:config.paths.config.routes在Rails3.2(也可能是Rails3.1)中,使用:config.paths["config/routes"] 关于ruby-on-rails-Rails3中的多个路由文件,我们在StackOverflow上找到一个类似的问题

  2. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  3. Ruby Sinatra 配置用于生产和开发 - 2

    我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm

  4. ruby-on-rails - 在 Rails 开发环境中为 .ogv 文件设置 Mime 类型 - 2

    我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain

  5. ruby - rails 3 redirect_to 将参数传递给命名路由 - 2

    我没有找到太多关于如何执行此操作的信息,尽管有很多关于如何使用像这样的redirect_to将参数传递给重定向的建议:action=>'something',:controller=>'something'在我的应用程序中,我在路由文件中有以下内容match'profile'=>'User#show'我的表演Action是这样的defshow@user=User.find(params[:user])@title=@user.first_nameend重定向发生在同一个用户Controller中,就像这样defregister@title="Registration"@user=Use

  6. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  7. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  8. 神州数码无线产品(AC+AP)配置 - 2

    注意:本文主要掌握DCN自研无线产品的基本配置方法和注意事项,能够进行一般的项目实施、调试与运维AP基本配置命令AP登录用户名和密码均为:adminAP默认IP地址为:192.168.1.10AP默认情况下DHCP开启AP静态地址配置:setmanagementstatic-ip192.168.10.1AP开启/关闭DHCP功能:setmanagementdhcp-statusup/downAP设置默认网关:setstatic-ip-routegeteway192.168.10.254查看AP基本信息:getsystemgetmanagementgetmanaged-apgetrouteAP配

  9. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  10. hadoop安装之保姆级教程(二)之YARN的配置 - 2

    1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模

随机推荐