kst*_*tis 2 python django port django-dev-server
我有一个非常简单的项目在Django上运行(还没有型号)我需要做以下事情:
我已创建2级的应用程序,'Ebony'并'Ivory'认为有必要通过相互沟通JSON消息(最初设计为在不同的机器上运行,但现在一个是不够好).
问题是Django Debug服务器只是一个在特定端口运行的进程.我想要做的是让每个人'App'在同一台服务器上监听自己的端口,如果可能的话,在同一个Django项目下.这种情况可能吗?如果是的话,我应该怎么做呢?
提前致谢
这是可能的,但不是你概念化它的方式.Django应用程序是在给定Web服务器上运行的应用程序的一部分.因此,具有一个或多个应用程序的Django项目作为一个Web服务器的一部分运行.
解决方案是运行Django的多个实例.不确定这对调试服务器有多好.您可以通过为每个服务器提供一个参数来告诉它在哪里打开端口,从而在自己的端口上运行每个服务器,例如:
./manage.py runserver 8000
Run Code Online (Sandbox Code Playgroud)
在127.0.0.1:8000上运行调试服务器,和
./manage.py runserver 8080
Run Code Online (Sandbox Code Playgroud)
在127.0.0.1:8080上运行另一个调试服务器.通常这是在单独的shell中完成的.
您需要确保INSTALLED_APPS其中一个的设置在其中,'Ebony'另一个具有'Ivory'.您还需要找出一些方法来告诉每个实例如何连接到另一个实例(通常通过指定根URL).
也就是说,稍后你将需要弄清楚你的两个应用程序是否将共享同一个数据库.如果是这样,请确保两台机器都可以使用它.如果没有,请确保每个DATABASES值的值settings.py不同.如果您正在共享数据库,Django的站点框架可以帮助您在模型中保持直观.
要让两个都从同一个项目运行,你必须告诉Django运行哪一个.我更喜欢使用环境变量.这会将上述runserver命令更改为:
SHARD=Ebony ./manage.py runserver 8000
Run Code Online (Sandbox Code Playgroud)
和
SHARD=Ivory ./manage.py runserver 8080
Run Code Online (Sandbox Code Playgroud)
在您的settings.py文件中,可以通过访问此变量os.environ.因此,例如,对于INSTALLED_APPS每个分片具有不同值的设置,您可以编写如下内容:
SHARD = os.environ["SHARD"]
# Apps common to all shards go here.
LOCAL_APPS = [
commonApp,
]
# Add apps specific to each shard.
if SHARD == "Ebony":
LOCAL_APPS += [
Ebony,
]
elif SHARD == "Ivory":
LOCAL_APPS += [
Ivory,
]
# Add them to the apps that aren't mine.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.admin',
# ... omitted for brevity ...
'django_extensions',
'south',
'debug_toolbar',
) + LOCAL_APPS
Run Code Online (Sandbox Code Playgroud)
通过定义SHARD在此文件中的设置,您就不必有你的所有代码访问的环境变量,并限制你的逻辑设置SHARD到settings.py,如果你想要在以后改变它.如果需要,您的其他Python文件可以获得设置from django.conf.settings import SHARD.
可以使用类似的机制为每个分片提供自己的DATABASES设置.还有其他任何东西settings.py.
然后在您的urls.py文件中,您可以使用它来提取应用的网址:
from django.conf.urls import *
from django.conf import settings
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'commonApp.views.get_homepage', name='home'),
url(r'^login$', 'django.contrib.auth.views.login', name="login"),
url(r'^logout$', 'django.contrib.auth.views.logout',
{"next_page": "/"}, name="logout"),
# Admin
url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
url(r'^admin/', include(admin.site.urls)),
)
# Auto-add the applications.
for app in settings.LOCAL_APPS:
urlpatterns += patterns('',
url(r'^{0}/'.format(app), include(app + '.urls', namespace=app)),
)
Run Code Online (Sandbox Code Playgroud)
这意味着您的应用需要自己的urls.py文件,并且您的应用URL名称会以您的应用名称为前缀.因此,如果应用程序Ebony定义了带有的URL模式name="index",您将在模板中获取该URL {% url 'Ebony:index' %}.
| 归档时间: |
|
| 查看次数: |
1948 次 |
| 最近记录: |