网站首页 > 技术教程 正文
首先这是网络编程的范畴,因此带你们来了解一下这部分的知识。
网络协议
首先,要在网络上进行通信,就需要有相关网络协议,例如TCP/IP,UDP……等等。
当然你可以说我直接选用一个框架作为开始,不想了解这么多东西。那样也没问题,不过到一定的时间,相信你还是会愿意回过头来看一看这些基础知识的。
提到网络编程,你一定见过Socket,翻译过来是套接字。这个是啥,相信你也和我一样在初见到它的时候一头雾水,我觉得是翻译的不好,引用一段我觉得还算不错的解释:
Socket是网络编程的一个抽象概念。通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可。
那么,抛开各种框架不谈,直接用Python去进行网络编程时,一般会用到socket模块。具体示例代码,我随便找了本书上的伪代码抄在下面。
流程是这样:先创建一个服务器端,再创建一个客户端,
然后它们开始参与发送和接收的对话,直到连接终止。
具体操作的时候,我们需要打开两个命令行窗口,一个运行服务器程序,另一个运行客户端程序,就可以看到对话的效果了。
到这里你应该有了一个大致的概念:在网络上通信,需要通信的双方,以及网络协议,然后建立起联系。
Web开发
Web当然是网络的一部分。
在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP,所以:
- HTML是一种用来定义网页的文本,会HTML,就可以编写网页;
- HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。
看来,HTTP协议是Web开发中,十分重要的协议了。关于HTTP协议的具体知识,推荐一本书《图解HTTP协议》。
因此,在Web应用中,经常在做接受HTTP请求、解析HTTP请求、发送HTTP响应这些苦力活。所以,如果需要自己动手实现,就得接触到TCP连接、HTTP原始请求和响应格式,估计还得阅读不少相关规范。
WSGI
可是大部分Web应用的开发者并不想把时间耗费在这些苦力活上,因此,WSGI应运而生了。其全称是Web Server Gateway Interface。
WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求。
Python也内置了一个WSGI服务器,这个模块叫wsgiref,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
了解了WSGI框架,我们发现:其实一个Web App,就是写一个WSGI的处理函数,针对每个HTTP请求进行响应。
但是当HTTP请求、URL多起来的时候,问题又出现了:如何处理URL和处理函数之间的映射关系?
WSGI提供的接口虽然比HTTP接口高级了不少,但和Web App的处理逻辑比,还是比较低级,我们需要在WSGI接口之上能进一步抽象,让我们专注于用一个函数处理一个URL,至于URL到函数的映射,就交给Web框架来做。
因此,Python内置的WSGI服务器当然不足以满足许多人的需要,好在我们还有其他的框架可以选用。
Web框架
目前运行在WSGI协议之上的Web框架非常多。从个人经验角度而言:轻量级选Flask、重量级选Django,当然还有其他的,不过我没有去深入了解,各位可以自行搜索。
学习它们的教程也很多,比如Flask就有“狼书”《Flask Web开发实战:入门、进阶与原理解析》、“狗书”《Flask Web开发:基于Python的Web应用开发实战》等不错的参考书籍。
当然,这些框架也都对WSGI进行了各自的实现。
因为每个Web框架都不是专注于实现服务器方面的,所以这些WSGI服务器一般也就是开发调试时使用。在生产环境部署的时候,不会简单的使用Web框架自带的服务器。
实际环境使用的WSGI服务器
- Gunicorn
最流行的大概就是这个了吧。
- uwsgi
因为使用C语言开发,会和底层接触的更好。
一般生产环境上,也就是二者选其一了。我目前在用的是Gunicorn。
小结
阅读完这篇文章,你应该能够从网络编程的基本原理,到框架选用,再到生产环境的部署,都有了相关概念了。
为了帮助小伙伴们更好的学习Python,技术学派整理了Python的相关学习视频及学习路线图。
领取方式
关注“技术学派”后,评论转发文章,私信回复:Python学习
猜你喜欢
- 2024-10-17 Web开发程序应用 web应用开发用什么软件
- 2024-10-17 混合应用开发的又一个选择,支持三大主流Web框架——Onsen UI
- 2024-10-17 web端开发增强现实应用 web应用与开发 功能实现
- 2024-10-17 Java Web应用开发工程师——学习路线
- 2024-10-17 如何用Web前端技术就能开发出桌面应用程序?
- 2024-10-17 用 Angular 开发 Web 应用(Part 2)
- 2024-10-17 用WEB技术栈开发NATIVE应用:WEEX 前端SDK原理详解
- 2024-10-17 使用 Rust Actix 快速开发高性能的Web应用
- 2024-10-17 酷呆了!Python开发web应用的一些中级技巧
- 2024-10-17 手把手带你使用Flutter开发web应用程序
你 发表评论:
欢迎- 05-05从virsh当中学习QEMU/KVM启动命令
- 05-05Win10 BCD文件损坏怎么修复?(bcd文件损坏win7)
- 05-05亚马逊春节假期期间的店铺管理设置
- 05-051分钟总结常用k8s常用诊断教程(k8s常见故障)
- 05-05VisiPics重复图片查找软件中文汉化教程
- 05-05微服务的发布实现方式1灰度实现(微服务实现原理)
- 05-05轻松掌握Java多线程 - 第二章:线程的生命周期
- 05-05德拉诺之王邪DK报告:PVE向小测试及分析
- 最近发表
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)