1Python全栈之路系列Web框架介绍

Python全栈之路系列之Web框架介绍


所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来

Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理


Python的Web框架分成了两类,

  1. 即包含socket也包含业务逻辑处理的(tornado)

  2. 不包含socket(框架本身通过第三方模块实现socket)只包含业务逻辑处理(django,Flask)

WSGI的全称是Web Server Gateway Interface,翻译过来就是Web服务器网关接口。具体的来说,WSGI是一个规范,定义了Web服务器如何与Python应用程序进行交互,使得使用Python写的Web应用程序可以和Web服务器对接起来。WSGI一开始是在PEP-0333中定义的,最新版本是在Python的PEP-3333定义的。

wKioL1j-pBDRP81WAAEUN6DYSvI463.png

下面实例的代码中RunServer()函数就是符合WSGI标准的一个HTTP处理函数,它接收两个参数:

  1. environ:一个包含所有HTTP请求信息的dict对象;

  2. start_response:一个发送HTTP响应的函数;

通过wsgiref模块实现一个自定义的web框架

代码的大概逻辑就是: 定义了两个函数index()manage(),如果用户访问的URL是127.0.0.1:8000/index就返回<h1>/index</h1>,如果用户访问的是127.0.0.1:8000/manage就返回/manage,如果访问其他页面就返回404

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/python2
# _*_coding:utf-8 _*_
from wsgiref.simple_server import make_server
def index(arg):
    # 返回一个含有html代码的字符串
    return "<h1>%s</h1>" %(arg)
     
def manage(arg):
    return arg
     
URLS = {
    "/index": index,
    "/manage": manage,
}
def RunServer(environ, start_response):
    start_response('200 OK', [('Content-Type''text/html')])
    url = environ['PATH_INFO']
    if url in URLS.keys():
        func_name = URLS[url]
        ret = func_name(url)
    else:
        ret = "404"
    return ret
     
if __name__ == '__main__':
    httpd = make_server('', 8000, RunServer)
    httpd.serve_forever()

通过本机的curl命令去访问测试

1
2
3
4
5
6
ansheng@Darker:~$ curl 127.0.0.1:8000/index
<h1>/index</h1>
ansheng@Darker:~$ curl 127.0.0.1:8000/asdasd
404
ansheng@Darker:~$ curl 127.0.0.1:8000/manage
/manage

无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body,复杂的Web应用程序,光靠一个WSGI函数来处理还是太底层了,我们需要在WSGI之上再抽象出Web框架,进一步简化Web开发。

MVC and MTV

MVC模式就是架构模式的一种,MVC模式的目的是实作一种动态的程式设计,使后续对程式的修改和扩充功能简化,并且使程式某一部分的重复利用成为可能。除此之外,此模式通过对复杂度的简化,使程式结构更加直觉。

wKiom1j5tdiRc3VPAAAX7GQbjnA071.png-wh_50

软体系统通过对自身基本部分分离的同时也赋予了各个基本部分应有的功能。专业人员可以通过自身的专长分组:

  1. 控制器Controller - 负责转发请求,对请求进行处理;

  2. 视图View - 介面设计人员进行图形介面设计;

  3. 模型Model - 程式设计师编写程式应有的功能(实作演算法等等)、资料库专家进行资料管理和资料库设计(可以实作具体的功能);

MVC中的M是代表MODLE层,V代表VIEW层,C代表Contrl层.
MTV中的M是代表MODLE层,T代表Template(模板层),V代表VIEW层.










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1918242,如需转载请自行联系原作者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/279869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

『 再看.NET7』数值类型

在C#中&#xff0c;有int16&#xff0c;用short来定义&#xff1b;有int32&#xff0c;用int定义&#xff1b;用int64&#xff0c;用long来定义。在.NET7中&#xff0c;添加了int128&#xff0c;和unint128&#xff0c;位数更大的整型。var i16 short.MaxValue; Console.Write…

获取帮助命令

whatis 基于数据库的查找,查找内容比较慢 优点&#xff1a;查找速度快 缺点&#xff1a;没有实时性 [rootlocalhost ~]# whatis ls ls (1) - list directory contents ls (1p) - list directory contents 数据库文件 Centos6:/…

笔记本电脑升级固态硬盘好吗_如何升级笔记本电脑硬盘

笔记本电脑升级固态硬盘好吗Upgrading your laptop’s hard drive is a great way to get some extra life out of an old machine (or resurrect a dead one). Read on as we walk you through the prep work, the installation, and the followup. 升级笔记本电脑的硬盘驱动器…

购物单

小明刚刚找到工作&#xff0c;老板人很好&#xff0c;只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦&#xff0c;但又不好推辞。 这不&#xff0c;XX大促销又来了&#xff01;老板夫人开出了长长的购物单&#xff0c;都是有打折优惠的。 …

Seay源代码审计系统

这是一款基于C#语言开发的一款针对PHP代码安全性审计的系统&#xff0c;主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞。 下载链接 https://pan.baidu.com/s/1V…

dotnet 世界猜测 随机数的小测试

这是一个半技术向的博客&#xff0c;主题来源于我读过的某本书的片段&#xff0c;这是一个稍稍有些前置知识的故事&#xff0c;主题的大概内容就是假定世界存在某个规则序列&#xff0c;通过一代代的探索&#xff0c;可以获取到此序列的内容。本文将模拟此情形&#xff0c;写一…

python 批量修改密码

下午闲来无事&#xff0c;就搞个批量密码修改工具玩玩... #!/usr/bin/env python import paramiko import time ip_list(ip1,ip2) log_fileopen(mpwdok.log,w) log_file1open(mpwderr.log,w) for ip in ip_list: try: s paramiko.Transport((ip, 22)) s.c…

如何在Android Wear上节省电池寿命

If you’re rocking Android on your wrist, there’s a chance you’ve learned to rely on its convenience pretty heavily. And if you’re in that position, then you probably also know how annoying it can be if your watch runs out of juice in the middle of the …

css3 伪类选择器

1.target&#xff1a;表示当前的url片段的元素类型&#xff0c;这个元素必须是E &#xff08;作用类似于选项卡&#xff09; 2.&#xff1a;&#xff1a;before{content&#xff1a;“要添加的内容”} 添加到......之前 3.rgb&#xff08;&#xff09; 颜色 4.rgba&#xf…

城市统计【BFS】

题目大意&#xff1a; 中山市的地图是一个n*n的矩阵&#xff0c;其中标号为1的表示商业区&#xff0c;标号为0的表示居民区。为了考察市内居民区与商业区的距离&#xff0c;并对此作出评估&#xff0c;市长希望你能够编写一个程序完成这一任务。  居民区i到商业区的距离指的是…

使用 DataAnnotations(数据注解)实现通用模型数据校验

.net 跨平台参数校验的意义在实际项目开发中&#xff0c;无论任何方式、任何规模的开发模式&#xff0c;项目中都离不开对接入数据模型参数的合法性校验&#xff0c;目前普片的开发模式基本是前后端分离&#xff0c;当用户在前端页面中输入一些表单数据时&#xff0c;点击提交按…

网线的做法 及 POE的介绍

网线的做法 以太网线采用差分方式传输。所谓差分方式传输&#xff0c;就是发送端在两条信号线上传输幅值相等相位相反的电信号&#xff0c;接收端对接受的两条线信号作减法运算&#xff0c;这样获得幅值翻倍的信号。其抗干扰的原理是&#xff1a;假如两条信号线都受到了同样&am…

unity 使用tile_如何使用Tile从网上查找电话

unity 使用tileTile is a fantastic little gadget that can help you find your lost keys or wallet. However, it can also locate and ring your phone, even if you never buy a single physical Tile. Here’s how to find your lost phone using the Tile app on the we…

你与一份好简历之间的距离

阅读本文大概需要 2.7 分钟。每年年初都是企业的招聘旺季&#xff0c;对应的三四月份绝对跳槽、找工作的好时机&#xff0c;业内经常称呼这两个月为金三银四。实力雄厚的人&#xff0c;那个月找工作问题都不大&#xff0c;但是也会尽量挑选个好时机&#xff0c;能有更多的选择。…

Python 循环删除指定文件夹下所有的.longtian类型文件

# -*- coding: utf-8 -*-import os#遍历文件夹删除文件 def traversing_dir(rootDir):#遍历根目录for root,dirs,files in os.walk(rootDir):for file in files:#文件后缀名extFileos.path.splitext(file)[1]if extFile".longtian":os.remove(os.path.join(root,file…

《ASP.NET Core 6框架揭秘实例》演示[35]:利用Session保留语境

客户端和服务器基于HTTP的消息交换就好比两个完全没有记忆能力的人在交流&#xff0c;每次单一的HTTP事务体现为一次“一问一答”的对话。单一的对话毫无意义&#xff0c;在在同一语境下针对某个主题进行的多次对话才会有结果。会话的目的就是在同一个客户端和服务器之间建立两…

Vincross孙天齐:人机界面的突破将引发科技革命

8月23—27日&#xff0c;世界机器人大会在北京举办&#xff0c;全球各国机器人领域的优秀企业悉数亮相&#xff0c;五花八门的机器人及产业链上下游最新技术均能在这次盛会上找到踪迹&#xff0c;整个会场充满了未来感与时代发展的气息。 大会中智慧城市服务机器人技术与应用专…

如何在Windows上使用64位Web浏览器

Google and Mozilla now offer 64-bit versions of Chrome and Firefox for Windows. Here’s how to find out what version you’re running and how to upgrade. Google和Mozilla现在提供适用于Windows的64位版本的Chrome和Firefox。 这是找出正在运行的版本以及如何升级的方…

立下“去O”Flag的AWS,悄悄修炼了哪些内功?

AWS re:Invent 2018大会上&#xff0c;AWS首席执行执行官Andy Jassy 表示到 2019 年底&#xff0c;亚马逊将全面放弃使用 Oracle 数据库&#xff0c;97&#xff05;的“关键任务数据库”将运行在亚马逊自己的数据库服务上。 如今&#xff0c;2019年已经过去了四分之一&#xff…

static作用:静态变量的生存周期和作用域

首先要理解生存周期与作用域的区别&#xff1a; 生存周期: 变量从定义到销毁的时间范围。存放在全局数据区的变量的生存周期存在于整个程序运行期间&#xff0c;而存放在栈中的数据则随着函数等的作用域结束导致出栈而销毁&#xff0c;除了静态变量之外的局部变量都存放于栈中…