這是我的觀點:基於DjangoRestFramework/Django的類視圖 - 如何使它重定向到登錄頁面,如果403引發錯誤
# This view is accessed by going to "/CMS/app"
class AppPageView(TemplateView):
template_name = "app.html"
@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(AppPageView, self).dispatch(*args, **kwargs)
# This view is accessed by going to "/user/:user_id"
class user_detail(APIView):
"""
Get, update or delete a specific user.
"""
permission_classes = (IsAuthenticated,)
def get_object(self, pk):
try:
return User.objects.get(pk=pk)
except User.DoesNotExist:
raise Http404
def get(self, request, pk):
user = self.get_object(pk)
serializer = UserSerializer(user)
return Response(serializer.data)
當我轉到他們的網址訪問這兩個的這些觀點,我得到默認DjangoRestFramework網頁,其中說:
User Detail
Get, update or delete a specific user.
GET /CMS/users/8
HTTP 403 FORBIDDEN
Content-Type: application/json
Allow: GET, PUT, DELETE, HEAD, OPTIONS
Vary: Accept
{
"detail": "Authentication credentials were not provided."
}
是否有可能爲我改變它,這樣不是顯示默認的DRF頁面,使其重定向到登錄頁面? (登錄頁面的URL是「/ login」)。
注:我使用的是Django的TemplateView一個視圖和DRF APIView其他的,但都重定向到DRF默認的403頁,當我試圖訪問其網址不被記錄在
API對於重定向沒有任何意義。 API供開發人員使用,它們在應用程序內部,重定向在瀏覽器使用該應用程序時使用,以便人員可以填寫詳細信息。 API應該引發一個錯誤(這正是它正確的做法)。 –
@BurhanKhalid當我通過使用AngularJS執行$ http.get(「/ CMS/users/8」)嘗試GET請求時,我確實希望它返回帶有JSON消息的403。但是,如果用戶使用他們的Web瀏覽器直接訪問URL,我不希望顯示默認的DRF頁面(我擔心的是,我不希望最終用戶意外地在DRF頁面上顯示「HTTP 403 FORBIDDEN Content-Type:application/json允許:GET,PUT,DELETE,HEAD,OPTIONS Vary:Accept「,因爲他們會感到困惑)。我能爲我的擔憂做些什麼?能以某種方式顯示簡單的「403點擊此處登錄」頁面嗎? – user2719875
我想你真正問的問題是 - 我如何檢測用戶輸入的URL或來自Angular? –