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 \r\n\r\n")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("\033[31;1m Server is running... \033[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

3、基于WSGI的web框架

  目前主流的部分web框架,如Django、Flask...都是采用这样的方式

时间: 2024-10-13 17:08:56

python -- 自定义web框架的相关文章

Python自定义web框架、Jinja2

WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦. python标准库提供的独立WSGI服务器称为wsgiref. 标准Web框架 #!/usr/bin/env python #coding:utf-8 from wsgiref.simple_server import make_server def RunServer(environ,

Python之Web框架介绍

所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理 Python的Web框架分成了两类, 即包含socket也包含业务逻辑处理的(tornado) 不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask) WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口.具

Python之Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8 import socket def handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, Seven")

Python学习——web框架

对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. WSGI(Web Server Gateway Interface)是一种规范,它定义了使用python编写的web app与web server之间接口格式,实现web app与web server间的解耦. 一.python标准库提供的独立WSGI服务器称为wsgiref 1 from wsgiref.simple_server import make_server 2 3 def Ru

自定义Web框架

Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/usr/bin/env python #coding:utf-8   import socket   def handle_request(client):     buf = client.recv(1024)     client.send

Python之Web框架Django

Python之Web框架: Django 一.  Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. 1 #!/usr/bin/env python 2 #coding:utf-8 3 4 #web框架的基础结构,几乎所有开发者都是基于此基础结果进行扩展. 5 6 import socket 7 8 def handle_request(client): 9 buf = client.recv(1024) 10 clien

第二篇:Python高性能Web框架tornado源码剖析之待请求阶段

上篇<第一篇:Python高性能Web框架Tornado原理剖析>用上帝视角多整个框架做了一个概述,同时也看清了web框架的的本质,下面我们从tornado程序的起始来分析其源码. 概述 上图是tornado程序启动以及接收到客户端请求后的整个过程,对于整个过程可以分为两大部分: 启动程序阶段,又称为待请求阶段(上图1.2所有系列和3.0) 接收并处理客户端请求阶段(上图3系列) 简而言之: 1.在启动程序阶段,第一步,获取配置文件然后生成url映射(即:一个url对应一个XXRequestH

python 实现web框架simfish

python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供了简单的simple_server, wsgiref.simple_server.make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler) 官方提供的例子, from wsgiref

自定义web框架(django)

Django基础了解知识 HTTP协议(超文本传输协议) HTTP协议 四大特性: 基于TCP/IP之上作用于应用层 基于请求响应 无状态 引申出cookie session token-- 无连接 长连接 websocket (HTTP协议的大补丁) 数据格式: 请求格式 请求首行(请求方式,协议版本等等) 请求头(一大堆K:V键值对) \r\n 或者是\n 总之就是加一个空行 请求体(真正的数据 发post请求的时候才有 如果是get请求不会有) 响应格式 响应首行 响应头 \r\n 或者是