TLDR:对后端 API 使用单独的路径,例如 /api/*,对于 Angular 应用,将所有其他路由重定向到 index.html。
我一直在使用 Django v1.10 + AngularJS(之后迁移到 Angular)。
我在所有前端工作中都使用 Angular/AngularJS,并且只使用后端主要通过 API 获取数据。
我一直在使用这个文件夹结构:
- dist(这是我放置生成的 Angular 包的地方)
- django_app
- settings.py
- urls.py
- wsgi.py
- ...
- 应用程序
- 静态(django 静态文件)
- apps.py
- models.py
- urls.py
- views.py
- ...
- src(Angular 源代码,如果您想在根文件夹中保持干净,可以将所有 Angular 相关文件移动到单独的文件夹中,即
angular/src)
- angular.json
- tsconfig.json
- ...
在开发过程中,我会将所有路由重定向到 Angular 应用程序的 index.html。
在django_app\urls.py:
urlpatterns = [
url(r'^api/', include('app.urls')),
url(r'^admin/password_reset/$', auth_views.password_reset, name='admin_password_reset'),
url(r'^admin/password_reset/done/$', auth_views.password_reset_done, name='password_reset_done'),
url(r'^admin/reset/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$', auth_views.password_reset_confirm, name='password_reset_confirm'),
url(r'^admin/reset/done/$', auth_views.password_reset_complete, name='password_reset_complete'),
url(r'^admin/', admin.site.urls, name='admin'),
]
# Serve media files locally for development
if settings.DEBUG:
import debug_toolbar
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += [
url(r'^__debug__/', include(debug_toolbar.urls)),
url(r'^.*$', staticfilesviews.serve, {'path': 'index.html'}, name='index'),
]
这些是我的设置:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'dist'),
)
在生产中,您应该使用像 nginx 这样的反向代理来仅路由 Django 用于特定用途,例如调用 API。其他所有内容都应该传递给 Angular 应用入口 index.html