某大佬仿flask写的web框架

web_frame.py

from werkzeug.local import LocalStack, LocalProxy

def get_request_context():
return request_context_stack.top request_context_stack = LocalStack()
request = LocalProxy(get_request_context) class APP(object): def __init__(self):
self.route_map = {}
self.before_request_functions = []
self.after_request_functions = [] def __call__(self, environ, start_response):
return self.wsgi_app(environ, start_response) def route(self, url):
def wrapper(func):
self.route_map[url] = func
return func
return wrapper def before_request(self, func):
def wrapper(*args, **kwargs):
self.before_request_functions.append(func)
return func
return wrapper() def after_request(self, func):
def wrapper(*args, **kwargs):
self.after_request_functions.append(func)
return func
return wrapper() def preprocess_request(self):
for func in self.before_request_functions:
func() def process_response(self):
for func in self.after_request_functions:
func() def wsgi_app(self, environ, start_response):
request_context_stack.push(environ)
url = environ['PATH_INFO']
func = self.route_map.get(url)
if not func:
start_response('404 NOT FOUND', [('Content-type', 'text/plain')])
return ['Page dose not exists!']
self.preprocess_request()
ret = func()
self.process_response()
start_response('200 OK', [('Content-Type', 'text/html')])
return ret def run(self, host='0.0.0.0', port=8888):
from werkzeug.serving import run_simple
run_simple(host, port, self)

app.py

import json
from web_frame import APP
from web_frame import request app = APP() @app.before_request
def test_before_request_1():
print('this is test_before_request_1, ---------------------') @app.before_request
def test_before_request_2():
print('this is test_before_request_2, ---------------------') @app.after_request
def test_after_request_1():
print('this is after_before_request_1, ---------------------') @app.after_request
def test_after_request_2():
print('this is after_before_request_2, ---------------------') @app.route('/a')
def a():
ret = {
'error_code': '',
'msg': 'success',
'data': 'this is a'
}
return json.dumps(ret) @app.route('/b')
def b():
print(request)
ret = {
'error_code': '',
'msg': 'success',
'data': 'this is b'
}
return json.dumps(ret) if __name__ == '__main__':
app.run()

对理解flask的请求流程有一定帮助

仿flask写的web框架的更多相关文章

  1. 读《架构探险——从零开始写Java Web框架》

    内容提要 <架构探险--从零开始写Java Web框架>首先从一个简单的 Web 应用开始,让读者学会如何使用 IDEA.Maven.Git 等开发工具搭建 Java Web 应用:接着通 ...

  2. 【EatBook】-NO.3.EatBook.3.JavaArchitecture.2.001-《架构探险:从零开始写Java Web框架》-

    1.0.0 Summary Tittle:[EatBook]-NO.3.EatBook.3.JavaArchitecture.2.001-<架构探险:从零开始写Java Web框架>- S ...

  3. 【Flask】微型web框架flask大概介绍

    Flask Flask是一个基于python的,微型web框架.之所以被称为微型是因为其核心非常简单,同时具有很强的扩展能力.它几乎不给使用者做任何技术决定. 安装flask时应该注意其必须的几个支持 ...

  4. 从零写Java Web框架——实现Ioc依赖注入

    大概思路 通过读取配置文件,获取框架要加载的包路径:base-package,类似于 Spring 配置文件中的: <context:component-scan base-package=&q ...

  5. 《架构探险——从零开始写Java Web框架》这书不错,能看懂的入门书

    这书适合我. 哈哈,结合 以前的知识点,勉强能看懂. 讲得细,还可以参照着弄出来. 希望能坚持 完成啦... 原来,JSTL就类似于DJANGO中的模板. 而servlet类中的res,req,玩了D ...

  6. 测试Flask+PYTHON的WEB框架

    参数URL: http://blog.csdn.net/qwiwuqo/article/details/8970621 安装flask之前,你必须要先安装python和easy_install. 安装 ...

  7. 从零写Java Web框架——请求的处理DispatcherServlet

    大概思路 继承 HttpServlet,实现 DispatcherServlet,拦截所有请求: DispatchServlet 重写 init()方法,负责初始化框架: 重写 service()方法 ...

  8. 架构探险——从零开始写Java Web框架》第二章照作

    沉下来慢慢看实现了. 越来越觉得可以和DJANGO作对比. package org.smart4j.chapter2.model; /** * Created by sahara on 2016/3/ ...

  9. 自己动手写web框架----2

    在上一节,我们自己写的web框架,只能运行显示一个HelloWorld.现在我们对其进行一次加工,让他至少能运行一个登陆程序. 首先看login.jsp <%@ page contentType ...

随机推荐

  1. VS2010提示error TRK0002: Failed to execute command

    转自VC错误:http://www.vcerror.com/?p=277 问题描述: windows8自动更新Microsoft .NET Framework 3.5和4.5.1安全更新程序,今天用V ...

  2. [MAC]配置Jenkins 开机自启动

    如果是将jenkins.war放在tomcat中运行的, 则可以配置开机启动tomcat,脚本如下: XXX表示是你安装Tomcat所在目录 #启动tomcat cd XXX/Tomcat8/bin ...

  3. 安装php时,configure: error: xml2-config not found. Please check your libxml2 installation

    参考文章:http://blog.csdn.net/anljf/article/details/6981247 安装php时的报错configure: error: xml2-config not f ...

  4. 配送单MYSQL ,一点都不机智

    这是配送单制作,后面修改了下表 . 写的太乱. 不过也不想去修改了. 放在这里了.反正还能用. 不然就坑爹了. 以后写好一点. 这都是些神马, 太难受了. /* 配送单制作,缺少商品规格,以及库存查询 ...

  5. git使用记录四:.git分析

    git使用记录四: .git 查看.git 目录下的文件 soaeon@DESKTOP-FUJJTHR MINGW64 /f/gitstudy/.git (GIT_DIR!) $ ls -al tot ...

  6. nginx 设置http访问ftp目录内文件

    设置 nginx “403 Forbidden” 错误的原因及解决办法 原文链接 https://www.cnblogs.com/chenzc/p/4461130.html nginx 的 403 F ...

  7. 第6章 RPC之道

    6.1 认识RPC 分布式.微服务的架构思维中都不能缺少 RPC 的影子 RPC(Remote Procedure Call)远程过程调用.通过网络在跨进程的两台服务器之间传输信息,我们使用的时候不用 ...

  8. 解决:python安装mysqldb模块报 EnvironmentError: mysql_config not found

    最近学习python操作mysql需要安装mysqldb模块 出现EnvironmentError: mysql_config not found 经网上查看,需要安装mysql客户端开发库libmy ...

  9. springCloud的使用03-----服务消费者(feign)

    1 创建springboot项目,引入jar依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=& ...

  10. YARN学习笔记

    分布式资源调度框架 Yet Another Resource Negotiator YARN 不同框架使用相同的系统资源 YARN的核心组件(架构) ResourceManager RM 整个集群同一 ...