分类目录归档:Django

nginx使用非80端口做反代理 Django会重定向到错误端口的问题

使用nginx做反代理,设置的访问端口不是80,但是当打开网站重定向到登陆页面的时候,却转向到80端口上,导致打不开的问题。

解决办法

当一个Django应用部署在代理或负载均衡器后面的时候,解决这个问题需要依赖 X-Forwarded-Host 报头提供转发地址。

首先,添加下面字段到 nginx 的主机配置文件(插入到 location 部分),用于配置 nginx 发送出合适的报头:

其次,添加下面字段到 Django settings.py 文件,用于配置 Django 信任接收到的 X-Forwarded-Host 报头:

现在它应该能正常工作了。

另外,出于安全原因,应用不应该无条件信任接收到的 X-Forwarded-Host 参数,正确的做法是在Django settings.pyALLOWED_HOSTS配置中加入可信任的域名或者IP。

参考:django admin redirects to wrong port on save

在Django template的表单中单选和多选字段加入”添加另一个“的按钮

首先,在表单template引入

然后,在form.py 文件中要修改的 form class 加入

注:

MODEL部分,替换为新增数据要引用到的model

FIELD部分,替换为要添加按钮的表单字段

在Django模型中添加ManyToManyField字段后手动更新数据库

例子,假设添加了以下字段到 project App 的 product model,需要更新现有数据库

首先,执行下面命令以便导出生成 project App 数据库的sql命令

然后,找到创建对应 project_product_ref table 的命令

最后,在数据库里执行上述SQL命令添加table。