当我的settings.py有ALLOWED_HOSTS = []时--服务器工作得很好。但是当我执行ALLOWED_HOSTS = config('ALLOWED_HOSTS')时-它给出了错误:
DisallowedHost at /admin/login/
Invalid HTTP_HOST header: '127.0.0.1:8000'. You may need to add '127.0.0.1' to ALLOWED_HOSTS.但是,当我进入python shell时,我可以成功地导入ALLOWED_HOSTS -并且它会输出[],这是正确的值。
为什么我仍然得到这个错误的原因?
PS:config是python-decouple包的一个特性-用于存储敏感值。
发布于 2018-03-01 19:55:00
python-decouple readme建议您必须将ALLOWED_HOSTS转换为一个列表。它给出的例子是:
os.environ['ALLOWED_HOSTS'] = '.localhost, .herokuapp.com'
config('ALLOWED_HOSTS', cast=lambda v: [s.strip() for s in v.split(',')])您似乎正在执行config('ALLOWED_HOSTS'),所以您的ALLOWED_HOSTS可能会被评估为字符串'[]',而不是空的列表[]。
发布于 2018-03-01 21:12:16
在这种情况下,django需要一个ALLOWED_HOSTS格式的列表,但环境变量只是一个计划文本,您必须在使用它之前进行转换,幸运的是,python decouple有一个可选参数,名为cast
考虑以下.env文件:
.env
ALLOWED_HOSTS=127.0.0.1, .herokuapp.com
DEBUG=True
PORT=5403要在您的setting.py中访问这些值,您必须导入util类Csv,它将转换列表中的计划字符串,但请注意在您的.env文件或环境变量中,不要忘记用逗号和空格(,)分隔这些值。对于不需要导入任何附加类的内置类型,可以使用int、str、bool...
setting.py
from decouple import config, Csv
ALLOWED_HOSTS = config('ALLOWED_HOSTS', default=[], cast=Csv())
DEBUG = config('DEBUG', default=False, cast=bool)
PORT= config('PORT', cast=int)https://stackoverflow.com/questions/49049026
复制相似问题