一 web框架

Web框架(Web framework)是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。这大多数的web框架提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。浏览器和服务器的是基于HTTP协议进行通信的。也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。

二 wsgiref模块

最简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于业务逻辑。因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI:Web Server Gateway Interface。而wsgiref模块就是python基于wsgi协议开发的服务模块。

from wsgiref.simple_server import make_serverdef application(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html')])return [b'<h1>Hello, web!</h1>']httpd = make_server('', 8080, application)print('Serving HTTP on port 8000...')
# 开始监听HTTP请求:
httpd.serve_forever()

三 DIY一个web框架

为了做出一个动态网站,我们需要扩展功能,比如用户访问url的路径是login时提供一个登录页面,路径是index时响应一个首页面。

3.1 启动文件:manage.py


from wsgiref.simple_server import make_server
from views import *
from urls import urlpatternsdef application(environ, start_response):#print("environ",environ)start_response('200 OK', [('Content-Type', 'text/html')])# 获取当前请求路径print("PATH_INFO",environ.get("PATH_INFO"))path=environ.get("PATH_INFO")# 分支func=Nonefor item in urlpatterns:if path == item[0]:func=item[1]breakif not func:ret=notFound(environ)else:ret=func(environ)return [ret]httpd = make_server('', 8080, application)
# 开始监听HTTP请求:
httpd.serve_forever()

3.2 url控制文件:urls.py


from views import *urlpatterns = [("/login", login),("/index", home),
]

3.3 视图文件:views.py


# 视图函数
def home(environ):with open("templates/home.html", "rb") as f:data = f.read()return datadef login(environ):with open("templates/login.html", "rb") as f:data = f.read()return datadef notFound(environ):return  b"<h1>404...</h1>"

3.4 模板文件Templates

login.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="http://127.0.0.1:8800" method="post">用户名 <input type="text" name="user">密码 <input type="text" name="pwd"><input type="submit">
</form>
</body>
</html>

home.html:


<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<h3>This is index!</h3>
</body>
</html>

到这里,pyyuan这个包就是一个web框架,当这个框架的基础上,添加业务功能就很简单了,比如,我们添加一个查看时间的页面,只需要完成两部即可:

(1) 在urls.py中添加:

("/timer", timer),

(2) 在views.py中添加:

def timer(request):import datetimenow=datetime.datetime.now().strftime("%Y-%m-%d")return now.encode()

是不是很简单,有了web框架,你就不用再从创建socket开始一行行码代码了!

转载于:https://www.cnblogs.com/pyedu/p/10289253.html

2、基于wsgiref模块DIY一个web框架相关推荐

  1. asp.net web开发框架_用Python开发一个Web框架

    一.Web框架 首先我们今天要做的事是开发一个Web框架.可能听到这你就会想.是不是很难啊?这东西自己能写出来? 如果你有这种疑惑的话,那就继续看下去吧.相信看完今天的内容你也能写出一个自己的Web框 ...

  2. php7 开发框架,Lin是一套基于php7.2的全新web框架

    Lin/1.0 介绍 Lin是一套基于php7.2的全新web框架,它具有一套全组件化的开发理念,避免了以往web框架可定制性差.扩展开发繁杂.布局耦合度较高等缺点,完美实现了三重分离:应用层.框架层 ...

  3. 转-基于NodeJS的14款Web框架

    基于NodeJS的14款Web框架 2014-10-16 23:28 作者: NodeJSNet 来源: 本站 浏览: 1,399 次阅读 我要评论暂无评论 字号: 大 中 小 摘要: 在几年的时间里 ...

  4. 如何从零开始写一个 web 框架?

    ‍ 作为一线开发 Web 服务的工程师,我用过不少语言的不少框架,尤其近几年轮子层出不穷,每次刚用熟练一个,就有更新.更好的出现了.日常疲于奔命学习新框架,一次次陷入"死循环". ...

  5. Fen - 基于deno的简单Typescript Web框架

    deno 从诞生,到现在有自己的标准库,以及一些第三方库,让我对deno在web的应用有了一定的兴趣, 我知道deno尚未成熟,但是刚好最近心闲下来了,就找点事做做,作为一个前端,我也期待通过这个机会 ...

  6. luci框架-LUA的一个web框架使用

    转自:http://blog.csdn.net/initphp/article/details/17527639 LUCI 这个在百度上搜索除了一篇我的百度文库 luci 的介绍文章之外,前三页都是些 ...

  7. 基于IE内核的一个WEB打印实现方案

    工作需要实现一个基于IE内核的打印方案.本文将对于此方案的进行一个整体解析.由于此方案涉及自己以前未涉及的很多方面,在研究过程中学习了很多,因此在此也是做一次总结. 本文主要分为以下几个部分: (一) ...

  8. pygame为游戏添加背景_万能的Python和Pygame模块构建一个游戏框架

    通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏.这次,我将展示 ...

  9. pip install pygame_使用 Python 和 Pygame 模块构建一个游戏框架!

    这系列的第一篇通过创建一个简单的骰子游戏来探究 Python.现在是来从零制作你自己的游戏的时间. 在我的这系列的第一篇文章 中, 我已经讲解如何使用 Python 创建一个简单的.基于文本的骰子游戏 ...

最新文章

  1. 用开放地址法中的线性探查法解决冲突实现哈希表的运算
  2. 服务器系统由32位的吗,云服务器有Windows32位系统吗
  3. VTK:Filtering之ProgrammableFilter
  4. xcode 不能读取键盘输入的汉字_C++:cin从控制台读取数据时的结束符
  5. 用 JA Transmenu 模块做多级弹出菜单
  6. 改进协议 BIP32-39-44概述
  7. hexo博客添加暗色模式_我如何将暗模式添加到我的网站
  8. double类型最大值_2020重新出发,JAVA入门,数据类型
  9. UVa11988 Broken Keyboard (a.k.a. Beiju Text)
  10. Linux系统多网卡环境下的路由配置
  11. 高并发红包整体设计方案
  12. 自然辩证法(研究生)期末考试题库
  13. c语言有理数字符形式,C语言设计实现抽象数据类型有理数基本操作包括有理数的加法,减法,乘法,除法,以及求有理数的分子,分...
  14. filtering_audio.c/filtering_video.c 解读
  15. OS学习笔记-15(清华大学慕课)处理机调度
  16. 怎样把计算机里的图片快速删除,如何批量删除重复图片 电脑中相同图片批量删除的方法...
  17. 涂鸦智能C/C++面经
  18. android平台下OpenGL ES 3.0给图片添加黑白滤镜
  19. java斗地主发牌代码_java代码实现斗地主发牌功能
  20. 【matlab图像处理】直方图均衡化操作

热门文章

  1. 解决Ajax不能跨域的方法
  2. java数据结构系列——排列(2):有序阵列
  3. Factorial Trailing Zeroes 172
  4. 链方法[C# 基础知识系列]专题三:如何用委托包装多个方法——委托链
  5. Webpack不生成index.html
  6. mysql 全文索引
  7. 刚刚,OpenStack 第 19 个版本来了,附28项特性详细解读!
  8. 科技的趋势!AI将进军了37%的企业
  9. SQL编程题-----1
  10. oracle-备份工具exp-imp