文章目录

  • 一、 http通讯协议
  • 二、 认识flask
  • web框架
  • 框架的轻重
  • flask简介
  • 三、 第一个flask程序



一、 http通讯协议

        HTTP协议,即超文本传输协议(Hypertext transfer protocol)。就是详细指定浏览器与万维网(WWW=World Wide Web)服务器进行相互通讯的法则,在因特网上传输万维网文件的数据传输协议。
        HTTP建立在TCP/IP应用层协议之上,包括请求与响应两部分,是标准客户端服务器模型。HTTP为无状态协议,对事务的处理缺乏记忆能力。缺乏状态是指在随后的加工中,若需先前信息,那么就不得不重传,这在另一方面可能会造成每一次连接传送数据量的增加,当服务器没有前一条消息时,其响应会更快一些
        HTTP默认的端口号为80, HTTPS的端口号为443。
计算机网络体系介绍


python Flask 一个端口启动多个服务_flask

TCP/IP通讯传输流

python Flask 一个端口启动多个服务_HTTP_02

输入网址后网站做的事
        当我们在浏览器的地址栏输入“www.baidu.com”然后按回车,这之后发生了什么事

  • URL自动解析
    HTTP URL包含足够的信息来查找特定的资源,其基本格式如下:HTTP://host[“:”port][abs_path],其中HTTP表示通过HTTP协议来定位网络资源;host表示合法主机域名或IP地址,port指定端口号,默认80;abs_path为请求资源指定URI;如果abs_path不在URL里给出来,则在用作请求URI的时候一定要用“/”来给出来,一般情况下这一任务浏览器都会自动地帮助我们实现。
    例如:输入www.163.com;浏览器将自动转换为:HTTP:\www.163.com\
  • 获取IP,建立TCP连接
    浏览器地址栏输入"HTTP://www.xxx.com/"提交后,它会先在DNS本地缓存表上找到它,如有,直接通知IP地址。若不存在就请求网关DNS搜索,这样下来当搜索到相应IP时,返回将提供浏览器。
    在获得IP后开始和请求TCP进行3次握手连接并在连接完成后向服务器发送HTTP请求。
  • 客户端浏览器发送HTTP请求至服务器
    TCP连接建立后,Web浏览器将请求命令发送到Web服务器,然后以头消息的方式将其他消息发送到Web服务器,此后浏览器发一个空白行通知服务器已终止发送此头消息。
    浏览器将请求命令如:GET/sample/hello.jsp HTTP/1.1等发送给服务器。
    常用的请求:GET time: GET,POST,HEAD,PUT,DELETE,TRACE,OPTIONS
  • Web服务器应答,并向浏览器发送数据
    客户机向服务器发出请求后,服务器会客户机回送应答
    HTTP/1.1 200 OK
    应答的第一部分是协议的版本号和应答状态码,正如客户端会随同请求发送关于自身的信息一样,服务器也会随同应答向用户发送关于它自己的数据及被请求的文档。
    Web服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据
  • Web服务器关闭TCP连接
    一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码
    Connection:keep-alive
    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
  • 总图

python Flask 一个端口启动多个服务_HTTP_03

客户端不一定是浏览器, 也可以是PC软件、手机APP、程序4 根据服务器端的工作,将其分为两部分:

服务器:与客户端进行tcp通信,接收、解析、打包、发送http格式数据4
业务程序:根据解析后的请求数据执行逻辑处理,形成要返回的数据交给服务器。
服务器与Python业务程序的配合使用WSGI协议

常用HTTP协议介绍
        Http协议定义了很多与服务器交互的方法。常见的有OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。其中最基本的有4种,分别是GET,POST,PUT,DELETE

  • GET协议
    GET方法是一种利用给定URI在给定服务器上进行信息检索的方法,也就是在指定资源上进行数据请求。GET方法的请求只应检索数据,不应对数据产生其他影响。url上承载了请求的参数。之后就是请求参数并用&将不同的参数隔开。
  • POST的计算方法
    将所述数据提交给所述指定资源以进行处理请求(如递交表单或上传文件等)。将所述数据纳入请求体。POST请求可导致创建新资源和/或对现有资源进行更改。
  • HEAD
    向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回,仅传输状态行和标题部分。这一方法可以在不必传输整个响应内容的情况下,就可以获取包含在响应消息头中的元信息。
  • PUT
    PUT方法用于将数据发送到服务器以创建或更新资源,它可以用上传的内容替换目标资源中的所有当前内容。即向指定资源位置上传其最新内容。由于自身不带验证机制,任何人都可以上传文件,因此存在安全性问题,一般不使用该方法。

二、 认识flask

web框架

        能够被服务器调用起来,根据客户端的不同请求执行不同的逻辑处理形成要返回的数据的程序。
        核心:实现路由和视图(业务逻辑处理)。

  • 路由是指路由器从一个接口上收到数据包,根据数据包的目的地址进行定向并转发到另一个接口的过程。
  • 视图是从一个或者几个基本表(或视图)导出的表。它与基本表不同,是一个虚表。数据库中只存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以一旦基本表中发生数据变化,从视图中查询出的数据也就随之改变了。从这个意义上讲,视图就是一个窗口,通过视图可以看到数据库中自己想了解的数据变化。create view 视图名 as 查询语句;

框架的轻重

  • 重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django°
    -轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、Tornado

flask简介

       Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。
       Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login), 都需要用第三方的扩展来实现,比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其WSGI工具箱采用Werkzeug (路由模块), 模板引擎则使用Jinja2 。可以说Flask框架的核心就是Werkzeug和Jinja2
       Python最出名的框架要数Django,此外还有Flask、Tornado等框架.虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一, 这也是Flask受到广大开发者喜爱的原因。
扩展包

、pipenv install python-dotenv  (管理项目环境变量);

2、pipenv install watchdog --dev(监测文件变动,一般开发时使用);

3、pipenv install flask-wtf (表单插件);

4、pipenv install flask-ckeditor(富文本编辑器);

5、pipenv install flask-sqlalchemy(数据库管理);

6、pipenv install flask-mail(发送邮件);

7、pipenv install bootstrap-flask(bootstrap前端css组件);

8、pipenv install flask-moment(时间和日期处理函数组件);

9、pipenv install flask-debugtoolbar(调试工具);

10、pipenv install flask-login(用户认证组件);

11、pipenv install flask-migrate(数据库迁移插件);

12、pipenv install flask-dropzone(文件上传插件);

13、pipenv install flask-avatars(头像处理插件);

14、pipenv install flask-cors(浏览器跨域插件);

15、pipenv install flask-socketio(socket插件)

三、 第一个flask程序

from flask import Flask #导入类

#创建flask应用对象
#__name__表示当前模块名;模块名:flask以这个模块所在的目录为根目录,默认这个目录中的static为静态目录。templates为模板目录
app=Flask(__name__) #__name__属于Python中的内置类属性,代表对应程序名称。如果当前运行的程序是主程序,此时__name__的值就是__main__,反之,则是对应的模块名。

#@app.route("/index") #将视图函数与路由绑定在一起
@app.route("/")#路由 #将视图函数与路由绑定在一起 。/类似网址的/
def index():
    """
    定义的视图函数
    :return:
    """
    return "yudengwu 520 liyueyue"


if __name__=="__main__":
    app.run()#运行,启动程序

把链接复制粘贴到网页

python Flask 一个端口启动多个服务_flask_04


python Flask 一个端口启动多个服务_服务器_05


python Flask 一个端口启动多个服务_服务器_06