Django REST Framework注册后重定向登录页遇Unsafe redirect报错解决方法
解决Django注册后重定向的"Unsafe redirect"错误
出现这个错误是因为HttpResponseRedirect接收的参数需要是具体的URL路径或完整URL,你直接传入命名URL别名accounts:login时,其中的冒号会被识别成协议前缀(类似http://),从而触发"Unsafe redirect"的安全校验错误。
可以用以下两种方法解决:
方法1:使用reverse解析命名URL
先导入reverse函数,将命名URL解析为正确的路径字符串后再传给HttpResponseRedirect:
from django.urls import reverse from django.http import HttpResponseRedirect from rest_framework.views import APIView class RegisterUser(APIView): serializer_class = RegisterSerializer def post(self, request): serializer = self.serializer_class(data=request.POST) serializer.is_valid(raise_exception=True) serializer.save() return HttpResponseRedirect(reverse('accounts:login'))
方法2:使用redirect快捷函数
redirect是Django提供的快捷函数,内部已经处理了命名URL的解析逻辑,用法更简洁:
from django.shortcuts import redirect from rest_framework.views import APIView class RegisterUser(APIView): serializer_class = RegisterSerializer def post(self, request): serializer = self.serializer_class(data=request.POST) serializer.is_valid(raise_exception=True) serializer.save() return redirect('accounts:login')
这两种方法都能将命名URL别名转换为合法的URL路径,避免触发不安全重定向的错误。
内容的提问来源于stack exchange,提问作者h_python_1368
相关产品推荐
相关产品推荐

