python web编程(一): web流程,手写一个简单的web框架

# -*- coding: utf-8 -*-__author__ = ‘xzq‘

‘‘‘1. HTTP:       特点: 1>. 请求/响应模式            2>. 无状态协议, Client每一次访问都会被Server当作是第一次访问 (Cookie, Session)

       Request:                     POST /index.html HTTP/1.1     # 请求方法  url  协议版本             Header: Host: www.bilibili.com        # 请求域名  --> DNS                     Connection:  keep-alive       # 链接方式                     User-Agent:  浏览器类型                     Accept: text/html             # 能接收的文件类型                     Accept-Encoding: gzip         # 能接收的压缩方式                     Accept-Charset: GB2312        # 能接收的编码方式                     Cookie: 再次访问的cookie码                     Content-Type: text/html       # 请求体的数据类型                     Content-Length: 13            # 请求体的长度

             Body:   name=xzq&age=18               # 请求体, GET没有会把数据之间放到URL ; POST会把Body数据中的中文采用URL编码到URL上

       Response:                     HTTP/1.1 200 OK               # 协议版本 状态码             Header: Server: Web服务器版本                     Content-Type: text/html       # 响应体文件类型                     Content-Length: 724           # 响应体长度                     Set-Cookie: 发给客户端的Cookie                     Date: 响应时间

             Body:   # html 文件, 图片, 音乐, 视频, JS, CSS 分别发送

             响应码:   2xx   成功:            200                      3xx   重定向:          302 永久重定向, 301 暂时重定向, 304 请求内容没变化,不重发                      4xx   客户端错误        404 找不到, 401 未认证, 403 访问被禁                      5xx   服务端错误        500 服务器出错‘‘‘  # HTTP

‘‘‘Web 流程:        Client  <--->  Web服务器: HTTP解析软件 <-> [WSGI] <-> Web app (服务器逻辑, 即Web框架)

Web app 组成:  MVC, MTV              控制器 Controller:        路由分发            数据库 Model:             操作数据库            视图函数 ViewFunction:    处理逻辑         ___            模板    Template:        动态生成html     ___|

‘‘‘  # Web服务器, Web框架

from wsgiref.simple_server import make_serverimport time# 视图函数def web():    with open(‘index1.html‘,‘rb‘) as f:        data = f.read()    return [data]

def xzq():    with open(‘index2.html‘,‘rb‘) as f:        data = f.read()    return [data]

def current_time():    with open(‘index3.html‘,‘rb‘) as f:        data = f.read()    now = time.ctime(time.time())    data = str(data,‘utf8‘).replace("{{time}}",str(now))    return [data.encode(‘utf8‘)]

# 路由分发def router():    url_pattern = (        (‘/web‘,web),        (‘/xzq‘,xzq),        (‘/current‘,current_time)    )    return url_pattern

# appdef application(environ,start_response):    path = environ[‘PATH_INFO‘]       # 相对路由    print(path)    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])

    url_pattern = router()    func = None    # 路由分发: 反射    for item in url_pattern:        if item[0] == path:            func = item[1]            break    if func:        return func()    else:        return [b‘<h1>4o4 Not Found!</h1>‘]

if __name__ == ‘__main__‘:    httpd = make_server(‘127.0.0.1‘,8000,application)    print(‘Serving HTTP on port 8000..‘)   # 阻塞直到有连接    httpd.serve_forever()

原文地址:https://www.cnblogs.com/lancelotxly/p/10843633.html

时间: 2024-08-24 14:24:28

python web编程(一): web流程,手写一个简单的web框架的相关文章

如何用PHP/MySQL为 iOS App 写一个简单的web服务器(译) PART1

原文:http://www.raywenderlich.com/2941/how-to-write-a-simple-phpmysql-web-service-for-an-ios-app 作为一个iPhone/iPad开发者,能够自己写一个简单的web服务器将是很有用的. 例如,你可能希望在软件启动时显示一些来自服务器的更新,或者在服务器端保存一些用户数据.除了你的想象力,没有什么能限制你了. 在第一篇中,我们将会一步一步的建立一个web服务器,基于promo code system(促销码系

利用SpringBoot+Logback手写一个简单的链路追踪

目录 一.实现原理 二.代码实战 三.测试 最近线上排查问题时候,发现请求太多导致日志错综复杂,没办法把用户在一次或多次请求的日志关联在一起,所以就利用SpringBoot+Logback手写了一个简单的链路追踪,下面详细介绍下. 一.实现原理 Spring Boot默认使用LogBack日志系统,并且已经引入了相关的jar包,所以我们无需任何配置便可以使用LogBack打印日志. MDC(Mapped Diagnostic Context,映射调试上下文)是log4j和logback提供的一种

【Java学习笔记】如何写一个简单的Web Service

本Guide利用Eclipse以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程: 1.系统条件: Eclipse Java EE IDE for Web Developers Java SE 6 Windows XP 2.基本环境搭建: 1)Java SE6 JDK的安装:下载Java SE6 JDK,双击,安装默认选项进行安装即可. 2)Eclipse的安装与配置: 安装时直接解压.     配置处有两点,Window>Preferences>Jav

自己动手写一个简单的MVC框架(第二版)

一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.Web.Routing.dll中,有一个最重要的类叫做UrlRoutingModule,它是一个实现了IHttpModule接口的类,在请求处理管道中专门针对ASP.NET MVC请求进行处理.首先,我们要了解一下UrlRoutingModule是如何起作用的. (1)IIS网站的配置可以分为两个块:

手写一个简单的Http服务器

什么是Http协议? Http协议: 对浏览器客户端 和 服务器端 之间数据传输的格式规范 Http是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出.HTTP协议的主要特点可概括如下:1.支持客户/服务器模式.2.简单快速:客

手写一个模块化的 TCP 服务端客户端

前面的博客 基于 socket 手写一个 TCP 服务端及客户端 写过一个简单的 TCP 服务端客户端,没有对代码结构进行任何设计,仅仅是实现了相关功能,用于加深对 socket 编程的认识. 这次我们对整个代码结构进行一下优化,使其模块化,易扩展,成为一个简单意义上的“框架”. 对于 Socket 编程这类所需知识偏底层的情况(OS 协议栈的运作机制,TCP 协议的理解,多线程的理解,BIO/NIO 的理解,阻塞函数的运作原理甚至是更底层处理器的中断.网卡等外设与内核的交互.核心态与内核态的切

Python学习 - 编写一个简单的web框架(二)

在上一篇日志中已经讨论和实现了根据url执行相应应用,在我阅读了bottle.py官方文档后,按照bottle的设计重写一遍,主要借鉴大牛们的设计思想. 一个bottle.py的简单实例 来看看bottle是如何使用的,代码来自http://www.bottlepy.org/docs/0.12/index.html: from bottle import route, run, template @route('/hello/<name>') def index(name): return t

一个简单的web服务器例子

一个简单的web容器小例子,功能十分简单,只能访问静态资源,对于新手来说还是有一定的意义.主要分三个类 1.server类:主要功能开启socketServer,阻塞server,接收socket访问,解析request,创建request,作出响应 public class TestServer1 { private boolean shutdown = false; // web目录webroot public static final String WEB_ROOT = System.ge

django创建一个简单的web站点

一.新建project 使用Pycharm,File->New Project-,选择Django,给project命名 (project不能用test命名) 新建的project目录如下: settings.py:工程相关的配置 urls.py:网站访问入口,对应到views wigs.py:部署相关 manage.py:执行命令 templates:html等静态文件 备注:新建工程后需要安装django的lib包,然后验证django是否安装成功 >>> import dja