python的web框架知识点
一个完整的web应用:服务器收到来自浏览器的一个请求,服务器将请求内容的网页返回给浏览器,让浏览器显示出来。【而浏览器与服务器之前的传输协议是HTTP】
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
http:是网络上传输html的协议,用于浏览器与服务器的通信。
html:是一种定义网页的文本。
常见的状态码!
200 ok 请求成功。一般用于GET与POST请求
404 not found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
500 Internal Server Error 服务器内部错误,无法完成请求
Content-Type(内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件,这就是经常看到一些 PHP 网页点击的结果却是下载一个文件或一张图片的原因。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
语法格式:
- Content-Type: text/html; charset=utf-8
- Content-Type: multipart/form-data; boundary=something
content-type:application/javascript
WSGI:web server gateway interface【web服务器网关接口】
WSGI server 负责从客户端接受请求,将request 转发给application,将application返回的response返回给客户端。
原理:要求web开发者实现一个函数,就可以响应http请求。
wsgi = [web服务器+web应用程序]
例子:
def application(environ , start_response):
start_response('200 ok',[('Content-Type','text/html')])
return '<h1>hello ,web</h1>'
environ: 一个包含所有http请求信息dict对象
start_response:一个发送http响应的函数
在application()函数中:调用:
start_response('200 ok',[('Content-Type','text/html')])
- form django.core.handlers import base
class WSGIHandler(base.BaseHandler):- request_class = WSGIRequest
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.load_middleware()
- def __call__(self, environ, start_response):
- set_script_prefix(get_script_name(environ))
- signals.request_started.send(sender=self.__class__, environ=environ)
- request = self.request_class(environ)
- response = self.get_response(request)#处理请求
- response._handler_class = self.__class__
- status = '%d %s' % (response.status_code, response.reason_phrase)
- response_headers = list(response.items())
- for c in response.cookies.values():
- response_headers.append(('Set-Cookie', c.output(header='')))
- start_response(status, response_headers)
- if getattr(response, 'file_to_stream', None) is not None and environ.get('wsgi.file_wrapper'):
- response = environ['wsgi.file_wrapper'](response.file_to_stream)
- return response
简单的wsgi的demo【django simple_server】
案例0001
from wsgiref.simple_server import make_server
def app(environ, start_response): # wsgi协议规定的application部分的编码形式,可在此基础上扩展
status = '200 OK'
respones_headers = []
start_response(status, response_headers)
return [b'hello',]
if __name__ == '__main__':
httpd = make_server('127.0.0.1', 8080, app)
httpd.serve_forever()
- # -*- coding: utf-8 -*-
- # class WSGIHandler(base.BaseHandler):
- if __name__ == '__main__':
- httpd = make_server('', 8000, demo_app)
- sa = httpd.socket.getsockname()
- print("Serving HTTP ON ", sa[0], "port", sa[1], "...")
- import webbrowser
- webbrowser.open('http://localhost:8000/xyz?abc')
- # 调用WSGIserver的hanndle_request方法处理http请求
- httpd.handle_request()
- httpd.server_close()
- def make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler):
- server = server_class((host, port), handler_class)
- server.set_app(app)
- return server
- def demo_app(environ, start_response):
- from io import StringIO
- stdout = StringIO()
- print("hello world ", file=stdout)
- print(file=stdout)
- h = sorted(environ.items())
- for k, v in h:
- print(k, '=', repr(v), file=stdout)
- start_response("200 ok", [('Content-Type', 'text/plain; charset = utf-8')])
- return [stdout.getvalue().encode("utf-8")]
- """
- demo_app()表示一个简单的WSGI application实现,通过make_server()方法创建一个WSGIServer实例,
- 调用其handle_request()方法,该方法会调用demo_app()处理请求,并最终返回响应。
- """
实现的逻辑图
web server
就像是一颗心脏不停的跳动,驱动整个web
系统为用户提供http
访问服务,并调用application
返回响应
python的web框架知识点的更多相关文章
- Python之Web框架Django
Python之Web框架: Django 一. Django Django是一个卓越的新一代Web框架 Django的处理流程 1. 下载地址 Python 下载地址:https://www.pyt ...
- Python之Web框架
Python之Web框架: 一. Web框架的本质: 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env pyth ...
- python 实现web框架simfish
python 实现web框架simfish 本文主要记录本人利用python实现web框架simfish的过程.源码github地址:simfish WSGI HTTP Server wsgi模块提供 ...
- Python之Web框架们
Python的WEB框架 Bottle Bottle是一个快速.简洁.轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块. pip i ...
- python各种web框架对比
0 引言 python在web开发方面有着广泛的应用.鉴于各种各样的框架,对于开发者来说如何选择将成为一个问题.为此,我特此对比较常见的几种框架从性能.使用感受以及应用情况进行一个粗略的 ...
- Python3.5学习十八 Python之Web框架 Django
Python之Web框架: 本质:Socket 引用wsgiref创建web框架 根据web框架创建过程优化所得: 分目录管理 模板单独目录 执行不同函数单独存入一个方法py文件 Web框架的两种形式 ...
- python之web框架(3):WSGI之web应用完善
python之web框架(3):WSGI之web应用完善 1.上篇的web框架太low,只能实现回应固定页面.现在将它进行完善.首先将wsgi和web服务器进行分离,并给予它回复静态页面的能力. we ...
- python之web框架(2):了解WSGI接口
python之web框架(2):了解WSGI接口 1.什么是wsgi接口: wsgi:Web Service Gateway Interface.它不是模块,而只是一种规范,方便web服务器和各种框架 ...
- python之web框架(1):完成静态页面web服务器
python的web框架(1) 1.首先写一个最简单的web服务器,只能给客户回应一个固定的hello world的页面. from socket import * from multiprocess ...
随机推荐
- 日常Bug排查-Nginx重复请求?
日常Bug排查-Nginx重复请求? 前言 日常Bug排查系列都是一些简单Bug排查,笔者将在这里介绍一些排查Bug的简单技巧,其中不乏一些看起来很低级但很容易犯的问题. 问题现场 有一天运维突然找到 ...
- 性能分析之CPU分析-从CPU调用高到具体代码行(JAVA)
通常情况下,性能报告中只说CPU使用率高的时候,并不能帮助定位问题.因为CPU高会有多种不同的情况.CPU有五种状态(us sy id wa st), 在vmstat中能显示出来,这个想必很多人都 ...
- SpringBoot数据访问(一) SpringBoot整合Mybatis
前言 SpringData是Spring提供的一个用于简化数据库访问.支持云服务的开源框架.它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是为了使我们可以快速且 ...
- hdu1232 并查集总结
前言 在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中. 这一类问题其特点是看似并 ...
- MVC,MVVM模式的理解
基本上,我们的产品就是通过接口从数据库中读取数据,然后将数据经过处理展示到用户看到的视图上.当然我们还可以从视图上读取用户的输入,然后通过接口写入到数据库.但是,如何将数据展示到视图上,又如何将用户的 ...
- ceph-csi源码分析(5)-rbd driver-nodeserver分析(上)
更多 ceph-csi 其他源码分析,请查看下面这篇博文:kubernetes ceph-csi分析目录导航 ceph-csi源码分析(5)-rbd driver-nodeserver分析(上) 当c ...
- Docker 镜像针对不同语言的精简策略
导航: 这里分为几个部分. 相关转载云原生:米开朗基杨 1.Docker减小镜像体积 2.Docker镜像针对不同语言的精简策略 对于刚接触容器的人来说,他们很容易被自己制作的 Docker 镜像体积 ...
- 4、linux32位和64位操作系统的区别
- 13、windows下卸载oracle
13.1.停用oracle服务: 进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止: 13.2.删除oracle: 在开始菜单中,找到oracle->Universal I ...
- 大数据-Hadoop虚拟机的准备以及配置(三台机子)
虚拟机的准备 修改静态IP(克隆的虚拟机) vim /etc/udev/rules.d/70-persistent-net.rules 配置网络: Vim /etc/sysconfig/network ...