我們正在將django-rest-framework從3.1.3升級到3.5.3。在升級之後,所有使用DefaultRouter生成URL的ModelViewSet和viewsets.GenericViewSet視圖不再允許HEAD方法調用。我搜索了發行說明和文檔,一直沒能找到任何導致HEAD停止被允許的設置或更改。升級到django-rest-framework後不允許使用HEAD方法3.5.3
我能夠通過繼承DefaultRouter並更改路由默認值來解決此問題,但我不認爲這是最佳或正確的解決方案。從django-rest-framework問題和文檔中讀取,似乎django-rest-framework應該自動處理HEAD和OPTIONS方法。
@detail_route,@list_route和派生自ApiView的允許GET方法的視圖自動獲得HEAD和OPTION方法。
爲什麼HEAD方法在升級後消失,以及確保我們的路由上允許HEAD方法的正確方法是什麼?
我們的路線和ModelViewSet定義是非常標準的,這裏是一個非工作路線:
from rest_framework.routers import DefaultRouter
from user_profile import views
router = DefaultRouter(trailing_slash=False)
router.register(r'user_names', views.UserNameView)
urlpatterns = router.urls
和視圖:
class UserNameView(mixins.ListModelMixin,
mixins.RetrieveModelMixin,
viewsets.GenericViewSet):
queryset = User.objects.only(
"id", "first_name", "last_name", "email",
"mobile_phone", "photo", "is_active", "date_joined"
).select_related("photo").all()
serializer_class = serializers.UserNameSerializer
郵差響應HEAD電話:
Status: 405 Method Not Allowed
Allow →GET, OPTIONS
Content-Type →application/json
Date →Wed, 09 Nov 2016 20:50:41 GMT
Server →WSGIServer/0.1 Python/2.7.12
Vary →Cookie
X-Frame-Options →SAMEORIGIN
x-xss-protection →1; mode=block
明確指定它請提供您的網址和您的意見的代碼。你在使用視圖集嗎? – wim
添加了有問題的代碼... – brocksamson