对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的。首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...于是,Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Class Based View)。...使用类视图是 Django 推荐的做法,而且熟悉了类视图的使用方法后,能够减少视图函数的重复代码,节省开发时间。接下来就让我们把博客应用中的视图函数改成基于类的通用视图。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。...这部分对应着 detail 视图函数中生成评论表单、获取 post 下的评论列表的代码部分。这个方法返回的值是一个字典,这个字典就是模板变量字典,最终会被传递给模板。
对处理首页的视图函数来说,虽然其处理的对象一个是文章,另一个是帖子,但是其处理的过程是非常类似的:首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。...于是,django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图(Generic Class Based View)。...使用类视图是 django 推荐的做法,熟悉了类视图的使用方法后,能够减少视图函数的重复代码,节省开发时间。接下来就让我们把博客应用中的视图函数改成基于类的通用视图。...然后就是通过一些属性来指定这个视图函数需要做的事情,这里我们指定了三个属性: model:将 model 指定为 Post,告诉 django 我要获取的模型是 Post。...在 Django 中 URL 模式的配置方式就是通过 url 函数将 URL 和视图函数绑定。
方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...执行这个视图的时候,self.object将包含视图正在操作的对象....get_context_data(**kwargs):返回显示对象的上下文数据.这个方法的基本实现需要object属性被视图赋值(即使是None).它返回一个包含这些内容的字典: object:这个视图显示的对象...显示用于编辑现有对象的表单的视图,重新显示具有验证错误信息的视图,并且保存对象.这里使用从对象模型自动生成的表单(除非手动制定表单类)....context_object_name = 'employee_detail' #指定获取的模型列表数据保存的变量名。这个变量会被传递给模板。
django自带的view如下表所示: 类名 功能 例子 View 基本View, 可以在任何时候使用 见后面详细介绍 RedirectView 重新定向到其他URL 将访问"/log-in/"的用户重新定向到...方法: get_queryset():获取此视图的对象列表.必须是可迭代或者可以使查询集.默认返回queryset属性.可以通过重写该方法实现动态过滤.让这种方式能够工作的关键点,在于当类视图被调用时...执行这个视图的时候,self.object将包含视图正在操作的对象....显示用于创建对象的表单的视图,通过验证错误信息重新显示视图,并且保存对象....context_object_name = 'employee_detail' #指定获取的模型列表数据保存的变量名。这个变量会被传递给模板。
开发思路 开发一个功能的基本思路是:先新建应用,然后分析功能涉及到哪些业务,从而分析出需要的数据库字段,然后编写模型,之后就是展示阶段,通过url路由配置视图函数,来将模型里面的数据显示出来。...,可以传一些额外内容到模板。...c={{ item.id }} 这里用c代表分类的id,点击后,会传到视图类中,在视图类中,我们使用 get_queryset() 函数,将get数据取出来。...当拿到页码列表,我们继续改写get_context_data()函数。 将获取到的classification_list追加到context字典中。...更加详细的介绍,可参考官方。 当数据传递给模板之后,模板就负责显示出来就行了。
假设用户要访问某篇文章,它会自动解析 blog:detail 这个视图函数对应的 url,并且把 article.pk(文章的主键)传递给detail视图函数,details就是我们在blog/urls.py...] # 新增 get_absolute_url 方法 def get_absolute_url(self): # 这里 reverse 解析 blog:detail 视图函数对应的...('created_time', 'month', order='DESC') # 获取到降序排列的精确到月份且已去重的文章发表时间列表 # 并把列表转为一个字典,字典的键为年份...[d.year].append(d.month) # 模板不支持defaultdict,因此我们把它转换成一个二级列表,由于字典转换后无序,因此重新降序排序 return...在模板文件中我们可以这样使用,views.py中已经指定了context_object_name = "article_list",并且已经在get_queryset()中进行了markdown处理
:视图及模版》 《django入门:Admin管理系统及表单》 终于到最后一部分了,这部分我们将通过 django 自带的通用视图类替换之前写的视图函数,对视图进行重构 2 利用 django 通用视图类创建类视图...1.创建视图类 import markdown from django.shortcuts import render from django.views.generic import ListView...,通过复写该方法,改变默认行为 def get_queryset(self): # 类视图中,从 url 捕获的命名组参数值保存在实例的 kwargs 中,是一个字典...,为模版变量字典,传递给相应的模版 def get_context(self, **kwargs): context = super(PostDetailView, self)....详情界面 有时候如果我们的数据过多,同一页加载全部数据,用户的体验肯定不好,我们通过通用视图类来创建分页,这边为了方便显示,我们会设置每页加载一篇文章 3 通过 ListView 创建分页 1.指定
一、视图层 视图函数(类)简称为视图,就是一个普通的函数(类),它的功能是接收web请求,并返回web响应....) 你需要加一个safe参数 return JsonResponse(l,safe=False) 1.4FBV与CBV Django的视图层由两种形式构成:FBV基于函数的视图(Function...base view)和CBV基于类的视图(Class base view) 1.4.1FBV 我们前面使用的视图函数就是FBV。...模板传值 1.传函数名:{{ 函数名 }} 给HTML传函数名的时候,模板语法会自动加括号调用该函数,并将函数的返回值当做页面展示的依据,注意模板语法不支持函数传参,也就是说只能给页面传无参函数。...2.传类名:{{ 类名 }} 给HTML传类名的时候会自动加括号实例化产生对象,在HTML页面可以进行如下对对象的使用。
内置视图处理对象的定义 对于我们视图处理函数,从最原始的HttpResponse()来进行页面数据的输出,到render()函数进行模板页面的操作,已经是可以满足我们的需求了,但是Django赶脚还不够...常规情况下,对应页面中要展示数据列表的视图,通过继承Django的django.views.generic.ListView对象来实现,页面中要展示数据信息的视图,通过继承Django的django.views.generic.DetailView...,继承了generic.ListView内置类,通过template_name指定了HTML视图,通过context_object_name指定了保存数据的变量,在get_queryset()函数中定义了数据的查询方式...视图对象的使用 经过上述的改造,我们可以看到视图处理函数已经变得非常的简洁,但是存在这样一个问题,IndexView处理类中的数据,我们可以看懂是通过get_queryset()函数进行查询的,然后自动复制给变量...P\d+)/vote/$", views.vote, name="vote"), ] 这里路由配置的过程中,通过as_view()函数,会自动对目标视图类进行封装,将视图处理类中的
django知识分支 1.Cookie工作流程: 浏览器向服务器发出请求,服务器接收到浏览器的请求进行处理,服务器设置一个cookie发送给浏览器,浏览器将cookie保存,当需要再次登录的时候,浏览器将本地的...源码 说明 HttpResponse,HttpResponseRedirect,JsonResponse 类之间的关系 HttpResponse:是django的方法,返回格式为HttpResponse...如果要给定第二个参数,那么该参数必须是为该模板创建 Context 时所使用的字典。...表示url,作用:从url得到相互映射的url_name eg:resolve(to,*args,**kwargs) _get_queryset:该方法可以返回一个量身定制的对象列表 5.编写代码实现通用视图函数...View的get与post接口 一个简单的通用视图函数类 from django.views. generic import View from django.shortcuts import render
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...base.py 保存视图的抽象类,TemplateView和RedirectView,及工具类TemplateResponseMixin的代码; create_update.py 基于函数的通用视图;...date_based.py 基于函数的日期相关通用视图; dates.py 新的基于类的日期相关通用视图。...; list_detail.py 基于函数的列表、显示函数; simply.py 基于函数的工具常用工具视图。...抽象类和常用视图(base.py) 这个文件包含视图的顶级抽象类(View),基于模板的工具类(TemplateResponseMixin),模板视图(TemplateView)和重定向视图(RedirectView
网站:http://python.usyiyi.cn/django/index.html 基于类的内建通用视图 编写Web应用可能是单调的,因为你需要不断的重复某一种模式。...这就是说,通用视图有一些限制。如果你将你的视图实现为通用视图的子类,你就会发现这样能够更有效地编写你想要的代码,使用你自己的基于类或功能的视图。...所有通用视图中有趣的特性来自于修改被传递到通用视图中的”信息” 字典。...然而,通过使用queryset来定义一个过滤的对象列表,你可以更加详细 的了解哪些对象将会被显示的视图中(参见执行查询来获取更多关于查询集对象的更对信息,以及参见 基于类的视图参考来获取全部 细节)。...详见基于类的视图参考。 动态过滤 另一个普遍的需求是在给定的列表页面中根据URL中的关键字来过滤对象。
2.1 改良 URLconf 2.2 改良视图 小结 前言 这一节我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码。...这些视图反映基本的 Web 开发中的一个常见情况:根据 URL 中的参数从数据库中获取数据、载入模板文件然后返回渲染后的模板。...由于这种情况特别常见,Django 提供一种快捷方式,叫做“通用视图”系统。 通用视图将常见的模式抽象化,可以使你在编写应用时甚至不需要编写Python代码。...让我们将我们的投票应用转换成使用通用视图系统,仅仅需要做以下几步来完成转换: 1.转换 URLconf。 2.删除一些旧的、不再需要的视图。 3.基于 Django 的通用视图引入新的视图。...小结 这节终于用上了通用视图,再一次感受到了Django框架,把冗余的东西都做了简化抽象。 定义了通用视图,传递给它指定模版,以及模型,一切就OK了。它比 render 快捷函数更加简洁。 ----
功能: 1.视图中request对象不再是Django中原始的HttpRequest类的对象,而是DRF框架封装的Request类的对象。...request.data保存的是解析之后的请求体的数据,并且已经解析成了字典或类字典,相当于包含Django原始request对象中的request.body/request.POST/request.FILES...request.query_params保存解析之后的查询字符串的数据,并且已经解析成了字典或类字典,相当Django原始request对象中的request.GET 2.响应时可以统一返回Response...数据库查询 属性: queryset(指定视图所使用的查询集) 方法: get_queryset返回视图所使用的查询集 get_object从视图所使用的查询集中查询指定的对象,默认根据pk进行查询。...过滤:需要先安装django-filter并进行注册设置,再在视图中通过 filter_fields设置过滤字段。
可选的要传递给视图函数的默认参数(字典形式) 一个可选的name参数 分组 NOTE: 1 一旦匹配成功则不再继续 2 若要从URL 中捕获一个值,只需要在它周围放置一对圆括号。...将调用函数views.month_archive(request, '2005', '03') 有名分组 上面的示例使用简单的、没有命名的正则表达式组(通过圆括号)来捕获URL 中的值并以位置 参数传递给视图...在更高级的用法中,可以使用命名的正则表达式组来捕获URL 中的值并以关键字 参数传递给视图。 在Python 正则表达式中,命名正则表达式组的语法是(?...代码+模板语法 模版包括在使用时会被值替换掉的变量,和控制模版逻辑的标签 模板语法之变量 渲染变量 {{ }} 举例1: 视图函数 def temp_func(request): l = [111...还可以在视图函数中建一个类的对象列表 然后引用这个列表 视图函数: def temp_func(request): class Person(object): def __init
本文将通过拓展 Django Pagination 来实现下图这样比较完善的分页效果。...首先是从数据库取出文章或者帖子列表,然后将这些数据传递给模板并渲染模板。 于是 Django 把这些相同的逻辑代码抽取了出来,写成了一系列的通用视图函数,即基于类的通用视图。...第二个参数是被调用的视图函数,其类型必须是一个函数。而我们写的 IndexView 视图是一个类,为了将其转换成一个函数,只需要调用其父类中的 as_view 方法即可。...在类视图中,这个需要传递的模板变量字典是通过 get_context_data 获得的, 所以我们复写该方法,以便我们能够自己再插入一些我们自定义的模板变量进去。...""" # 首先获得父类生成的传递给模板的字典 context = super().get_context_data(**kwargs) # 父类生成的字典中已有
现在我们来给博客实现这个效果,让 Django 从数据库中获取全部标签的数据列表,然后在模板中显示它们,并且点击相应的标签,就可以显示该标签下的全部文章列表。...我们自定义了一个模板标签函数 get_categories。...首先是定义视图函数,然后编写模板文件,最后将视图函数和 URL 模式绑定。标签和分类是完全一样的步骤,因此稍微修改一下分类相关的代码就可以用于标签了。...一样,我们使用了类视图。...代码几乎和 CategoryView 是一样的,因此这里不再详细说明,具体请参考 CategoryView 部分的代码和说明 基于类的通用视图:ListView 和 DetailView。
Django源码学习-8-ListView&DetailView通用视图 ?...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。...请求网站页面是get请求,提交表单为post请求,可通过继承View类来自动识别请求,如果为get,自动调用get方法,为post就自动调用POST方法。 ?...ListView的自定义,还可以通过重写get_context_data方法传递额外的参数或内容。...context , 默认将 model / queryset 指定的 objects 添加到模板 context get_queryset() 默认返回属性 queryset from django.views.generic
一个视图函数(类),简称视图,是一个简单的Python 函数(类)包含的是业务逻辑,它接受Web请求并且返回Web响应。 ...然后,Django加载相应的视图,将这个HttpRequest对象作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。 ...CBV(class based view)和FBV(function based view ) 基于函数的view,叫FBV, 还可以把view写成基于类的. ...CBV版添加装饰器 类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器。...Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。
通过学习这两个功能,我们会加深对django中通用视图类的理解与应用。...并分别设置它们的别名为"liked_videos"和"collected_videos",有django基础的同学应该明白,通过别名也可以访问到数据。...CollectListView,我的喜欢的视图类是LikeListView。...,这里同样继承了ListView通用视图类。...并通过配置template_name将数据传递给模板文件users/collect_videos.html。
领取专属 10元无门槛券
手把手带您无忧上云