一些概念
WSGI
Web Server Gateway Interface:web服务器网关接口,是为Python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。
IP地址
IP地址由网络地址和主机地址组成,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。
端口号
所谓的端口,就好像是门牌号一样,客户端可以通过ip地址找到对应的服务器端,但是服务器端是有很多端口的,(一台计算机上可以同时提供很多个服务),每个应用程序对应一个端口号,通过类似门牌号的端口号,客户端才能真正的访问到该服务器。为了对端口进行区分,将每个端口进行了编号,这就是端口号。
通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,还需要指定端口号。在计算机中,不同的应用程序是通过端口号区分的。端口号是用两个字节(16位的二进制数)表示的,它的取值范围是0-65535,其中,0-1023之间的端口号用于一些知名的网络服务和应用,用户的普通应用程序需要使用1024以上的端口号,从而避免端口号被另外一个应用或服务所占用。
localhost,127.0.0.1,本机IP
1.localhost,127.0.0.1不需要联网;本机IP需要联网
2.localhost是域名,127.0.0.1是回环地址,本机IP地址访问的话,等于本机是通过网络再去访问本机。
3.localhost对应的地址是“ 127.0.0.1”,整个127.* 网段,(通过域名解析将域名指向网站空间IP),也就是127.0.0.0到127.255.255.255都是环回地址(只是有两个特殊的保留)。
所谓回环地址,是主机用于向自身发送通信的一个特殊地址(也就是一个特殊的目的地址)。
此地址中的任何地址都不会出现在网络中,同一台主机上的两项服务若使用环回地址而非分配的主机地址,就可以绕开TCP/IP协议栈的下层。(也就是说:不用再通链路层,物理层和互联网,而是可以直接在自己的网络层,运输层进行处理)用通俗一点的话说,localhost 是 家 ,ip是家的地址,一说起家 ,对自己家人,提起家,都默认知道家的位置,但是对其它人,提起,就需要报家的地址呢。
一个简单的实现
app=Flask(__name__)
@app.route('/') #路由定义
def index():
return '哈哈哈哈' #视图函数 view
app.run() #融合服务器并开启
app.run()函数的参数
1.port参数:端口号。默认5000
2.host参数:当设置为0.0.0.0才可以使同一局域网下的主机通过IP地址访问。默认为本机访问
3.debug参数:若为False以部署时的内容为准,代码改了刷新浏览器也不会有改动(适用于production环境),设置为True即可实现只要代码改变服务器就会重新加载(适用于开发环境development)。默认为False
在设置这个参数为True的时候遇到了这个报错:
查找了一些资料,比较多的一个解释就是说这可能是IPython编辑器的问题,如果直接通过cmd运行就没问题(试了下,确实是这样,另外补充下,笔者用的是Spyder),如果有路过的大佬知道怎么解决还请多多指教。
关于配置
app.config.from_object(config)
通过这个函数查看当前的配置,关于配置的设置,可以直接在运行文件中设置,但是这样会导致运行文件内容比较多,故在工程内,经常将配置解耦,单独建立一个配置文件,然后在运行文件下导入即可。
配置文件:config.py
DEBUG=True
ENV='development'
运行文件:app1.py
import config
app=Flask(__name__)
app.config.from_object(config) #带使用对应配置
请求和响应
接下来,修改一下起初的代码,做个实验
from flask import Flask
import config
app=Flask(__name__)
app.config.from_object(config)
print(app.config)
@app.route('/') #路由定义0
def index():
return '憨憨你好哈哈哈哈哈呀'
@app.route('/test') #路由定义1
def index2():
return '憨憨'
@app.route('/test2') #路由定义2
def index3():
return '憨憨你好'
app.run(host='0.0.0.0',port=8000)
实验发现,当在浏览器中输入 http://……:8000/test时,浏览器显示的是憨憨;http://……:8000/显示的是憨憨你好哈哈哈哈哈呀;http://……:8000/test2显示的是憨憨你好;也就是说有着不同的路由响应。
以/test为例观察讲解一下:
http协议中的请求和响应:
请求
请求行:就是请求访问的地址以及请求方法(get,post)
请求头:key:value格式组成
请求体:get请求方式没有请求体,先跳过
响应
响应行:包括状态码,比如:200 ok,404等
响应头:
可以看到服务器就是python服务器。
响应体:想让用户看到的东西,在这个例子里就是“憨憨”