2024-05-19 00:01:21 发布
网友
我在Django上运行了一个非常简单的项目(还没有模型),我需要执行以下操作:
我已经创建了两个应用程序,'Ebony'和'Ivory',它们需要通过JSON消息相互通信(最初设计在不同的机器上运行,但现在一个就足够了)。在
'Ebony'
'Ivory'
JSON
问题是DjangoDebug服务器只是在特定端口上运行的一个进程。我要做的是让每个'App'监听同一服务器上的自己的端口,如果可能的话,在同一个Django项目下。这种情况可能发生吗?如果是,我该怎么做呢?在
Debug
'App'
提前谢谢
这是可能的,但不是你概念化的方式。Django应用程序是在给定的web服务器上运行的应用程序的一部分。因此,Django项目包含一个或多个应用程序,作为一个web服务器的一部分运行。在
解决方案是运行Django的多个实例。不确定这对调试服务器的工作效果如何。您可以run each server on its own port给它一个参数,告诉它在哪里打开端口,例如:
./manage.py runserver 8000
在127.0.0.1:8000上运行调试服务器,并且
在127.0.0.1:8080上运行另一个调试服务器。通常这是在单独的外壳中完成的。在
您需要确保其中一个的INSTALLED_APPS设置中有'Ebony',另一个有{}。您还需要找出一些方法来告诉每个实例如何连接到另一个实例(通常通过指定根URL)。在
INSTALLED_APPS
也就是说,以后你需要弄清楚你的两个应用程序是否共享同一个数据库。如果是这样,请确保两台机器都能到达。如果不是,请确保settings.py中的DATABASES值对于每个值都是不同的。如果您共享数据库,Django的sites framework可以帮助您在模型中保持清晰。在
settings.py
DATABASES
要让这两个都从同一个项目运行,您必须告诉Django要运行哪一个。我更喜欢使用环境变量。这会将上述runserver命令更改为:
runserver
SHARD=Ebony ./manage.py runserver 8000
以及
SHARD=Ivory ./manage.py runserver 8080
在settings.py文件中,可以通过os.environ访问该变量。因此,例如,INSTALLED_APPS设置为每个碎片有不同的值,您可以编写如下内容:
os.environ
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
通过将SHARD定义为该文件中的一个设置,可以避免让所有代码访问环境变量,并且可以将设置SHARD的逻辑限制为settings.py,以备以后更改。如果需要,其他Python文件可以使用from django.conf.settings import SHARD获得设置。在
SHARD
from django.conf.settings import SHARD
类似的机制也可以用于为每个碎片提供自己的DATABASES设置。以及settings.py中的任何其他内容。在
然后在你的urls.py文件中,使用该文件来拉入应用程序的URL:
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)), )
这意味着您的应用程序需要自己的urls.py文件,并且您的应用程序URL名称将以您的应用程序名称作为前缀。因此,如果应用程序Ebony使用name="index"定义一个URL模式,那么您将在一个带有{% url 'Ebony:index' %}的模板中获得该URL。在
Ebony
name="index"
{% url 'Ebony:index' %}
这是可能的,但不是你概念化的方式。Django应用程序是在给定的web服务器上运行的应用程序的一部分。因此,Django项目包含一个或多个应用程序,作为一个web服务器的一部分运行。在
解决方案是运行Django的多个实例。不确定这对调试服务器的工作效果如何。您可以run each server on its own port给它一个参数,告诉它在哪里打开端口,例如:
在127.0.0.1:8000上运行调试服务器,并且
^{pr2}$在127.0.0.1:8080上运行另一个调试服务器。通常这是在单独的外壳中完成的。在
您需要确保其中一个的}。您还需要找出一些方法来告诉每个实例如何连接到另一个实例(通常通过指定根URL)。在
INSTALLED_APPS
设置中有'Ebony'
,另一个有{也就是说,以后你需要弄清楚你的两个应用程序是否共享同一个数据库。如果是这样,请确保两台机器都能到达。如果不是,请确保
settings.py
中的DATABASES
值对于每个值都是不同的。如果您共享数据库,Django的sites framework可以帮助您在模型中保持清晰。在要让这两个都从同一个项目运行,您必须告诉Django要运行哪一个。我更喜欢使用环境变量。这会将上述
runserver
命令更改为:以及
在
settings.py
文件中,可以通过os.environ
访问该变量。因此,例如,INSTALLED_APPS
设置为每个碎片有不同的值,您可以编写如下内容:通过将
SHARD
定义为该文件中的一个设置,可以避免让所有代码访问环境变量,并且可以将设置SHARD
的逻辑限制为settings.py
,以备以后更改。如果需要,其他Python文件可以使用from django.conf.settings import SHARD
获得设置。在类似的机制也可以用于为每个碎片提供自己的
DATABASES
设置。以及settings.py
中的任何其他内容。在然后在你的
urls.py
文件中,使用该文件来拉入应用程序的URL:这意味着您的应用程序需要自己的
urls.py
文件,并且您的应用程序URL名称将以您的应用程序名称作为前缀。因此,如果应用程序Ebony
使用name="index"
定义一个URL模式,那么您将在一个带有{% url 'Ebony:index' %}
的模板中获得该URL。在相关问题 更多 >
编程相关推荐