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

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

我刚刚使用request.host和request.url\u root在Flask中获取了我的应用服务器主机名,但这两个字段都返回了主机名及其端口。我希望使用只返回主机名的字段/方法,而不必执行字符串替换(如果有)。

没有单独返回主机名的Werkzeug(WSGI toolkit 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'

这在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')