Angular 8.0前端访问Django Admin遇阻:配置路由后无法打开面板求解
需求可行性及解决方法
可行性说明
完全可行。问题核心在于Angular本地服务器(端口4203)与Django后端服务器是两个独立服务,直接访问Angular地址的/superadmin会被Angular路由接管,不会自动转发到Django。只需配置请求转发即可实现需求。
解决步骤
1. 配置Angular代理转发
在Angular项目根目录创建proxy.conf.json文件,添加以下内容:
{ "/superadmin": { "target": "http://localhost:8000", "secure": false, "logLevel": "debug" } }
该配置会将所有以/superadmin开头的请求,转发到运行在8000端口的Django服务器(若你的Django端口不同,修改target值即可)。
2. 修改Angular启动命令
打开项目根目录的package.json,找到scripts下的start命令,修改为:
"start": "ng serve --port 4203 --proxy-config proxy.conf.json"
这样启动Angular时会自动加载代理配置。
3. 修复Django路由问题
你的原路由存在两个问题:一是未导入routers和include会导致报错;二是通配路由r'^'放在superadmin前面,会优先匹配所有请求,覆盖Admin路由。调整后的路由代码如下:
from django.urls import path, re_path, include from django.contrib import admin from django.views.debug import default_urlconf from rest_framework import routers router = routers.DefaultRouter() urlpatterns = [ re_path(r'^superadmin/', admin.site.urls), re_path(r'^', include(router.urls)), re_path(r'^$', default_urlconf), ]
将superadmin路由放在最前面,确保Admin请求能被正确匹配。
4. 启动服务测试
- 先启动Django服务器:
python manage.py runserver - 再启动Angular服务器:
npm start - 访问
http://localhost:4203/superadmin/,即可正常打开Django Admin面板。
生产环境补充
若部署到生产环境,无需代理配置,可将Angular打包后的静态文件放入Django静态资源目录,或使用Nginx等反向代理工具,将/superadmin路径请求转发到Django服务,其余路径返回Angular静态文件。
内容的提问来源于stack exchange,提问作者Salvi Rawat
相关产品推荐
相关产品推荐

