2.8.5Django --3 WEB框架
Django目录:https://blog.csdn.net/qq_41106844/article/details/105554082
什么是WEB框架
框架:即framework,特指未解决一个开放性问题而设计的具有一定约束性的支撑框架。使用框架可以用来快速开发特点的系统。
大白话就是,别人搭台,你唱戏。
Web框架(Web framework):是一种开发框架,用来支持动态网站、网络应用和网络服务的开发。
大多数的web框架都提供了一套开发和部署网站的方式,也为web行为提供了一套通用的方法。web框架已经实现了很多功能,开发人员使用框架提供的方法并且完成自己的业务逻辑,就能快速开发web应用了。
浏览器和服务器的是基于HTTP协议进行通信的,也可以说web框架就是在以上十几行代码基础张扩展出来的,有很多简单方便使用的方法,大大提高了开发的效率。
为DIV做准备
在div之前,我们要先知道几个概念:
WSGI:全称(Web Server Gateway Interface)。
简单的Web应用就是先把HTML用文件保存好,用一个现成的HTTP服务器软件,接收用户请求,从文件中读取HTML,返回。
如果要动态生成HTML,就需要把上述步骤自己来实现。不过,接受HTTP请求、解析HTTP请求、发送HTTP响应都是苦力活,如果我们自己来写这些底层代码,还没开始写动态HTML呢,就得花个把月去读HTTP规范。
正确的做法是底层代码由专门的服务器软件实现,我们用Python专注于生成HTML文档。
因为我们不希望接触到TCP连接、HTTP原始请求和响应格式,所以,需要一个统一的接口协议来实现这样的服务器软件,让我们专心用Python编写Web业务。这个接口就是WSGI。
wsgiref模块:就是python基于wsgi协议开发的服务模块。
我们先用wsgiref模块实现一个web应用
# 这样实现web应用与socket最大的区别是:
# 不需要在乎客户端或者服务端之间乱七八糟的连接和传输.
# 只需要在有连接在连接8080端口后返回给他页面数据。
from wsgiref.simple_serverimport make_server
#这两个参数,分别是包含HTTP信息的一个字典,发出HTTP响应的函数。
def application(environ, start_response):
#响应头的设置
start_response('200 OK', [('Content-Type', 'text/html')])
return [b'<h1>Hello, web!</h1>']
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
我们再来看看 make_server这个函数:
第一个参数是IP,第二个参数是端口,第三个参数就直接是app。
如果查看environ
我们能在其中发现很多信息以k-v的形式保存,如果想要获得什么信息,可以从这里拿。
那么我们现在改一下需求,我们现在浏览 http://127.0.0.1/hanx 这个页面时,我们想让他出现 hello hanxuan!
我们这就需要去environ中找到负责管理路径的key。
我们发起 http://127.0.0.1/hanx 这个请求,然后我们想要找到的路径找到了。
from wsgiref.simple_serverimport make_server
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
#简单处理一下之后拼接
strin="<h1>Hello, "+path[1:]+"!"
#将字符串转换成二进制串
return [bytes(strin,encoding="utf-8")]
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
但是显然这么写有点不符合实际,显然我们的页面数量是有限的,那么我们接下来引用真实的HTML文件作为页面。
之后修改程序为:
from wsgiref.simple_serverimport make_server
def foo1():
f =open("index1.html","rb")
data = f.read()
return data
def foo2():
f =open("index2.html","rb")
data = f.read()
return data
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
if path =="/HAN":
return [foo1()]
elif path =="/XUAN":
return [foo2()]
else:
return [b"404"]
httpd = make_server('127.0.0.1', 8080, application)
print('Serving HTTP on port 8080...')
# 开始监听HTTP请求:
httpd.serve_forever()
但是如果页面数量过多,我们需要大量的使用if--elif--else。那么有没有方便一点的呢,这就有了我们的路由表。
...
#路由表
def router():
URLpattern = [
("/HAN", foo1),
("/XUAN", foo2)
]
return URLpattern
def application(environ, start_response):
#获取路径
path=environ["PATH_INFO"]
start_response('200 OK', [('Content-Type', 'text/html')])
URLpattern = router()
for iin URLpattern:
if path == i[0]:
func = i[1]
return[func()]
else:
return [b"404"]
...
web访问照旧。
使用了路由表就可以自由的增加删除页面。
2.8.5Django --3 WEB框架相关推荐
- pythonweb框架django_Django企业开发实战 高效Python Web框架指南
第一部分初入江湖 章需求2 1.1需求文档3 1.2需求评审/分析4 1.2.1博客需求评审5 1.2.2评审之后6 1.3功能分析6 1.3.1需求列表6 1.3.2功能点梳理7 1.3.3模块划分 ...
- Django web框架
Web框架 web 框架本质 - Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. HTTP协议 HTTP协议介绍HTTP协议对收发消息的格式要求每个HTTP ...
- web框架总结(django、flask)
1.MVC解读 M:Model,模型,和数据库进行交互 V:View,视图,负责产生Html页面 C:Controller,控制器,接收请求,进行处理,与M和V进行交互,返回应答. 1.用户点击注 2 ...
- Python Web 框架要点
1. Web应用程序处理流程 2. Web程序框架的意义 用于搭建Web应用程序 免去不同Web应用相同代码部分的重复编写,只需关心Web应用核心的业务逻辑实现 3. Web应用程序的本质 接收并解析 ...
- 带你理清Node.js 的Web框架的3个层次
web 框架指的是处理 http.https 的服务端框架,Node.js 提供了 http.https 模块用于处理协议数据,这是 web 框架的基础. 但是 http.https 的 api 过于 ...
- python学习随笔--web框架
Web框架本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf- ...
- python bottle web框架简介
Bottle 是一个快速,简单,轻量级的 Python WSGI Web 框架.单一文件,只依赖 Python 标准库 .bottle很适合会一点python基础的人使用,因为这框架用起来很简单,只要 ...
- Python之路--WEB框架本质
一.本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8im ...
- Python微型Web框架Bottle源码分析
Bottle 是一个快速,简单和轻量级的 WSGI 微型 Web 框架的 Python.它作为单个文件模块分发,除了 Python 标准库之外没有依赖关系. 选择源码分析的版本是 Release 于 ...
最新文章
- Attention Model(注意力模型)思想初探
- JQuery元素选择器:和||,逻辑选择
- 安卓飞机大战(三) 弹出对话框
- 历届试题 连号区间数
- grass gis怎么使用_使用GRASS GIS返回学校
- 飞书正式发布5.0版 推出飞书人事、合同、审批等多款新产品
- 2021-2025年中国电子台秤行业市场供需与战略研究报告
- 按照这个步骤来刷题,迷茫的你两个月亦能成为王者
- 带你全面掌握高级知识点!java修改map中的value
- Linux目录详细说明
- Linux启动分析——init进程与app启动(init进程源码分析)
- 05_家谱管理系统(小钱版)[数据结构][2012-02-03]
- 服务器搬迁清单需要启动任务以及恢复办法
- VUE设置浏览器标题及图标
- 中国能源建设合并葛洲坝又有最新进展,葛洲坝即将终止上市
- 当面试问到自己有哪些缺点应该怎么回答
- (三)《数字电子技术基础》——码制
- vscode 开启大小写区分
- centos7下搭建nextcloud云(使用阿里云轻量服务器+oss对象储存)
- 电容电流状态观测器的三相LCL型PWM变流器控制
热门文章
- 北京,三看三核对,读懂社保对账单
- 一个积分不等式的再讨论
- 微信和支付宝相关支付业务场景介绍
- Response.WriteFile 无法下载大文件解决方法
- Android 常用RGB值及名称
- 11.7亿、苹果仅20%、1/4的时间看短视频...关于互联网,你必须知道的几个数字......
- 后端技术交流群,邀你加入
- android 在状态栏耳机图标显示图标显示图标显示图标,Android 通知栏图标
- 公交管理系统的设计与实现
- 用算符优先法对算术表达式求值(六)