如何移除Django根URL API末尾的斜杠 实现无斜杠地址正常访问
配置调整步骤
你只需要修改两处配置即可实现需求:
1. 修改DRF路由器参数
DRF的DefaultRouter默认生成带末尾斜杠的路由,实例化时添加trailing_slash=False参数即可生成不带斜杠的路由,修改对应代码行:
# 原来的代码 # router = routers.DefaultRouter() # 修改为 router = routers.DefaultRouter(trailing_slash=False)
2. 关闭Django自动补全斜杠的全局配置
Django默认开启APPEND_SLASH配置,会自动将不带末尾斜杠的请求301重定向到带斜杠的地址,你需要在项目的settings.py文件中添加如下配置关闭该逻辑:
APPEND_SLASH = False
修改后的完整urls.py示例
import os from django.contrib import admin from django.urls import path, include from rest_framework import routers from rest_framework.schemas import get_schema_view from rest_framework_swagger.renderers import SwaggerUIRenderer, OpenAPIRenderer from groups import views as group_views API_VERSION = os.getenv('API_VERSION') API_ROOT = f"api/{API_VERSION}/" # 仅修改了这一行,添加trailing_slash=False参数 router = routers.DefaultRouter(trailing_slash=False) router.register('groups', group_views.GroupViewSet) schema_view = get_schema_view( title='next_blog', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer]) urlpatterns = [ path('admin', admin.site.urls), path('api_auth', include( 'rest_framework.urls', namespace='rest_framework')), path('docs', schema_view, name='docs'), path(API_ROOT, include(router.urls)), ]
注意事项
关闭APPEND_SLASH后,所有自定义的path路由都不会自动补全末尾斜杠,比如你现有配置中的/admin、/docs路径,之后只能通过不带斜杠的地址访问,带斜杠的地址会返回404。如果需要同时支持两种格式的地址,可以针对每个路径分别编写两条匹配规则。
内容的提问来源于stack exchange,提问作者a programer
相关产品推荐
相关产品推荐

