当前位置: 首页 > 编程日记 > 正文

python_web框架

一、web框架

web框架:

  1. 自己完成socket的web框架:如,Tornado等
  2. 由WSGI完成socket的web框架:如,Django、flash等

两种实现过程:

第二种WSGI方式的,由于自带socket所以可直接写后端代码。

python标准库提供的独立WSGI服务器称为wsgiref,其他的一些接口格式:

'cgi': CGIServer,
'flup': FlupFCGIServer,
'wsgiref': WSGIRefServer,
'waitress': WaitressServer,
'cherrypy': CherryPyServer,
'paste': PasteServer,
'fapws3': FapwsServer,
'tornado': TornadoServer,
'gae': AppEngineServer,
'twisted': TwistedServer,
'diesel': DieselServer,
'meinheld': MeinheldServer,
'gunicorn': GunicornServer,
'eventlet': EventletServer,
'gevent': GeventServer,
'geventSocketIO':GeventSocketIOServer,
'rocket': RocketServer,
'bjoern' : BjoernServer,
'auto': AutoServer,

一个WSGI :(web框架最最最基础版:hello word!)

from wsgiref.simple_server import make_serverdef RunServer(environ, start_response):  # web 框架# environ 参数,里面包含了用户请求的所有信息start_response('200 OK',[('Content_Type','text/html')])return ['<h1>Hello,web!</h1>'.encode()]if __name__=='__main__':    # wsgi# 创建socket server对象httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息print('serving http on port 8000')  # 只要有请求进来,执行RunServer函数httpd.serve_forever()   # while循环等待用户请求

二、自定义web框架

from wsgiref.simple_server import make_serverdef RunServer(environ, start_response):  # web 框架# environ 参数,里面包含了用户请求的所有信息start_response('200 OK',[('Content_Type','text/html')])url=environ['PATH_INFO']if url == '/index/':return ['index'.encode()]elif url == '/news/':return ['news'.encode()]else:return ['404'.encode()]if __name__=='__main__':    # wsgi# 创建socket server对象httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数httpd.serve_forever()   # while循环等待用户请求
自定义1号
from wsgiref.simple_server import make_serverdef f1():return ['<h1>F1</h1>'.encode()]def f2():return ['<h1>F2</h1>'.encode()]
# 定义的规则
routers={'/index/':f1(),'/news/':f2()
}
def RunServer(environ, start_response):  # web 框架# environ 参数,里面包含了用户请求的所有信息start_response('200 OK',[('Content_Type','text/html')])url=environ['PATH_INFO']if url in routers.keys():func_name = routers[url]return func_nameelse:return ['<h1>404</h1>'.encode()]if __name__=='__main__':    # wsgi# 创建socket server对象httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数httpd.serve_forever()   # while循环等待用户请求
自定义2号
from wsgiref.simple_server import make_serverdef f1():          # t1.html可以改为t1.tpl,两种写法,tpl=templatef=open('D:/1.pycharm/day2019_03_06/templates/t1.html', 'rb')  # 注意这里是以二进制的形式读出data=f.read()f.close()return [data,]def f2():return ['F2'.encode()]routers={'/index/': f1(),'/news/': f2()
}
def RunServer(environ, start_response):  # web 框架start_response('200 OK',[('Content_Type','text/html')])url=environ['PATH_INFO']if url in routers.keys():func_name = routers[url]return func_name     # python3注意这里不能写为函数,返回的直接是这个值else:return ['<h1>404</h1>'.encode()]if __name__=='__main__':    # wsgi# 创建socket server对象httpd = make_server('', 9000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息print('serving http on port 9000..')  # 只要有请求进来,执行RunServer函数httpd.serve_forever()   # while循环等待用户请求
自定义3号
注意:在复制代码测试时,打开文件的路径记得修改
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Hello Word</title>
</head>
<body>
<div sytle="color:red;"><h1>我是一只小鸭子啦啦啦啦。。</h1></div><hr/><input type="text" value="请输入文字" /><input type="button" value="提交"/>
</body>
</html>
自定义3号所要的HTML代码

 三、jinja2

jinja2是一个模板系统,它提供了特殊的语法就能使用它进行语言的渲染

在jinja2中,存在的三种语法:

  1. 控制结构{% %}
  2. 变量取值{{ }}
  3. 注释(# #)

例:jinja2对HTML的处理称为:模板引擎进行的模板渲染

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>我是女生生</title>
</head>
<body><h1>hello</h1><hr/><h1>{{name}}</h1><ul>{%for item in user_list%}<li>{{item}}</li>{%endfor%}</ul>
</body>
</html>
XXOO.html

渲染: 相互整合

from wsgiref.simple_server import make_server
from jinja2 import Template
def f1():return ['<h1>ok</h2>'.encode()]def f2():f=open('D:/1.pycharm/day2019_03_06/jinjia_222/XXOO.html', 'rb')result = f.read()result = result.decode()template = Template(result)# jinja2 渲染:接收值,进行特特殊的替换data = template.render(name='Presely', user_list = ['oo','xx'] )return [data.encode()]# 定义规则
routers={'/index/': f1(),'/news/': f2()
}
def RunServer(environ, start_response):  # web 框架start_response('200 OK',[('Content_Type','text/html')])url=environ['PATH_INFO']if url in routers.keys():func_name = routers[url]return func_name     # 注意这里不能写为函数,返回的直接是这个值else:return ['404'.encode()]if __name__=='__main__':    # wsgi# 创建socket server对象httpd = make_server('', 8000,RunServer)   # make_server 封装用户信息传给 environ 参数,里面包含了请求的所有信息print('serving http on port 8000..')  # 只要有请求进来,执行RunServer函数httpd.serve_forever()   # while循环等待用户请求
渲染

有关jinja2:https://www.cnblogs.com/dachenzi/p/8242713.html

四、web框架之MVC/MTV

本质上两个所指的框架是一个样的;

Django所用模式就是MTV模式,但需要额外的定义url映射关系

转载于:https://www.cnblogs.com/Vera-y/p/10500272.html

相关文章:

g-gdb 调试多线程

代码调试工具gdb是一个能够让我们在工作中高效排查代码异常根源的利器。 在此将gdb针对多线程的调试方式做一个笔记&#xff0c;也方便后续回顾以及分享大家。 本文采用的是一个简单的多线程代码示例&#xff0c;同时调试是在mac上进行的 mac安装gdb brew install gdb即可 基…

php数据库html文本,关于php,mysql,html的数字分页和文本_php

请勿盗版&#xff0c;转载请加上出处http://blog.csdn.net/yanlintao1请勿盗版&#xff0c;转载请加上出处http://blog.csdn.net/yanlintao1首先进行样式展示希望对大家有所帮助&#xff0c;也希望大家给出意见和建议&#xff1a;第一种&#xff1a;数字分页第二种&#xff1a;…

WinDbg加载不同版本CLR

WinDbg调试.net2.0和.net4.0程序有所不同&#xff0c;因为.net4.0使用新版本的CLR。例如&#xff1a; mscoree.dll 变为 mscoree.dll 和 mscoreei.dll&#xff0c; mscorwks.dll 变为 clr.dll&#xff0c; mscorjit.dll 变为 clrjit.dll。 因此&#xff0c;在.net2.0加载mscorj…

交换机***工具——Yersinia

Yersinia是国外一款专门针对交换机执行第二层***的***工具。目前的版本是0.7.1。目前支持的操作系统及版本号如表1所示。表1 Yerdinia支持的操作系统操作系统名称版本号OpenBSD3.4 (pcap库版本至少0.7.2以上)Linux2.4.x和2.6.xSolaris5.8 64bits SPARCMac OSX10.4 Tiger (Intel…

Rocksdb 写流程,读流程,WAL文件,MANIFEST文件,ColumnFamily,Memtable,SST文件原理详解

文章目录前言Rocksdb写流程图WAL 原理分析概述文件格式查看WAL的工具创建WAL清理WALMANIFEST原理分析概述查看MANIFEST的工具创建 及 清除 MANIFEST文件内容CcolumnFamily 详解概述API介绍核心数据结构创建以及删除MEMTABLE 实现概述实现Rocksdb写入逻辑概述实现总结关于写的一…

react 入门

首先安装node.js环境 下载地址 https://nodejs.org/en/download/检查安装版本 进入命令行npm -v~~3. 安装react命令环境 npm install - g react-native-cli ~~~ 初始化项目 FirstAppreact-native init FirstApp 转载于:https://www.cnblogs.com/liu-ya/p/10511537.html

将字符串打乱输出

将字符串打乱输出 Dim i,mm,Str,StrPosition,NewStrStr  "1234567890"For i1 To Len(Str)    StrPosition  GetRandomMath(1,Len(Replace(Str,mm,"")))    Str  Replace(Str,mm,"")    mm  Mid(str,StrPosition,1)   …

php帝国系统调出图片内空,帝国CMS图集字段的大图,小图,说明的调用方法

本文实例讲述了帝国CMS图集字段的大图,小图,说明的调用方法。分享给大家供大家参考。具体方法如下&#xff1a;复制代码代码如下:$arr array();$arr $navinfor[morepic];$newarr explode(egetzy(rn),$arr);$count count(explode(egetzy(rn),$navinfor[morepic]));//图集的图…

static和global的区别

1.global在整个页面起作用。2.static只在function和class内起作用。global和$GLOBALS使用基本相同&#xff0c;但在实际开发中大不相同。global在函数产生一个指向函数外部变量的别名变量&#xff0c;而不是真正的函数外部变量&#xff0c;一但改变了别名变量的指向地址&#x…

vue 之 nextTick 与$nextTick

VUE中Vue.nextTick()和this.$nextTick()怎么使用&#xff1f; 官方文档是这样解释的&#xff1a; 在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考&#xff…

Linux创建线程时 内存分配的那些事

文章目录问题描述问题分析针对问题1 的猜测:针对问题2 的猜测:原理追踪总结问题描述 事情开始于一段内存问题&#xff0c;通过gperf工具抓取进程运行过程中的内存占用情况。 分析结果时发现一个有趣的事情&#xff0c;top看到的实际物理内存只有几兆&#xff0c;但是pprof统计…

mysql plsql循环语句吗,Oracle PLSQL 在游标中用while循环实例程序

Oracle PLSQL 在游标中用while循环实例程序Oracle PLSQL 在游标中用while循环实例程序Oracle PLSQL 在游标中用while循环实例程序declarecursor emp_cur is select * from emp;v_emp emp%rowType;beginopen emp_cur;while emp_cur%notfound --while肯定要跟loop一起用的 且是控…

【原创】Linux环境下的图形系统和AMD R600显卡编程(11)——R600指令集

1 低级着色语言tgsi OpenGL程序使用GLSL语言对可编程图形处理器进行编程&#xff0c;GLSL语言&#xff08;以下高级着色语言就是指GLSL&#xff09;是语法类似C的高级语言&#xff0c;在GLSL规范中&#xff0c;GLSL语言被先翻译成教低级的类汇编语言&#xff0c;然后被翻译成硬…

VBScript中InStr函数的用法

InStr([start, ]str1, str2[, compare]) [用途]&#xff1a;返回str2在str1中的位置。匹配成功时&#xff0c;返回值最小值为1&#xff0c;未匹配到时返回0。 [参数说明]&#xff1a; start:在str1中开始匹配的位置&#xff0c;1表示从头开始&#xff0c;不能为0或更小值。 可选…

洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)

题面 传送门 题解 题目转化一下就是所有点都在直线\(AxBy-C0\)的同一侧&#xff0c;也就可以看做所有点代入\(AxBy-C\)之后的值符号相同&#xff0c;我们只要维护每一个点代入直线之后的最大值和最小值&#xff0c;看看每条直线的最大最小值符号是否相同就好了 以最大值为例&am…

skiplist跳表的 实现

文章目录前言跳表结构时间复杂度空间复杂度高效的动态插入和删除跳表索引的动态更新总结详细实现前言 rocksdb 的memtable中默认使用跳表数据结构对有序数据进行的管理&#xff0c;为什么呢&#xff1f; 同时redis 也用跳表作为管理自己有序集合的数据结构&#xff0c;为什么…

php的反射作用是什么意思,php反射的作用是什么

反射是在PHP运行状态中&#xff0c;扩展分析PHP程序&#xff0c;导出或提取出关于类、方法、属性、参数等的详细信息&#xff0c;包括注释。这种动态获取的信息以及动态调用对象的方法的功能称为反射API。反射是操纵面向对象范型中元模型的API&#xff0c;其功能十分强大&#…

《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集

《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集 原文:《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集用Excel2013连接和浏览OLAP多维数据集 posted on 2014-12-02 08:58 NET未来之路 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/lonelyxmas/p/413…

mac 拷贝文件时报错 8060 解决方案

解决如下&#xff1a; 即某文件夹下出现多重子目录&#xff0c;级数很多&#xff0c;删除多余的子文件夹即可。 至于如何产生的&#xff0c;有人说是xcode升级导致&#xff0c;不过没有见证 。我的不属于这类情况的。 &#xff08;参见&#xff1a;http://macosx.com/forums/ma…

C#连接数据库

VScode 配置C#环境 https://blog.csdn.net/qq_40346899/article/details/80955788VScode 配置C#开发环境 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;using System.Data; using System.Data.SqlCli…

C++ 中emplace_back和push_back差异

前言 最近看rocskdb源码&#xff0c;发现了大量的设计模式和C高级特性&#xff0c;特此补充一下&#xff0c;巩固基础。 问题描述 其中关于动态数组的元素添加&#xff0c;代码中基本将push_back抛弃掉了&#xff0c;全部替换为emplace_back进行元素的添加。 看了一下官网描…

[51单片机学习笔记ONE]-----LED灯的多种使用方法

一.交替闪烁8个LED灯&#xff0c;时间间隔为1s 1 /******************************************************2 实验名称&#xff1a; 交替闪烁8个LED灯,时间间隔1s3 实验时间&#xff1a; 2014年12月2日4 ******************************************************/…

php 伪协议 lfi,php://伪协议(I/O)总能给你惊喜——Bugku CTF-welcome to bugkuctf

今天一大早BugkuCTF 的welcome to bugkuctf 就给了我一发暴击&#xff1a;完全不会啊。。。光看源码就发现不知道怎么处理了&#xff0c;于是转向writeup求助。结果发现这是一道非常有营养的题目&#xff0c;赶紧记录一下。题目链接&#xff1a;http://123.206.87.240:8006/tes…

Pascal's Triangle

帕斯卡三角形&#xff0c;主要考察vector的用法。 vector<vector<int> > generate(int numRows){vector<vector<int> > result;vector<int> tmp;result.clear();tmp.clear();int i,j;if(numRows 0)return result;else if(numRows 1){tmp.push_…

SpringBoot请求转发与重定向

但是可能由于B网址相对于A网址过于复杂,这样搜索引擎就会觉得网址A对用户更加友好,因而在重定向之后任然显示旧的网址A,但是显示网址B的内容。在平常使用手机的过程当中,有时候会发现网页上会有浮动的窗口,或者访问的页面不是正常的页面,这就可能是运营商通过某种方式篡改了用户正常访问的页面。重定向,是指在Nginx中,重定向是指通过修改URL地址,将客户端的请求重定向到另一个URL地址的过程,Nginx中实现重定向的方式有多种,比如使用rewrite模块、return指令等。使用场景:在返回视图的前面加上。

SSO 单点登录和 OAuth2.0 有何区别?

此方法的缺点是它依赖于浏览器和会话状态,对于分布式或者微服务系统而言,可能需要在服务端做会话共享,但是服务端会话共享效率比较低,这不是一个好的方案。在单点登录的上下文中,OAuth 可以用作一个中介,用户在一个“授权服务器”上登录,并获得一个访问令牌,该令牌可以用于访问其他“资源服务器”上的资源。首先,SSO 主要关注用户在多个应用程序和服务之间的无缝切换和保持登录状态的问题。这种方法通过将登录认证和业务系统分离,使用独立的登录中心,实现了在登录中心登录后,所有相关的业务系统都能免登录访问资源。

【转】linux服务器性能查看

转载自https://blog.csdn.net/achenyuan/article/details/78974729 1.1 cpu性能查看 1、查看物理cpu个数&#xff1a; cat /proc/cpuinfo |grep "physical id"|sort|uniq|wc -l 2、查看每个物理cpu中的core个数&#xff1a; cat /proc/cpuinfo |grep "cpu cores…

Rocksdb 内存“不释放”问题 分析

文章目录问题场景描述问题复现编写随机写 测试工具使用工具抓取内存分配过程源码分析memtable逻辑table_cache逻辑总结整体的IO场景到底层的源码分析过程如上导图&#xff0c;接下来将详细阐述具体的过程。问题场景描述 我们的rocksdb作为单机存储引擎&#xff0c;跑在用分布式…

GitHub上整理的一些工具【转载】

技术站点Hacker News&#xff1a;非常棒的针对编程的链接聚合网站Programming reddit&#xff1a;同上MSDN&#xff1a;微软相关的官方技术集中地&#xff0c;主要是文档类infoq&#xff1a;企业级应用&#xff0c;关注软件开发领域OSChina&#xff1a;开源技术社区&#xff0c…

show在php,show.php

我的留言板function dodel(id){if(confirm("确定要删除么&#xff1f;")){window.location del.php?idid;}}我的留言板添加留言查看留言查看留言留言标题留言人留言内容IP地址留言时间操作// 获取留言信息&#xff0c;解析后输出到表格中// 1.从留言liuyan.txt中获取…