我只是设法使用request.host和request.url_root在Flask中获取我的应用服务器主机名,但两个字段都返回主机名及其端口。我想使用只返回主机名的字段/方法,而不必进行字符串替换,如果有的话。
答案 0 :(得分:5)
没有单独返回主机名的Werkzeug(WSGI工具包Flask使用)方法。 你可以做的是使用Python的urlparse模块从Werkzeug给你的结果中获取主机名:
from urlparse import urlparse
o = urlparse("http://127.0.0.1:5000/")
print o.hostname # will display '127.0.0.1'
答案 1 :(得分:1)
这在python-flask应用程序中对我有用。
from flask import Flask, request
print "Base url without port",request.remote_addr
print "Base url with port",request.host_url
答案 2 :(得分:1)
基于Juan E的答案,这是我的
Python3解决方案:
from urllib.parse import urlparse
o = urlparse(request.base_url)
host = o.hostname
答案 3 :(得分:0)
实际上,wekzeug.urls.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'
>>>
答案 4 :(得分:0)
在Unix主机上,您可以:
import subprocess
subprocess.check_output('hostname').decode('utf8')
答案 5 :(得分:-1)
如果要在烧瓶模板(jinja2)上使用它:
<!--Without port -->
{{ request.remote_addr }}
<!-- With port -->
{{ request.hostname }}