2016-11-09 8 views
4

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、およびGETメソッドを許可するApiViewから派生したビューは、自動的にHEADおよびOPTIONメソッドを取得します。

なぜこのアップグレード後にHEADメソッドが表示されなくなったのですか?私たちのルートでHEADメソッドを使用できるようにする正しい方法は何ですか?

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 

私たちのルートとModelViewSet定義

は非常に標準装備され、ここで非現用ルートであります
+0

あなたのURLとあなたの意見のコードを入力してください。ビューセットを使用していますか? – wim

+0

問題のコードを追加しました... – brocksamson

答えて

3

あなたは明らかにリリース3.5.0で削除された古い動作に頼っていました。ここで

# Patch this in as it's otherwise only present from 1.5 onwards 
if hasattr(self, 'get') and not hasattr(self, 'head'): 
    self.head = self.get 

は、関連commitgithub issueです。

DefaultRouterにはHEADルートが含まれていません。 routesに追加するか、明示的に指定してください。UserNameView.as_view(actions={'head': ...})

+0

ニースが見つかりました。コードを追加するとHEADルートが有効になることが確認されました。私はあなたの答え:)を受け入れた。私たちは既にListModelMixinを他の理由でサブクラス化しているので、そのサブクラスにheadメソッドを追加するだけで問題を解決できます。 – brocksamson

+0

しかし、それはdjango 1.6以上では動作しません。それは意図的に行われましたか? –

関連する問題