请教Django类视图中return super().get(request, *args, **kwargs)的作用
问题
我想理解代码 return super().get(request, *args, **kwargs) 的含义。这段代码位于Django项目的views.py文件的类视图方法中,示例代码如下:
class HomePage(TemplateView): template_name = "index.html" def get(self, request, *args, **kwargs): if request.user.is_authenticated: return HttpResponseRedirect(reverse("afterlogin")) return super().get(request, *args, **kwargs)
我已知该方法会检查当前用户是否已认证,若已认证则重定向至其他页面,但想了解上述代码行的具体作用。
回答
咱们一步步拆解这行代码的作用,很容易理解:
super()是啥?
在Python继承体系里,super()就是用来调用父类(超类)方法的工具。你的HomePage类继承自Django的TemplateView,所以这里的super()就指向了TemplateView这个父类。调用父类的
get()方法
当用户未认证时,代码走到这行,就会触发父类TemplateView里原本的get()方法。父类
get()方法干了啥?
对于Django的TemplateView来说,它的get()方法核心工作就是:- 处理GET请求的基础逻辑
- 加载你指定的
template_name(也就是这里的index.html) - 把模板需要的上下文数据准备好
- 最终返回一个渲染完成的页面响应,让用户看到你设置的首页
总结一下:这行代码就是**“如果用户没登录,就交给父类去做它原本该做的事——渲染并返回咱们指定的首页模板”**。你重写 get() 方法是为了加登录判断,但在不需要跳转的情况下,得把逻辑交还给父类的默认实现,不然 TemplateView 自带的模板渲染功能就失效啦。
内容的提问来源于stack exchange,提问作者Salam Qais
相关产品推荐
相关产品推荐

