Django笔记&教程 2-4 视图常用
Django 自学笔记兼学习教程第2章第4节——视图常用
点击查看教程总目录
1 - shortcut
视图函数需要返回一个HttpResponse
对象或者其子类对象。
不过很多时候直接手写建立一个HttpResponse
对象比较麻烦。
所以Django实现了建立HttpResponse
对象的一些快捷方法:
这些方法收集在django.shortcuts
包中。
比如下一章将会频繁使用的render
方法,
还有本章第二部分会介绍的redirect
方法,
都是django.shortcuts
包中的。
django.shortcuts
官方文档:shortcuts
django.shortcuts
官方介绍如下:
The package django.shortcuts collects helper functions and classes that “span” multiple levels of MVC.
In other words, these functions/classes introduce controlled coupling for convenience’s sake.
2 - reverse 反向解析
知道urlpattern名,可通过reverse
函数反向解析出对应的url。
该方法常在模型的get_absolute_url()
、get_success_url()
中用到,然后用于重定向,一般直接使用本文第三部分的重定向语法覆盖实现这些。
reverse
方法位于django.urls
中,但也可以从django.shortcuts
包中导入。
其使用语法为:
reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None)
使用示例:
比如有url:
path('login/', views.home, name="login"),
path('user/login/<slug:kind>', views.login, name="login"),
那么在django交互式命令行下,效果如下
>>> reverse("login")
'/user/login/'
>>> reverse("login", kwargs={'kind': 'student'})
'/user/login/student'
3 - 重定向
重定向场景:用户未登录情况下,访问需要登录才能访问的url,往往需要重定向到登录页。
重定向代码一般写在视图函数中:视图函数返回一个重定向对象django.http.HttpResponseRedirect
。
不过我们一般使用shortcut里的redirect
方法来获得一个重定向对象。
语法如下:
redirect(to, *args, permanent=False, **kwargs)
根据传递的参数返回一个对应的HttpResponseRedirect。
传入的参数可以是:
- 一个模型(
model
): 模型的get_absolute_url()
方法将被调用。 - 一个视图名,可能带有参数: 将调用
reverse()
函数来反向解析名称。 - 绝对或相对URL: 将按原样用于重定向位置。
举例:
比如有url:
path('user/login/<slug:kind>', views.login, name="login"),
那么在django交互式命令行下,效果如下
>>> from django.shortcuts import redirect
>>> redirect("login", kind='student')
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/user/login/student">
>>> redirect("/user/login/student")
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/user/login/student">