Web框架,自定义一个web框架(简单)

用 Python 写一个简单的Web框架 一、概述 二、从demo_app开始 三、WSGI中的application 四、区分URL 五、重构 1、正则匹配URL 2、DRY 3、抽象出框架 六、参考 \ 一、概述 在Python中,WSGI(Web Server Gateway Interface)定义了Web服务器与Web应用(或Web框架)之间的标准接口。在WSGI的规范下,各种各样的Web服务器和Web框架都可以很好的交互。 由于WSGI的存在,用Python写一个简单的Web框架也变得非常容易。然而,同很多其他的强大软件一样,要实现. 阅读详情

1、什么是框架

在生活中就像我们想到的一样,框架指的我们在做一件事情的时候搭的骨架来完成基础的功能。
例如盖楼,开发商建的毛坯房就是楼的骨架,毛坯房的基础功能就是能住。如果想住的舒服
用户根据自己的需求来摆放物品。例如客厅放沙发,电视。主卧放床和衣柜等等。

例如明星开演唱会,舞台的搭建就是一个骨架,舞台基础的功能就是明星能有地方唱歌跳舞,如果想要气氛,可以在舞台上摆放不同的物品。

程序中的框架和生活中搭建的框架的功能是相同的,框架来完成一些基础的工作,
程序员在此基础上开发实现自己业务功能的代码;
把程序员从繁琐的重复性的代码中解脱出来,提交开发效率;

(1).自定义web框架(不完整版)

import socket
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9999))
server_sk.listen(130)
while True:
    clicent,addrs=server_sk.accept()#接受请求
    content=clicent.recv(1024).decode('utf-8')
    print('接受到了数据')
    print(content)
    #给浏览器发送内容
    clicent.send('HTTP/1.1 200 OK\r\n'.encode('utf-8'))
    clicent.send('\r\n'.encode('utf-8'))
    clicent.send('ok'.encode('utf-8'))
    clicent.close()

1.解决返回给浏览器中文乱码问题:

import socket
server_sk=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_sk.bind(('127.0.0.1',9998))
server_sk.listen(130)#.listen使套接字变为可以被动链接
while True:
    client,addrs=server_sk.accept()
    content=client.recv(1024).decode('utf-8')
    print(content)
    #给浏览器返回消息
    msg='HTTP/1.1 200 OK\r\n'.encode('utf-8')
    **msg1='Content-type:text/html;charset=utf-8\r\n'.encode('utf-8')**
    msg2='\r\n'.encode('utf-8')
    msg3='你好啊浏览器,我来了'.encode('utf-8')
    client.send(msg)
    client.send(msg1)
    client.send(msg2)
    client.send(msg3)
HTML拖动模块 自定义布局 兼容FF IE 带有保存方案,模块块隐藏,模块显示,模块排版,模块风格设置功能 立即下载

相关推荐

Java自定义框架(适合有基础的想学习框架的朋友)

这是基于MVC框架开发的自定义小型框架 适合有基础的想学习框架的朋友 涵盖JSTL JSP JavaBean Servlet JSTL 数据库连接 和通用类(三点水万能通过类) 过滤器(轻松过滤 避免中文乱码问题) 运行地址:http://localhost:8080/epet/ShowBaby.do?id=1

自定义搭建简易web框架

文章目录1. web框架介绍2. HTTP协议3. 自定义框架框架雏形进阶路由优化代码4. wsgiref 模块5. 优化结构6. jinja2模块 1. web框架介绍 我们可以将所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。 2. HTTP协议 而服务端和客户端通信时都需要符合一个统一的规则,就是HTTP协议(超文本传输协议),其是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消

XWenXiang的博客 1759

css3实现的简单翻牌效果

css3实现的简单翻牌效果

web介绍以及自定义框架

1 什么是web? web指的是网络,web应用开发指的是基于网络的应用程序开发。 Web应用开发分为web前端开发和web后端开发。 Web前端开发:我们可以简单的理解为开发一些网页。 Web后端开发:写一些逻辑判断程序。 当用户发出请求给我们写的程序,程序根据用户的请求做出相应的判断,然后返回给客户相应的内容。 2 软件开发架构 两个程序之间通讯的应用大致可以分为两种: 第一种是应用类程序:...

NONUONODAI的博客 1238

Div自定义页面布局

Div自定义页面布局

STM32F4的sct文件理解

原文地址http://blog.sina.com.cn/s/blog_898f36590100ya2l.html ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~...

weixin_34008805的博客 995

一个简单的自定义web框架

只有一个servlet,这个servlet处理所有的*.do; 当有请求来时,根据请求的uri,选择对应的action进行处理; action和uri使用注解来相互映射,中央控制的servlet在启动的时候就扫描classes目录下面的所有class文件,找出带有注解的类,并放入map中,key为uri的值,value为action对象; 需要自定义classloader来加载指定目录下的c

温故而知新 659

RPA实战:手把手教你打造抖音自动养号机器人(含避坑指南)

本文详细介绍了如何利用RPA技术从零构建一个智能化的抖音自动养号机器人。内容涵盖环境准备、核心工具选型、拟人化行为流程设计、代码实现模块拆解,并提供了关键的避坑指南与风控对抗策略,帮助开发者高效、稳定地实现账号自动化运营。

orange的博客 566

自定义一个简单的web框架

from wsgiref.simple_server import make_server def book(request): #视图函数   return [b'<h1> book !!! </h1>']def web(request):   return [b'<h1> web !!! </h1>'] def ro...

weixin_30387799的博客 86

在 Mac OS 上编译 WebRTC 教程

在 Mac OS 上编译 WebRTC 教程

iShare_Carlos的博客 1249

rk3588 LightSensor适配从驱动到应用层

本文详细介绍了在RK3588平台上实现光感驱动的开发流程。主要包括:1) 在设备树中配置I2C5接口挂载光感设备;2) 编写内核驱动代码实现光感数据采集;3) HAL层通过ioctl与驱动交互;4) 在BoardConfig.mk中启用相关宏定义;5) Framework层通过AutomaticBrightnessController实现自动亮度调节算法;6) 应用层可通过监听系统设置获取光感变化并调整屏幕亮度。整个流程涵盖了从底层驱动到上层应用的完整实现方案,重点解决了光感设备注册、数据采集传输和自动亮度

tzj1058756809的博客 450

Python3 自定义一个简单web框架

wsgi: 容器&应用 1.一个简单的wsgi wsgiref容器 def application(environ, start_response): body = 'hello wsgi.' status = '200 OK' he...

chizhi6248的博客 313

基于MATLAB的特征模式分解(FMD)算法详解

本文详细介绍了基于MATLAB的特征模式分解(FMD)算法实现。FMD是一种新型自适应信号分解方法,通过自适应FIR滤波器组和相关峭度优化目标,有效解决传统方法(如EMD、VMD)的模态混叠问题。文章系统阐述了FMD的算法原理、数学模型和实现步骤,包括自适应FIR滤波器设计、相关峭度优化和模态选择机制。与现有方法相比,FMD在旋转机械故障诊断中展现出更强的特征提取能力和噪声鲁棒性。MATLAB实现部分包含核心函数、参数优化和可视化工具,并通过轴承故障等案例验证了算法的有效性。

qq_42212808的博客 193

web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例...

Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单示例 DOCTYPE html> <html lang="en"> <head> &lt...

weixin_33935777的博客 192

一文搞懂电流、电压的有效值 RMS

交流电有正半周、负半周,直接平均可能抵消成 0,但负半周一样会发热。这个交流电如果换成直流电,能产生同样发热功率时,对应的直流电压或电流”,电容耐压通常不能按 220V 选,常见会选 400V 或更高余量。所以做硬件时,220VAC 整流滤波后电容上会接近。电压/电流的有效值,也叫。如果它加在电阻上,发热按。

qq_52293640的博客 454

Coze智能体开发:工作流教程之解析文件概述

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 1794

自定义python框架_python -- 自定义web框架

在学习自定义web框架之前我们对什么是web框架需要有个清晰的认识,本质上说,web框架就是一个socket Server。目前常见的动态网站WEB框架前面有WSGI(eg:Django、Flask...)或者是自己写的SOCKET(Tornado),然后交给URL路由系统处理,然后交给某个函数或某个类,然后在模板(常用jinja2)里拿到模板然后把模板和从数据库取出的数据进行混合组成一个字符串然...

weixin_42501298的博客 253

学Simulink——控制执行场景实例:基于Simulink的智能车辆电子稳定控制(ESC)仿真

本文完成了基于 Simulink 的智能车辆电子稳定控制(ESC),实现了:✅ 构建含轮胎非线性的车辆动力学模型✅ 设计滑模横摆稳定性控制器✅ 实现四轮制动力分配逻辑✅ 验证在双移线低附着场景下的卓越稳定性✅ 为主动安全控制系统开发提供完整范式。

xiaoheshang_123的博客 528

python twisted框架_用Twisted实现一个简单但是完整的Web应用框架

学了一段时间Python,也看了很多的Web开发框架,轻量级、中量级的、重量级的...感觉都不尽如人意,原因有二:1、任何开发者都有自己独特的思路,适应现成的框架是很痛苦的,相比完整但是死板的大框架,我更喜欢灵活的小工具,况且Python开发一个框架并不是想象的那么难2、大部分框架依旧需要依附于独立的Web服务器运行,太麻烦。除了老牌的Twisted和新秀Tornado。在比较了这两个东西之后,我...

weixin_39971138的博客 569

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Web框架

Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。 自定义web框架 import socket#生成socke实例对象sk = socket.socket()#绑定IP和端口sk.bind(("127.0.0.1",8001))#监听sk.listen()#死循环,等待用户链接...

weixin_34376986的博客 92

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

自定义MVC框架简单入门、开发

自定义MVC框架(一)自定义MVC框架MVC简介MVC结构MVC开发自定义MVC工作原理简单计算器案例 自定义MVC框架 MVC简介 什么是MVC ? MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,它是一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码. Model1 jsp+jdbc Mode...

qq_44641053的博客 624

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

自定义web框架

知识内容: 1.web框架综述 2.自定义web框架独立功能实现 3.完整自定义web框架 参考:http://www.cnblogs.com/wupeiqi/articles/5237672.html 本节所有代码:https://github.com/15387062910/web_framework 一、web框架综述 1.什么是web框架 web框架:一组...

weixin_34138056的博客 246

Qat++,轻量级开源C++ Web框架

​Oat++是一个面向C++的现代Web框架 官网地址:https://oatpp.io github地址:https://github.com/oatpp/oatpp Oat++具有如下特性: ●随处运行 Oat++没有任何依赖性,可以很容易地移植到各种支持的平台上(Linux、BSD、MacOS、OpenWRT、Windows)。 ●构建健壮的api 使用Oat++的Simple-API,很容易就能构建出灵活而健壮的High-Level API。 ●高并发 使用Oat++的Async-API,可以在单

草上爬的博客 9845

web框架本质及第一个Django实例

Web框架本质及第一个Django实例 Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。 这样我们就可以自己实现Web框架了。 半成品自定义web框架 import socket sk = socket.socket() sk.bind((...

weixin_30763397的博客 80

web框架:含代码

自定义web框架(不完整版) import socket server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind(('127.0.0.1',9999)) server.listen(128) while True: msg,address=server.accept()...

小小争520 2679
上一篇: web基础介绍
下一篇: 框架---根据不同的路径返回不同的内容--代码--返回具体的HTML文件
Mis相遇
博客等级 码龄8年 87粉丝 90原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值