标题 | Django 框架中通用类视图的用法 |
范文 | 杨刚 摘要:Django是一个开源的Web开发框架,它为Web开发中的常见问题提供了完整的解决方案。Django定义了一些基于类的通用视图,用于解决一些常见的Web任务。该文主要介绍了类视图的基本用法以及几个常用的类视图。 关键词:Django;类;Web 中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)13-0103-02 1类视图的基本使用 Django中的视图是一个可调用对象,在Django的早期版本中,视图用函数来实现。随着Django的不断发展,Django的技术团队提供了新的实现,用类来表示视图,并且针对Web开发中的常见任务,定义了大量的通用类视图。使用基于类的视图,可以更好的构建视图的内在逻辑,并且利于继承和混合重用。使用基于类的视图主要用2种方式: 1)在URLconf 中的简单用法 如果只是修改类的一些简单的属性,在URLconf 中直接使用基于类的视图,是最简单职业的方法。可以将要修改的属性直接传递给类视图的as_view() 方法: from django.conf.urls import url from django.views.generic import TemplateView urlpatterns=[url( r'^home/',TemplateView.as_view(template_name="about.html))] 在这个例子中,我们设置TemplateView的template_name属性。可以使用类似的方法覆盖RedirectView 的query_string属性。 2)子类化通用视图 使用类视图的第二种方法是继承一个已经存在的类视图,然后在子类中覆盖其属性或方法、例如,考虑只显示一个模板home.html 的视图。Django 有一个通用视图TemplateView来做这件事,所以我们可以简单地子类化它,并覆盖模板的名称: fromdjango.views.genericimportTemplateView classHomeView(TemplateView): template_name="home.html" 然后我们只需要添加这个新的视图到我们的URLconf 中。TemplateView是一个类不是一个函数,所以我们将URL 指向类的as_view()方法,它让基于类的视图提供一个类似函数的入口: fromdjango.conf.urlsimporturl fromsome_app.viewsimportAboutView urlpatterns=[url(r'^about/',AboutView.as_view())] 2几种常用的类视图 针对Web开发中的常见任务,Django定义了一组基础视图、一组通用显示视图以及一组通用编辑视图等类视图。下面依次介绍几个常用的类视图。 1)TemplateView TemplateView是基础视图。该视图主要用于渲染一个给定的模板。它的template_name属性用于指定模板,get_context_data方法用于获得显示在模板中的数据。 classHomePageView(TemplateView): template_name="home.html" defget_context_data(self,**kwargs): context=super(HomePageView,self).get_context_data(**kwargs) context['latest_articles']=Article.objects.all()[:5] returncontext 2)ListView ListView是一个通用显示视图,主要用于显示一个对象列表。可以通过重写它的get_queryset方法,来获取要显示的列表。 class ObjectList(ListView): def get_queryset(self): modelobj = get_model(self.kwargs['app'], self.kwargs['model']) # 获得url后的参数 kwargs = self.request.GET.dict() return modelobj.objects.filter(**kwargs) 在get_queryset方法中,使用get_model方法可以动态的根据app和model来获取模型,列表的查询参数可以写在url的后面。 3)DeleteView DeleteView是一个通用编辑视图,主要用于删除一个指定的对象。可以通过重写它的get_object方法,来指定要删除的对象。 class ObjectDelete(DeleteView): def get_object(self): modelobj = get_model(self.kwargs['app'], self.kwargs['model']) obj = modelobj.objects.get(pk=self.kwargs['pk']) return obj 4)CreateView CreateView也是一个通用编辑视图,主要用于创建一个对象。可以通过重写它的get_initial进行初始化,可以通过重写get_template_names方法来指定模板。 class ObjectCreate(CreateView): def get_initial(self): return self.request.GET.dict() def get_template_names(self): '''如果模型中制定了模板,则使用该模板,否则使用默认的模板''' modelobj = get_model(self.kwargs['app'], self.kwargs['model']) if hasattr(modelobj.Display, 'create_template'): return modelobj.Display.create_template else: return ['xadmin/object.html'] 通过使用Django中的通用类视图,可以大幅提高工作效率。 参考文献: [1] 杨志庆.基于Django的Blog系统的开发与实现[J].机电一体化,2013(9). |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。