首页 > 编程语言 >XX学Python·mini web开发案例

XX学Python·mini web开发案例

时间:2022-10-04 23:23:58浏览次数:61  
标签:mini 请求 clinet Python self send web data response

mini_web开发案例

参考阶段三day07

  • 面对对象动态服务器
import socket
import threading
import json


class WebServer():

    def __init__(self):
        # 一、创建服务端对象
        self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 二、绑定ip和端口
        self.server.bind(('192.168.88.8', 8001))
        # 三、监听
        self.server.listen(5)

    # def url_data(self):
    #     处理不同请求路径

    def clinet_request(self, clinet_data):
        # 五、接受客户端(浏览器)数据
        recv_data = clinet_data.recv(1024)
        # 捕获数据处理异常,捕获到异常就结束函数的业务逻辑执行
        try:
            # 读取请求报文中的请求路径,根据不同的请求路径返回不同的页面
            # 5-1、将bytes类型转为字符串
            str_data = recv_data.decode()
            # 5-2、字符串切割 按\r\n切割 得到请求行、请求头数据、请求体数据 GET /register HTTP/1.1\r\nHost: 127.0.0.1:8009\r\nConnection: keep-alive\r\n
            data_list = str_data.split('\r\n')
            # 5-3、从切割后的列表中提取请求行数据,再按照空格切割请求行数 GET /register HTTP/1.1
            request_line = data_list[0]
            # 5-4、从切割后的请求行列表数据中提取请求路径
            url_path = request_line.split(' ')[1]
        except Exception as e:
            # 输出异常信息
            print(e)
            clinet_data.send(b'not data')
            return None
        # 5-5、据不同请求路径查询不同数据表内容返回给浏览器(有很多elif,最好再单独封装方法如def url_data,再调用self.url_data())
        if url_path == '/user':  # 不同路径处理方法也可再单独封装
            # 查询user用户数据库表
            data_dict = {'name': 'python', 'age': 18, 'gender': 'boy'}
            # 返回查询到user数据表内容
            # 借助json模块,将字典转为字符串,才可以在请求体中进行字符串拼接
            send_data = json.dumps(data_dict)
        elif url_path == '/goods':
            # 查询goods商品数据库表
            goods_dict = {'name': 'xiaomi', 'price': 5000, 'stock': 100}
            # 返回查询到goods数据表内容
            # 借助json模块,将字典转为字符串,才可以在请求体中进行字符串拼接
            send_data = json.dumps(goods_dict)
        else:
            send_data = 'error'

        # 构建响应报文数据
        # 响应行
        response_line = 'HTTP/1.1 200 ok\r\n'
        # 响应头
        response_header = 'Server:itcast\r\n\r\n'
        # 响应体
        response_body = send_data

        respose_data = response_line + response_header + response_body
        # 六、返回数据给客服端
        clinet_data.send(respose_data.encode())

    def start(self):

        # 四、循环等待客户端连接,获取客服端的保存数据连接对象和客户端地址
        print('服务器启动。。。')
        while True:
            clinet_data, addr = self.server.accept()
            print('请求的客户端:', clinet_data)
            # 创建线程执行客户端处理方法client_request 五、六
            t = threading.Thread(target=self.clinet_request, args=(clinet_data,))
            # 启动线程
            t.start()


web = WebServer()
web.start()

标签:mini,请求,clinet,Python,self,send,web,data,response
From: https://www.cnblogs.com/portb/p/16754787.html

相关文章

  • XX学Python·数据分析工具
    Anaconda管理虚拟环境界面创建虚拟环境:Environment>Create>弹出对话框命令创建虚拟环境:点击CMD.exePrompt这图标下的Launch进入cmd命令行终端condaenvlist......
  • XX学Python·函数
    函数的定义和调用'''#函数定义的格式def函数名(参数1,参数2...):函数体return返回值#函数调用格式函数名(参数1,参数2...)#函数名:绝大多数函数都有函......
  • XX学Python·异常处理
    使用try和except可捕获异常,即在出现异常后不会将代码终止运行,而是执行except中的代码处理异常'''格式:try:可能出现异常的代码except:如果出现了异常,就执......
  • XX学Python·模块和包
    模块的导入#可将别人写好或自己写好的功能直接导入新文件或工程内,导入后可直接调用.#我们没有实现模块中的功能,但是我们讲模块导入后就可以使用该功能,类似于继承......
  • XX学Python·进程与线程
    多任务编程-进程多任务执行方式并发:在一段时间内交替去执行任务并行:多核cpu每个cpu执行一个任务。注:任务>cpu时,每个cpu并发执行多个任务进程:计算机中的程......
  • XX学Python·网络
    TCP客服端程序开发(TransmissionControlProtocol)传输控制协议导入socket模块创建TCP套接字‘socket’参数1:‘AF_INET’,表示IPv4地址类型参数2:‘SOCK_STRE......
  • 基于python的物业信息管理系统设计与实现-计算机毕业设计源码+LW文档
    摘 要网络的广泛应用给生活带来了十分的便利。所以把物业信息管理与现在网络相结合,利用Python技术建设物业信息管理系统,实现物业信息的信息化。则对于进一步提高物业信息......
  • XX学Python·字典
    字典以键值对形式存储,方便快速存取,字典的键要见名知意。字典占用空间远大于列表,牺牲空间利用快速存取的特性。字典是无序的,因为不能通过索引进行键值对获取。Python3......
  • 基于python的校园用车管理系统设计与实现-计算机毕业设计源码+LW文档
    开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql5.7(一定要5.7版本)数据库工具:Navicat11开发软件:PyCharm 浏览器:谷歌浏览器数据库:DROPTABLEIFEXISTS......
  • XX学Python·元组
    元组可以储存多个数据,元组里的数据不能被修改(元组定义后只能被查询)元组定义:变量=(数据1,数据2,数据3......);单元素也要有逗号,变量=(数据,)。元组定义时,小括号可省略......