Django 自定义重定向规则 RedirectView

1,942 阅读1分钟

MedusaSorcerer的博客


在使用 Django 开发 API 的时候难免会遇到一些特殊的请求方式, 例如:

  • 请求 /user/index.html 需要重定向到 /user/static/index.html
  • 请求 /user/js/base.json 需要重定向到 /user/static/js/base.js

在路由配置中我们可以使用 url("user/.*\.(html|json)$", Redirect.as_view()) 进行路由转发, 这个时候你可能有点疑惑, Redirect 的导入问题, 因为这个是继承自 RedirectView 的自定义类。

Redirect

class Redirect(RedirectView):
    def get(self, request, *args, **kwargs):
        self.url = 'user/static' + request.path[4:]
        return super().get(request, *args, **kwargs)

其实你只需要修改 self.url 的规则即可实现你的重定向路由, 在父类中 get(self, request, *args, **kwargs) 方式是将 def get_redirect_url(self, *args, **kwargs) 的路径构成的响应对象返回, 所以你需要指定 self.url 属性的时候就可以达到你想要的效果, 当然你可以根据你的实际情况进行各种个性化判断。