django转发重定向
由于每个view都接受一个HttpRequest并返回HttpResponse,由于HttpRequest是由系统定制的,我们只需要知道里面有哪些常用的内容即可.Response是由我们手动创建的,所以需要知道几种常用的方式的作用.
from django.http import HttpResponse, HttpResponseRedirect
from from django.core.urlresolvers import reverse
HttpResponse,是其他转发的父类,由于只是相当于返回一个字符串,所以在返回简单的页面或文本,图像(注明MIME)等内容时可以使用
HttpResponseRedirect, 常用的转发函数,可以传递的参数有,相对地址,绝对地址.常用的是通过反查得到url,reverse('namespace:name')
简洁化的操作:
render()/redirect()
render与HttpResponseRedirect的区别是,当使用render转发时,他不会修改url,只是替换页面,所以适合定向到对应的页面中去,常规操作适合,简单,但是不适合转发,不改变url让人很难适应
redirect() 用法和结果与使用HttpResponseRedirect一样,而且还和render在同一个模块下,方便导入,如果不需要使用HttpResponseRedirect构建复杂的返回的话使用这个很方便
因为redirect返回的就是HttpResponseRedirect对象,并且接受的参数有*args,**kwargs,所以可以代替HttpResponseRedirect完成很多操作
该方法有三种传参方式
通过传递一个对象;将调用get_absolute_url() 方法来获取重定向的URL:
通过传递一个视图的名称,可以带有位置参数和关键字参数;将使用reverse() 方法反向解析URL:
return redirect('some-view-name', foo='bar')
在这种情况下
HttpResponseRedirect(reverse('mainpage:index'))
与:
redirect('mainpage:index')
是一样的,使用Redirect更简单,不用导入,不用手动反查,不用去记很长的一段名字
传递要重定向的一个硬编码的URL:
假设有当前路径http://www.baidu.com/path
/xx/yy 根路径下的xx/yy 即为http://www.baidu.com/xx/yy
xx/yy 将当前路径添加xx/yy 即为http://www.baidu.com/path/xx/yy
完整的路径 转到完整的路径下 如:http://www.baidu.com/ 将跳转到首页