2个flask服务器通信_Flask程序的运作方式和基本概念

5af55933411d4a3942c6064ae45a7a5e.png

Flask程序的运作方式和基本概念

在一个Web应用里,客户端和服务器上的Flask程序的交互可以简单概括为以下几步:

1)用户在浏览器输入URL访问某个资源。

2)Flask接收用户请求并分析请求的URL。

3)为这个URL找到对应的处理函数。

4)执行函数并生成响应,返回给浏览器。

5)浏览器接收并解析响应,将信息显示在页面中。

为函数附加app.route()装饰器,并传入URL规则作为参数,我们就可以让URL与函数建立关联。这个过程我们称为注册路由(route),路由负责管理URL和函数之间的映射,而这个函数则被称为视图函数(view function)。

route()装饰器的第一个参数是URL规则,用字符串表示,必须以斜杠(/)开始。这里的URL是相对URL(又称为内部URL),即不包含域名的URL。以域名http://www.helloflask.com为例,“/”对应的是根地址(即http://www.helloflask.com),如果把URL规则改为“/hello”,则实际的绝对地址(外部地址)是http://www.helloflask.com/hello。

URL(Uniform Resource Lacator,统一资源定位符)是使用浏览器访问网页时输入的网址,比如http://helloflask.com/。简单来说,URL就是指向网络中某个资源的地址。

1.为视图绑定多个URL

一个视图函数可以绑定多个URL,比如下面的代码把/hi和/hello都绑定到say_hello()函数上,这就会为say_hello视图注册两个路由,用户访问这两个URL均会触发say_hello()函数,获得相同的响应。

2.动态URL

不仅可以为视图函数绑定多个URL,还可以在URL规则中添加变量部分,使用“<变量名>”的形式表示。Flask处理请求时会把变量传入视图函数,所以我们可以添加参数获取这个变量值。代码清单1-3中的视图函数greet(),它的URL规则包含一个name变量。

因为URL中可以包含变量,所以将传入app.route()的字符串称为URL规则,而不是URL。Flask会解析请求并把请求的URL与视图函数的URL规则进行匹配。比如,这个greet视图的URL规则为/greet/<name>,那么类似/greet/foo、/greet/bar的请求都会触发这个视图函数。

使用defaults参数设置URL变量的默认值

在app.route()装饰器里使用defaults参数设置URL变量的默认值,这个参数接收字典作为输入,存储URL变量和默认值的映射。

Pycharm专业版中创建Flask项目。File - New Project,选择Flask,Create

程序分享:使用ngrok(https://ngrok.com/)、Localtunnel(https://localtunnel.github.io/www/)等内网穿透/端口转发工具。

3.启动开发服务器

1.使服务器外部可见

在run命令后添加--host选项将主机地址设为0.0.0.0使其对外可见

2.改变默认端口

Flask提供的Web服务器默认监听5000端口,在启动时传入参数来改变它。

执行flask run命令时的host和port选项也可以通过环境变量FLASK_RUN_HOST和FLASK_RUN_PORT设置。事实上,Flask内置的命令都可以使用这种模式定义默认选项值,即“FLASK_<COMMAND>_<OPTION>”,可以使用flask--help命令查看所有可用的命令

3.设置运行环境

开发环境(development enviroment)和生产环境(production enviroment)

开发环境是指在本地编写和测试程序时的计算机环境,而生产环境与开发环境相对,它指的是网站部署上线供用户访问时的服务器环境。

  • 调试器Werkzeug
  • 用于监测文件变动的Python库Watchdog
  • 提示符“>>>”,那么就表示这些代码需要在使用flask shell命令打开的Python Shell中执行
  • Python Shell可以执行exit()或quit()退出,在Windows系统上可以使用Crtl+Z并按Enter退出。在Linux和mac OS则可以使用Crtl+D退出。

4.Flask扩展

扩展(extension)即使用Flask提供的API接口编写的Python库,可以为Flask程序添加各种各样的功能。

以某扩展实现了Foo功能为例:

这个扩展的名称将是Flask-Foo或Foo-Flask;

程序包或模块的命名使用小写加下划线,即flask_foo(即导入时的名称);

用于初始化的类一般为Foo,实例化的类实例一般使用小写,即foo。

5.项目配置

在Flask中,配置变量就是一些大写形式的Python变量,可以称之为配置参数配置键。使用统一的配置变量可以避免在程序中以硬编码(hard coded)的形式设置程序

和平时使用变量不同,这些配置变量都通过Flask对象的app.config属性作为统一的接口来设置和获取,它指向的Config类实际上是字典的子类,所以你可以像操作其他字典一样操作它。

  • Flask内置的配置可以访问Flask文档的配置章节(http://flask.pocoo.org/docs/latest/config/)
  • 使用update()方法则可以一次加载多个值
  • 读取一个配置就是从config字典里通过将配置变量的名称作为键读取对应的值

6.URL与端点

使用Flask提供的url_for()函数获取URL,当路由中定义的URL规则被修改时,这个函数总会返回正确的URL。

  • 这个路由的端点即视图函数的名称index,调用url_for('index')即可获取对应的URL,即“/”
  • 如果URL含有动态部分,那么我们需要在url_for()函数里传入相应的参数,以下面的视图函数为例:这时使用url_for('say_hello',name='Jack')得到的URL为“/hello/Jack”。

7.Flask命令

函数的名称即为命令名称。

借助click模块的echo()函数,我们可以在命令行界面输出字符。命令函数的文档字符串则会作为帮助信息显示(flaskhello--help)。在命令行下执行flask hello命令就会触发这个hello()函数:

  • 关于自定义命令更多的设置和功能请参考Click的官方文档(http://click.pocoo.org/6/)

8.模板与静态文件

使用模板(template)和静态文件(static file)来生成更加丰富的网页。

模板即包含程序页面的HTML文件,存放在项目根目录中的templates文件夹中

静态文件则是需要在HTML文件中加载的CSS和Java Script文件,以及图片、字体文件等资源文件。存放在static文件夹下。

使用这些扩展时都需要加载对应的CSS和Java Script文件,通常这些扩展都会提供一些可以在HTML模板中使用的加载方法/函数,使用这些方法即可渲染出对应的link标签和script标签。

  • 建议在开发环境下使用本地资源,这样可以提高加载速度
  • 自己下载到static目录下,统一管理,也可以使用扩展内置的本地资源
  • 过渡到生产环境时,自己手动管理所有本地资源或自己设置CDN,避免使用扩展内置的资源

CDN指分布式服务器系统。服务商把你需要的资源存储在分布于不同地理位置的多个服务器,它会根据用户的地理位置来就近分配服务器提供服务(服务器越近,资源传送就越快)。使用CDN服务可以加快网页资源的加载速度,从而优化用户体验。对于开源的CSS和Java Script库,CDN提供商通常会免费提供服务。

9.Flask与MVC架构

处理请求并生成响应的函数被称为“视图函数(view function)"。

在MVC架构中,程序被分为三个组件:数据处理(Model)、用户界面(View)、交互逻辑(Controller)。

使用了app.route()装饰器的函数被称为视图函数,同时会使用“<函数名>视图”(比如index视图)的形式来代指某个视图函数。


《Flask Web开发实战》Chapter1 学习笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值