zoukankan      html  css  js  c++  java
  • python -- 自定义web框架

    在学习自定义web框架之前我们对什么是web框架需要有个清晰的认识,本质上说,web框架就是一个socket Server。

    目前常见的动态网站WEB框架前面有WSGI(eg:Django、Flask...)或者是自己写的SOCKET(Tornado),然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板(常用jinja2)里拿到模板然后把模板和从数据库取出的数据进行混合组成一个字符串然后返回给用户(python3在发送时要byte编码)。

    这里对WSGI举例说明一下:

      WSGI是用来接收请求,然后封装请求。例如对Django来说都封装到了request里面。

      

    自定义web框架

    1、web框架雏形之socket实现

     1 #!/usr/bin/env python
     2 # -*- coding:utf8 -*-
     3 
     4 import socket
     5 
     6 
     7 def handle_request(client):
     8     buf = client.recv(1024)
     9     client.send(b"HTTP/1.1 200 OK 
    
    ")
    10   # with open('./html/index.html','r') as f: #执行时这里报错 错误详情下文有说明
    11 with open('./html/index.html', 'rb') as f: 12 client.send(f.read()) 13 14 15 def main(): 16 ip_port = ('127.0.0.1',9999) 17 sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 18 sock.bind(ip_port) 19 sock.listen() 20 21 while True: 22 conn, addr = sock.accept() 23 handle_request(conn) 24 conn.close() 25 26 27 if __name__ == '__main__': 28 print("33[31;1m Server is running... 33[0m") 29 main()

      在这里遇到一个小问题,pycharm执行报错:

    UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 84: illegal multibyte sequence

      解决办法:

        (1)修改打开文件方式为 'rb'

       with open('./html/index.html', 'rb') as f:
            client.send(f.read())

        (2)在打开时设置编码

       with open('./html/index.html', 'r',encoding='utf-8') as f:
            client.send(f.read())

    2基于socket的web框架

      这种实现方式的web框架主要有Tornado。这里socket是属于web框架。Tornado因为自己写socket,利用epoll实现了异步非阻塞。

    3、基于WSGI的web框架

      目前主流的部分web框架,如Django、Flask...都是采用这样的方式。这里WSGI与web框架是平行关系(WSGI不属于web框架)。

  • 相关阅读:
    如何用最小的代价完成爬虫需求
    那些年我们一起守护的“密”
    自动化中间人攻击工具subterfuge小实验
    XP操作系统设置:[82]关机快捷键
    如何绕过Win8、Win10的systemsetting与注册表校验设置默认浏览器
    定时启动和关闭指定程序的方法
    Delphi 的内存操作函数(2): 给数组指针分配内存
    Delphi 的内存操作函数(1): 给字符指针分配内存
    Java Gearman Service
    分布式计算框架Gearman原理详解
  • 原文地址:https://www.cnblogs.com/xtsec/p/7009870.html
Copyright © 2011-2022 走看看