在Flask中获取没有端口的主机名

时间:2014-04-06 02:52:55

标签: python flask request port hostname

我只是设法使用request.host和request.url_root在Flask中获取我的应用服务器主机名,但两个字段都返回主机名及其端口。我想使用只返回主机名的字段/方法,而不必进行字符串替换,如果有的话。

6 个答案:

答案 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 }}