API和主页面作为两个独立的进程

情况

我为我的移动应用程序创build了一个REST API,现在我想创build一个网站。 API到目前为止非常简单,只是为了“获取内容列表”,“更新数据库中的某个字段”等几个请求。但现在,我想创build一个网站,当然会使用相同的数据库。 我不认为这个API将在网站项目中有用。

把API和网站分开保存,在两个不同的实例上更好一些,还是最好把它合并起来? 例如, api.example.com上的API地址为127.0.0.1:8001网站地址为127.0.0.1:8002 ,当然还有两个不同的nginx服务器configuration(如果仍然存在不知道我的意思是:P)? 或者在处理请求方面的performance并不重要,最好是通过链接example.com/api/...完成一个项目。

对于生产,我build议保持应用程序分离,如你所build议的(在两个不同的nginx网站)。

把你的Django项目划分为应用程序:ie。 'core','api','web'。 这样,您可以共享包含模型和逻辑“核心”的应用程序,并使其他两个应用程序“api”和“web”重用该代码。

因为实际上你正在描述两个服务(API和web),所以你可以很容易地为Django创build两个不同的settings.py和wsgi,每个都包括合适的应用程序。 这是一种常见的方法:每个应用程序都包含并只公开需要的代码。 有了独立的域名和服务,随着网站的发展,可以更容易和更好地分发。 此外,它还可以更轻松地微调每个应用程序configuration(日志logging设置,中间件等)。

如果您的应用程序不需要支持如此多的请求,我会很高兴保持一个settings.py,并简单地使用URL来将请求定向到一个或另一个应用程序。 你也可以为开发做这个。

如果您希望包含一个或其他url取决于设置,请使用以下内容:

 # Your generic URL patterns urlpatterns = patterns('', #(r'^static/(?P<path>.*)$', 'django.views.static.serve'), ... ) if settings.ENABLE_API: urlpatterns += patterns('', url(r'^', include('myapi.urls')), ) if settings.ENABLE_WEB: urlpatterns += patterns('', url(r'^', include('web.urls')), #url(r'^admin/', include(admin.site.urls)), ) 

上面只是一个例子,关键是你可以有条件地构build你的URL模式或者例如使用+运算符来为它们添加更多的模式。 更多信息请访问https://docs.djangoproject.com/en/dev/topics/http/urls/