HttpResponseRedirect

  • 当一个逻辑处理完成后,不需要向客户端呈现数据,而是转回到其它页面
    • 如添加成功、修改成功、删除成功后显示数据列表,而数据的列表视图已经开发完成,此时不需要重新编写列表的代码,而是转到这个视图就可以
    • 从一个视图转到另外一个视图,就称为重定向
  • Django中提供了HttpResponseRedirect对象实现重定向功能
    • 这个类继承自HttpResponse,被定义在django.http模块中
    • 返回的状态码为302

重定向演练

需求:登陆成功后,重定向到另外一个视图

  • 配置URLconf

      # 登陆成功后重定向
      url(r'^login/$', views.login),
      url(r'^redirect/$', views.redirect),
    
  • 视图

      # 登陆
      def login(request):
          return render(request, 'Book/login.html')
    
  • 模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>login</title>
</head>
<body>

<form action="/redirect/" method="post">

    {# Django项目默认会做CSRF安全验证 #}
    {% csrf_token %}

    <input type="text" name="uname">
    <br>
    <br>
    <input type="password" name="upassword">
    <br>
    <br>
    <input type="submit" value="登陆">

</form>

</body>
</html>
  • 重定向视图:(登陆成功后重定向:由登录页转向ajax请求页)

      # 登陆成功后重定向:由登录页转向ajax请求页
      def redirect(request):
         return HttpResponseRedirect('/ajax/')
    

    提示:重定向简写

      from django.shortcuts import redirect
    
      def redirect(request):
          return redirect('/ajax/')