在多个端口上运行Django
有人能告诉我怎么在两个端口上同时运行Django吗?默认情况下,Django只在8000端口上监听请求。我想在另一个端口xxxx上也运行一个实例。我希望把所有发往这个第二个端口的请求都转到我Django应用中的一个特定应用上。
我需要用默认的Django安装来实现这个,而不是使用像nginx、Apache这样的网络服务器。
谢谢
假设我在我的Django应用中有两个应用。这里我不是说两个独立的Django应用,而是指'app'目录下的两个不同文件夹。我们把它们叫做app1
和app2
。
我希望所有发往8000端口的请求都去app1
,而所有发往XXXX端口的请求都去app2
。
希望这能帮到你。
4 个回答
内置的网络服务器只适合开发使用,所以如果你需要在多个端口上运行,最好还是用apache或者类似的服务器。
另一方面,你可以通过启动多个runserver
实例来同时启动多个服务器。只要你使用的是独立的数据库服务器,我觉得这样做不会有额外的问题。
还有一件事需要考虑——Django的会话功能会为每个网站使用相同的会话cookie。而且因为cookie与端口无关,所以每次在不同窗口之间切换时,你可能会遇到被登出的情况,除非在开发时使用多个浏览器会话或隐私浏览。
虽然在同一个网站上以两个不同用户登录时需要这样做,但在不同的本地端口上登录两个不同的网站时,不一定要这样处理。
一个简单的解决办法是写一个简单的中间件,通过在存储会话ID的变量名后面加上端口号来解决这个问题。这是我使用的代码。
你只需要运行两个 ./manage.py runserver
的实例就可以了。你可以通过直接指定端口来设置,比如用 ./manage.py runserver 8002
来让它监听8002这个端口。
补充说明 我其实不太明白你为什么想这么做。如果你是想让两个服务器分别服务你网站的不同部分,那实际上你就有了两个网站,这样就需要两个不同的 settings.py
和 urls.py
文件。然后你就可以分别运行每个 runserver
的实例,并且正确地传递设置参数,比如 ./manage.py runserver 8002 --settings=app1.settings
。