这是我的观点:基于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? –