网站首页  词典首页

请输入您要查询的论文:

 

标题 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下载服务。

 

Copyright © 2004-2023 puapp.net All Rights Reserved
更新时间:2025/3/17 1:16:42