Python 获取Flask中没有端口的主机名
我刚刚使用request.host和request.url\u root在Flask中获取了我的应用服务器主机名,但这两个字段都返回了主机名及其端口。我希望使用只返回主机名的字段/方法,而不必执行字符串替换(如果有)。没有单独返回主机名的Werkzeug(WSGI toolkit Flask使用)方法。 您可以使用Python的urlparse模块从Werkzeug提供的结果中获取主机名:Python 获取Flask中没有端口的主机名,python,flask,request,port,hostname,Python,Flask,Request,Port,Hostname,我刚刚使用request.host和request.url\u root在Flask中获取了我的应用服务器主机名,但这两个字段都返回了主机名及其端口。我希望使用只返回主机名的字段/方法,而不必执行字符串替换(如果有)。没有单独返回主机名的Werkzeug(WSGI toolkit Flask使用)方法。 您可以使用Python的urlparse模块从Werkzeug提供的结果中获取主机名: from urlparse import urlparse o = urlparse("http://1
from urlparse import urlparse
o = urlparse("http://127.0.0.1:5000/")
print o.hostname # will display '127.0.0.1'
这在python flask应用程序中对我有用
from flask import Flask, request
print "Base url without port",request.remote_addr
print "Base url with port",request.host_url
如果要在烧瓶模板(jinja2)上使用它:
{{request.remote_addr}}
{{request.hostname}
基于Juan E的回答,这是我的
Python3的解决方案:
from urllib.parse import urlparse
o = urlparse(request.base_url)
host = o.hostname
实际上,wekzeug.url.url_parse()确实提供了一个“主机”属性,尽管它没有显示在对象的str()中:
>>> from werkzeug.urls import url_parse
>>> url_parse('https://auth.dev.xevo-dev.com:443/path/to/me?query1=x&query2')
URL(scheme='https', netloc='auth.dev.xevo-dev.com:443', path='/path/to/me', query='query1=x&query2', fragment='')
>>> url_parse('https://auth.dev.xevo-dev.com:443/path/to/me?query1=x&query2').host
'auth.dev.xevo-dev.com'
>>>
在unix主机上,您可以:
import subprocess
subprocess.check_output('hostname').decode('utf8')
应选择此选项回答这不是服务器主机,这是用户hostremote\u addr是客户端地址,而不是服务器地址。此选项不获取主机名,只是演示了在获得主机名后如何从主机名中删除端口号hostname@duhaime问题是“两个字段都返回主机名及其端口”,所以我回答了发布的问题。如果你需要不同的东西,你应该寻找合适的问题,或者自己问。。
import subprocess
subprocess.check_output('hostname').decode('utf8')