web框架
web框架的功能
1. 使用socket收发信息
import socket # 创建一个socket对象 sk = socket.socket() # 绑定ip和端口 sk.bind(('127.0.0.1', 8848)) # 监听 sk.listen() # 等待连接 while True: conn, addr = sk.accept() data = conn.recv(1024) print(data) conn.send(b'HTTP/1.1 200 OK\r\n\r\nok') conn.close()
2. 根据不同路径返回不同内容
import socket # 创建一个socket对象 sk = socket.socket() # 绑定ip和端口 sk.bind(('127.0.0.1', 8848)) # 监听 sk.listen() def index(url): ret = '欢迎进入红浪漫! - {}'.format(url) return ret.encode('utf-8') def home(url): ret = '欢迎回家! - {}'.format(url) return ret.encode('utf-8') def help_me(url): ret = '再等30年,你又是条好汉! - {}'.format(url) return ret.encode('utf-8') list1 = [ ('/index', index), ('/home', home), ('/help_me', help_me), ] # 等待连接 while True: conn, addr = sk.accept() data = conn.recv(1024) url = data.decode('utf-8').split()[1] for i in list1: if url == i[0]: ret = i[1](url) break else: ret = '被查办了!'.encode('utf-8') conn.send(b'HTTP/1.1 200 OK\r\ncontent-type: text/html; charset=utf-8\r\n\r\n') conn.send(ret) conn.close()
import socket # 创建一个socket对象 sk = socket.socket() # 绑定ip和端口 sk.bind(('127.0.0.1', 8848)) # 监听 sk.listen() def index(url): with open('index.html', 'rb') as f: return f.read() def home(url): ret = '欢迎回家! - {}'.format(url) return ret.encode('utf-8') def help_me(url): ret = '再等30年,你又是条好汉! - {}'.format(url) return ret.encode('utf-8') list1 = [ ('/index', index), ('/home', home), ('/help_me', help_me), ] # 等待连接 while True: conn, addr = sk.accept() data = conn.recv(1024) url = data.decode('utf-8').split()[1] for i in list1: if url == i[0]: ret = i[1](url) break else: ret = '被查办了!'.encode('utf-8') conn.send(b'HTTP/1.1 200 OK\r\ncontent-type: text/html; charset=utf-8\r\n\r\n') conn.send(ret) conn.close()
3. 返回动态的数据(字符串的替换,也叫模板的渲染)
import socket import time # 创建一个socket对象 sk = socket.socket() # 绑定ip和端口 sk.bind(('127.0.0.1', 8848)) # 监听 sk.listen() def index(url): with open('index.html', 'rb') as f: return f.read() def home(url): ret = '欢迎回家! - {}'.format(url) return ret.encode('utf-8') def help_me(url): ret = '再等30年,你又是条好汉! - {}'.format(url) return ret.encode('utf-8') def timer(url): now = time.time() with open('time.html','r',encoding='utf-8') as f: ret = f.read() ret = ret.replace('@@time@@',str(now)) return ret.encode('utf-8') list1 = [ ('/index', index), ('/home', home), ('/help_me', help_me), ('/time', timer), ] # 等待连接 while True: conn, addr = sk.accept() data = conn.recv(1024) url = data.decode('utf-8').split()[1] func = None for i in list1: if url == i[0]: func = i[1] break if func: ret = func(url) else: ret = '被查办了!'.encode('utf-8') conn.send(b'HTTP/1.1 200 OK\r\ncontent-type: text/html; charset=utf-8\r\n\r\n') conn.send(ret) conn.close()
框架支持功能
django 23 还支持jinjia2 用python本地库中wsgiref 大而全
flask 2 用第三方库 轻量级
tornado 123 用第三方库 轻量级
服务器和应用程序
对于真实开发中的python web程序来说,一般会分为两部分:服务器程序和应用程序。
服务器程序负责对socket服务端进行封装,并在请求到来时,对请求的各种数据进行整理。
应用程序则负责具体的逻辑处理。为了方便应用程序的开发,就出现了众多的Web框架,例如:Django、Flask、web.py 等。不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。
WSGI(Web Server Gateway Interface)是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。
常用的WSGI服务器有uWSGI、Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环境用的就是这个模块来做服务器。

浙公网安备 33010602011771号