#mysite/views.pyfromdjango.shortcutsimportrender,HttpResponsefromdjango.views.genericimportViewclassMyView(View):defget(self, request):returnrender(request,'about.html')defpost(self, request):returnHttpResponse('post it')defhead(self, request):returnHttpResponse('head it')#mysite/urls.pyfrommysite...
既然尝试了使用class-based view,那么接下来就把项目中的function view重构一下吧.在views.py中,我们写了post_list和post_detail两个视图函数 在post_list中,我们处理了多个URL的逻辑,如果使用class-based view的话,可以使用继承来复用代码,将他们拆开. 对于post_list中的所有模板,都会显示分类导航,侧边栏和底部导航...
使用Class-based View有两种方法,一个是在as_view()中直接传入参数,它会覆盖掉该View原有的属性,这种情况只适用于处理不复杂的情况,另外一个就是直接继承该View,然后覆盖其中的方法,属性等,实现自己想要的功能,如: from django.views.generic import TemplateView class AboutView(TemplateView): template_name = "...
视图远不只是个函数,Django提供了一些可用作视图的类的示例,允许你通过继承和复用构建自己的视图并且复用这些代码。虽然接下来还会介绍一些用于任务的通用视图,但你可能想自己设计可复用的视图结构,以便针对某些特殊场景。详情请见 class-based views reference documentation</ref/class-based-views/index> 。
有朋友反映说对于 Django 的 class-based-view(基于类的通用视图)还有很多不明白的地方,因此接下来我们会出一系列文章讲解几个常用的基于类的视图的用法,并在适当的源码层面下讲解其机理和如何按照我们的需要拓展它。 本教程首先介绍两个 Blog 项目中遇到的通用视图:ListView和DetailView。从名字我们可以对其功能略窥一...
1. Class-based Views 类视图并不是要替换函数视图,但是类视图可以简化代码和实现代码复用 装饰类视图 2种方式 装饰.as_view() fromdjango.contrib.auth.decoratorsimportlogin_required,permission_requiredfromdjango.views.genericimportTemplateViewfrom.viewsimportVoteView ...
(查看 执行查询 来获取更多 QuerySet 对象的信息,查看 class-based views reference 来获取完整信息) 举一个例子,我们想通过出版日期排序一个书籍列表,最新的排第一: from django.views.generic import ListView from books.models import Book class BookList(ListView): queryset = Book.objects.order_by('-...
一、Class-Based Views Vs Function-Based Views 从字面上理解,Function-Based Views,即“ 基于函数的视图 ”。 在入门阶段,我们用到的都是Function-Based Views,于是我们会看到熟悉的: def example(request): if request.method == 'POST': # else: ...
在django很老的版本时候,只有function-based views,但问题是是基于函数的视图太过于简单,很难去拓展,自定义它们,没法达到视图重用的地步。 为了解决这个问题,class-based views诞生了。所以,现在的django有基于函数或者基于类这两种视图。 当我们将class-based views加入到路由配置的时候。通常使用View.as_view()类方法...
FBV(function based view):就是将业务逻辑写在一个函数中 ---views.py 1 from django.shortcuts import render,Httpresponse,redirect 2 from app_name import models 3 4 def add_class(request): 5 if request.method =='POST': 6 class_name = request.POST.get('class_name') 7 ...