要调试一个用java写的后端,django写的前端的web应用应该怎么调试

要调试一个用java写的后端,django写的前端的web应用应该怎么调试,第1张

在以前,你选择Pythonweb架构会受制于可用的web服务器,反之亦然。如果架构和服务器可以协同工作,那你就走运了:
但你有可能面对(或者曾有过)下面的问题,当要把一个服务器和一个架构结合起来是发现他们不是被设计成协同工作的:
基本上你只能用可以一起运行的而非你想要使用的。
那么,你怎么可以不修改服务器和架构代码而确保可以在多个架构下运行web服务器呢答案就是PythonWebServerGatewayInterface(或简称WSGI,读作“wizgy”)。
WSGI允许开发者将选择web框架和web服务器分开。现在你可以混合匹配web服务器和web框架,选择一个适合你需要的配对。比如,你可以在Gunicorn或者Nginx/uWSGI或者Waitress上运行Django,Flask,或Pyramid。真正的混合匹配,得益于WSGI同时支持服务器和架构:
WSGI是第一篇和这篇开头又重复问道问题的答案。你的web服务器必须具备WSGI接口,所有的现代PythonWeb框架都已具备WSGI接口,它让你不对代码作修改就能使服务器和特点的web框架协同工作。
现在你知道WSGI由web服务器支持,而web框架允许你选择适合自己的配对,但它同样对于服务器和框架开发者提供便利使他们可以专注于自己偏爱的领域和专长而不至于相互牵制。其他语言也有类似接口:java有ServletAPI,Ruby有Rack。
说这么多了,你肯定在喊,给我看代码!好吧,看看这个极简的WSGI服务器实现:
#TestedwithPython279,Linux&MacOSX
importsocket
importStringIO
importsys
classWSGIServer(object):
address_family=socketAF_INET
socket_type=socketSOCK_STREAM
request_queue_size=1
def__init__(self,server_address):
#Createalisteningsocket
selflisten_socket=listen_socket=socketsocket(
selfaddress_family,
selfsocket_type
)
#Allowtoreusethesameaddress
listen_socketsetsockopt(socketSOL_SOCKET,socketSO_REUSEADDR,1)
#Bind
listen_socketbind(server_address)
#Activate
listen_socketlisten(selfrequest_queue_size)
#Getserverhostnameandport
host,port=selflisten_socketgetsockname()[:2]
selfserver_name=socketgetfqdn(host)
selfserver_port=port
#ReturnheaderssetbyWebframework/Webapplication
selfheaders_set=[]
defset_app(self,application):
selfapplication=application
defserve_forever(self):
listen_socket=selflisten_socket
whileTrue:
#Newclientconnection
selfclient_connection,client_address=listen_socketaccept()
#HandleonerequestandclosetheclientconnectionThen
#loopovertowaitforanotherclientconnection
selfhandle_one_request()
defhandle_one_request(self):
selfrequest_data=request_data=selfclient_connectionrecv(1024)
#Printformattedrequestdataala'curl-v'
print(''join(
'<{line}\n'format(line=line)
forlineinrequest_datasplitlines()
))
selfparse_request(request_data)
#Constructenvironmentdictionaryusingrequestdata
env=selfget_environ()
#It'stimetocallourapplicationcallableandget
#backaresultthatwillbecome>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10749560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-11
下一篇 2023-05-11

发表评论

登录后才能评论

评论列表(0条)

保存