前言
这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题
于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。
微信小程序搜索:Python面试宝典
或可关注原创个人博客:https://lienze.tech
也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习
类视图基类
除去默认的CBV之外,在此基础上,django还额外提供了更加便捷可以使用的视图基类,具备了基本的获取、添加、删除、修改等操作
基本视图
TemplateView
专注于返回一个模版页面
dispatch()
http_method_not_allowed()
get_context_data()
class TemplateView(TemplateResponseMixin, ContextMixin, View):
"""
Render a template. Pass keyword arguments from the URLconf to the context.
"""
def get(self, request, *args, **kwargs):
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
ContextMixin:用以传递上下文变量,只要通过内部的extra_context变量
TemplateResponseMixin:通过给定的上下文字典数据、模版配置、content-type等属性组合在一起,返回关于一个模版页面的response
class TemplateResponseMixin:
template_name = None # 模版的名字
template_engine = None # 模版的引擎
response_class = TemplateResponse # render_to_response返回的响应类
content_type = None # 响应的http类型
- 基础使用方式,直接在路由处指定名字
path('',TemplateView.as_view(template_name='index.html',extra_context={
'title':'测试'}))
- 覆写ContextMixin->get_context_data函数
class TemplateViewTest(TemplateView):
template_name = 'index.html'
def get_context_data(self, **kwargs):
if 'view' not in kwargs:
kwargs['view'] = self
print(kwargs)
if self.extra_context is not None:
kwargs.update(self.extra_context)
kwargs['data'] = [1,2,3,4,5]
return kwargs
通过重定义get_context_data函数的方式,可以在模版返回时传递自定义上下文变量
RedirectView
这个视图专注于实现重定向到指定url的功能
dispatch()
http_method_not_allowed()
get_redirect_url()
- 这是这个视图的源码,非常简单
class RedirectView(View):
"""Provide a redirect on any GET request."""
permanent = False # 是否为永久重定向,可由pattern_name与get_redirect_url()替代
url = None # 要跳转的地址
pattern_name = None # 反向解析的路由命名
query_string = False # 是否传递get传参
def get_redirect_url(self, *args, **kwargs):
"""
Return the URL redirect to. Keyword arguments from the URL pattern
match generating the redirect request are provided as kwargs to this
method.
"""
if self.url:
url = self.url % kwargs
elif self.pattern_name:
url = reverse(self.pattern_name, args=args, kwargs=kwargs)
else:
return None
args = self.request.META.get('QUERY_STRING', '')
if args and self.query_string:
url = "%s?%s" % (url, args)
return url
- 一般情况下可以通过重构get_redirect_url方法,进行重定向之前的工作,比如访问记录+1等等
def get_redirect_url(self, *args, **kwargs):
# do something
return super().get_redirect_url(*args, **kwargs)