前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用Python手动搭建一个网站服务器,在浏览器中显示你想要展现的内容

使用Python手动搭建一个网站服务器,在浏览器中显示你想要展现的内容

作者头像
松鼠爱吃饼干
发布2021-11-25 13:26:35
2K0
发布2021-11-25 13:26:35
举报
文章被收录于专栏:Python分享

前言

在公司网站开发中,我们往往借助于Flask、Django等网站开发框架去提高网站开发效率。那么在面试后端开发工程师的时候,面试官可能就会问到网站开发的底层原理是什么?

我们不止仅仅会使用框架开发,还需要知其所以然

今天领大家不借助任何框架的基础上手动搭建一个资料查找网站

主要内容

  • TCP网络模型
  • 正则表达式匹配资源
  • 如何编写一个tcp server服务端

开始我们的代码,先是导入模块

如何实现一个静态的服务器呢?可以使用Python自带的一个通讯模型:socket

python中内置的网络模型库tcp / udp

代码语言:javascript
复制
import socket

为浏览器发送数据的函数

1. 当浏览器链接到网站服务器的时候

代码语言:javascript
复制
def service_client(new_socket):
    request = new_socket.recv(1024)
    print(request)

2. 向浏览器发送http数据

如果浏览器在接收完http协议数据之后遇到了换行,自动将下面的数据转成网站内容body中去

代码语言:javascript
复制
response = 'HTTP/1.1 200 OK \r\n'
response += '\r\n'
# 构建你想要显示的数据内容
response += 'hello world'

3. 浏览器接受到的数据是由编码集的,所以我们需要对字符串进行一次编码

代码语言:javascript
复制
 new_socket.send(response.encode('utf-8'))

4. 当服务完浏览器之后,需要释放系统资源

代码语言:javascript
复制
new_socket.close()

创建一个执行函数

1. 创建一个tcp套接字

socket模块需要两个参数 网络协议(pc ipv4 ipv6) 模型类型

代码语言:javascript
复制
def main():
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

我们操作系统内部有65535个服务端口,当一个程序运行的时候[进程] 占用一个端口 浏览器软件运行占用的端口:80 文件上传端口:22 网站指定端口:443

端口是有限的,当程序完成任务之后一定要释放端口 刷新资源

2. 当网站服务中断时 需要立即释放端口

代码语言:javascript
复制
tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

3.绑定本机信息

代码语言:javascript
复制
tcp_server_socket.bind(('', 80))

通过浏览器去访问网站资源 [数据 html css JavaScript 静态文件(图片 音频)] 需要让浏览器首先能找到这台电脑 ip 才可以访问这台电脑的数据资源 需要绑定电脑的ip地址

4.将网站服务设置成监听模式

等待浏览器链接

代码语言:javascript
复制
tcp_server_socket.listen(128)

网站服务

代码语言:javascript
复制
    while True:
        '''
        new_socket 负责向浏览器发送数据的
        client_addr 记录当前链接电脑的信息(ip port) 
        '''
        new_socket, client_addr = tcp_server_socket.accept()
        service_client(new_socket)
        # 使用new_socket向浏览器发送数据

启动程序

代码语言:javascript
复制
if __name__ == "__main__":
    main()

运行代码

出现乱码,可以把utf-8改为GBK

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 松鼠爱吃饼干 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 主要内容
  • 开始我们的代码,先是导入模块
  • 为浏览器发送数据的函数
    • 1. 当浏览器链接到网站服务器的时候
      • 2. 向浏览器发送http数据
        • 3. 浏览器接受到的数据是由编码集的,所以我们需要对字符串进行一次编码
          • 4. 当服务完浏览器之后,需要释放系统资源
          • 创建一个执行函数
            • 1. 创建一个tcp套接字
              • 2. 当网站服务中断时 需要立即释放端口
                • 3.绑定本机信息
                  • 4.将网站服务设置成监听模式
                  • 网站服务
                  • 启动程序
                  • 运行代码
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档