简介:许多朋友询问有关Django如何运行后端代码的问题。本文的首席CTO笔记将为您提供详细的答案,以供所有人参考。我希望这对每个人都会有所帮助!让我们一起看看!
几天前,老师要求我将Django Project(爬行动物网页)放在校园的内网上,但我想先用自己的服务器尝试一下。我刚刚在数字海洋上购买了一台服务器以运行SS脚本。通常,服务器始终没有用,因此请进行测试。
第一步并没有太多胡说八道,将Django文件通过WINSCP软件传递给服务器。
在服务器中安装Django所需的环境和我需要的第三方库。
完成上述步骤完成后,有必要执行一个步骤操作,这是我体验的一个坑。在Django文件目录中打开settings.py,然后将允许的_hosts = []更改为werse_hosts = [**“*”]。
打开“ anage.py位于服务器中”的目录,然后输入命令:
python3 manage.py runserver 0.0.0.0:8000
然后按Enter并输入浏览器:服务器IP地址:8000,伟大的成就!
注意力:
1. Python3不是特定的,它是根据您的Django项目所需的环境指定的。
2. 8000是可以修改的端口号。
如果您希望Django项目在关闭终端后运行和运行,则需要运行以下命令,NOHUP命令,命令casted Python3 Manage.py Runserver 0.0.0.0.0.0:8000。
过去,您选择了PythonWeb体系结构受到可用的Web服务器的约束,反之亦然。如果体系结构和服务器可以一起工作,那么您很幸运:
但是您可能会面临以下问题(或曾经)。当您将服务器与体系结构相结合时,您会发现它们不是作为协调工作设计的:
基本上,您只能使用可以一起运行的东西而不是要使用的东西。
那么,如何不修改服务器和体系结构代码以确保可以在多个体系结构下运行Web服务器?答案是pythonwebservergatewaywaywayinterface(或wsgi,称为“ wizgy”)。
WSGI允许开发人员将Web框架与Web服务器分开。现在您可以混合和匹配Web服务器和Web框架以选择适合您的配对。nginx/uwsgi或女服务员。真正的混合匹配是由于WSGI同时支持服务器和体系结构:
WSGI是开始问题的第一个和答案。您的Web服务器必须具有WSGI接口。所有现代的PythonWeb框架都已经具有WSGI接口。它使您可以一起工作以使服务器和特征网络框架共同起作用。
现在,您知道WSGI得到了Web服务器的支持,Web框架使您可以选择自己的匹配,但是它还为服务器和框架开发人员提供了便利性,因此他们可以专注于自己的首选字段和专业知识,而无需限制。其他语言中也有类似的界面:Java具有Servicetapi,Ruby具有机架。
说了很多话,你一定要大喊大叫,告诉我代码!好吧,看看这个极简主义的WSGI服务器实现:
#Teestwithpython2.7.9,Linuxmacosx
ImportSocket
ImportStringio
进口
classwsgiserver(对象):
adversion_family = socket.af_inet
socket_type = socket.sock_stream
request_queue_size = 1
def__init __(self,server_address):
#createalisteeneingsocket
self.listen_socket = listy_socket = socket.socket(
self.address_family,
self.socket_type
治愈
#AllowToreUseThesameDdress
#bind
listn_socket.bind(server_address)
#启用
listn_socket.lisen(self.request_queue_size)
#getServerHostNameanDport
主机,port = self.listen_socket.getSockName()[:2]
self.server_name = socket.getFQDN(主机)
self.server_port =端口
#returnheaderssetbywebframework/webapplication
self.headers_set = []
defset_app(self,application):
self.Application =应用程序
defserve_forever(self):
listn_socket = seld.listen_socket
何时:
#NewClientConnection
self.client_connection,client_address = listy_socket.accept()
#anderonRequestandCloseTheclientConnection.then
#loopovertoranotherclientconnect
self.handle_one_request()
defhandle_one_request(self):
self.request_data = request_data = self.client_connection.recv(1024)
#printformattedrequestdatala'curl-v'
打印(''。加入
'{线}
'.format(line = line)
forlineinrequest_data.splitlines()
))
self.parse_request(request_data)
#ConstructonvironmentIctIctIctInangrequequestdata
env = self.get_et_environ()
#它是静止的
#backaresultthatwillbecomehtpresponsebody
结果= self.application(env,self.start_response)
#constructareseanseandesenditbacktotheclient
self.finish_response(结果)
defparse_request(self,text):
request_line = text.splitlines()[0]
request_line = request_line.rstrip('
')
#BreakDownThereQuestLineIntocomponents
(self.request_method,#获取
self.path,#/你好
self.request_version#http/1.1
)= request_line.split()
defget_environ(self):
env = {}
#TheFollowIncodesnippetDoesnotFollowPep8conconconventions
#buuttt isformatedThewayItisfordEmstRpuss
#ToPlasezetherequiredVariables和Theirvalues
#
#requiredwsgivariables
env ['wsgi.version'] =(1,0)
env ['wsgi.url_scheme'] ='http'
env ['wsgi.input'] = stringio.stringio(self.request_data)
env ['wsgi.errrs'] = sys.stderr
env ['wsgi.multithread'] = false
env ['wsgi.multiprocess'] = false
env ['wsgi.run_once'] = false
#RequiredCgivariables
env ['request_method'] = self.request_method#get
env ['path_info'] = self.Path#/Hello
env ['server_name'] = self.server_name#localhost
env ['server_port'] = str(seld.server_port)#8888
返回
defstart_response(self,status,wendy_headers,exc_info = none):
#addn ResucessareServerHeaders
server_headers = [
('date','星期二,31mar201512:54:48gmt'),
('服务器','wsgiserver0.2'),
这是给予的
self.headers_set = [状态,响应_headers+server_headers]
#toadheretowsgispecificationtate_responsemustreturn
#a'write'callile.wesimplicity'ssake'llignorethatdetail
#目前。
#returnself.finish_response
Definish_Response(SELD,结果):
尝试:
状态,响应_headers = self.headers_set
响应='http/1.1 {状态}
'.format(状态=状态)
forheaderinresponse_headers:
响应+='{0}:{1}
'。格式(*标题)
响应+='
'
Fordatainrsult:
响应+=数据
#printformattedResponsetatala'curl-v'
打印(''。加入
'{线}
'.format(line = line)
forlineinresponse.splitlines()
))
self.client_connection.sendall(响应)
最后:
self.client_connection.close()
server_address =(主机,端口)='',8888
defmake_server(server_address,应用程序):
server = wsgiserver(server_address)
server.set_app(应用程序)
返回服务器
if__名称__ =='__ main__':
iflen(sys.argv)2:
sys.exit('provideawsgiapplicationObjectassmodule:callable')
app_path = sys.argv [1]
模块,应用程序= app_path.split(':')
模块= __导入__(模块)
应用程序= getttr(模块,应用程序)
httpd = make_server(server_address,application)
print('wsgiserver:servinghttponport {port} ...
'.format(port = port))
httpd.serve_forever()
这比第一个代码长得多,但是它足够短(只有150行),可以让您理解并避免详细信息。框架,金字塔,烧瓶,Django或其他Pythonwsgi框架。
不相信我吗?自己尝试一下。请访问上述weberver2.py的代码,或直接在github上下载。如果您不通过任何参数传递,它将提醒然后启动。
$ pythonwebserver2.py
supportgiapplicationObjectsmodule:callial
1.首先,您需要使用PIP3工具安装Django3。
2.然后在自定义文件夹下创建一个项目(vlog)。
3.最终输入VLOG文件夹并运行Django项目。
结论:以上是Django如何运行首席CTO指出的后端代码的全部内容。我希望这对每个人都会有所帮助。如果您仍然想了解有关此信息的更多信息,请记住收集并关注此网站。