微服务网关接口规范
541
2022-08-29
python的web框架知识点(基于Python的主流Web开发框架研究及实现)
一个完整的web应用:服务器收到来自浏览器的一个请求,服务器将请求内容的网页返回给浏览器,让浏览器显示出来。【而浏览器与服务器之前的传输协议是HTTP】
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
ok 请求成功。一般用于GET与POST请求
404 not found 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
500 Internal Server Error 服务器内部错误,无法完成请求
Content-Type 标头告诉客户端实际返回的内容的内容类型。
语法格式:
Content-Type: text/html; charset=utf-8Content-Type: multipart/form-data; boundary=somethingcontent-type:application/javascript
HTTP请求: 流程: 1、浏览器向服务器发送 POST----会附带用户数据)2、路径 3、域名 4、其他相关的header ,如果是POST,请求包括一个body包含用户数据】 2、服务器向浏览器返回2、响应类型【Content-Type】。 3、其他相关的header。 】 wide web】
WSGI:web server gateway interface【web服务器网关接口】
WSGI server 负责从客户端接受请求,将request 转发给application,将application返回的response返回给客户端。
原理:要求web开发者实现一个函数,就可以响应= [web服务器+web应用程序]
例子:
def application(environ , start_response):
start_response('200 ok',[('Content-Type','text/html')])
return '
environ: 一个包含所有ok',[('Content-Type','text/html')])
form django.core.handlers import baseclass 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_serverdef app(environ, start_response): # wsgi协议规定的application部分的编码形式,可在此基础上扩展 status = '200 OK' respones_headers = [] start_response(status, response_headers) return [b'hello',]if __name__ == '__main__': = make_server('127.0.0.1', 8080, app) -*- coding: utf-8 -*-# class WSGIHandler(base.BaseHandler):if __name__ == '__main__': = make_server('', 8000, demo_app) sa = print("Serving HTTP ON ", sa[0], "port", sa[1], "...") import webbrowser webbrowser.open(' # 调用WSGIserver的hanndle_request方法处理 make_server(host, port, app, server_class=WSGIServer, handler_class=WSGIRequestHandler): server = server_class((host, port), handler_class) server.set_app(app) return serverdef 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返回响应
心有猛虎,细嗅蔷薇
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~