美文网首页
Django中类视图的使用

Django中类视图的使用

作者: slowrabbit | 来源:发表于2016-04-24 21:44 被阅读564次

如果看过很多的Django的开源项目,发现开始在views.py中的都是以函数def XXX(request):的方式做处理。这种是很简单,但是对于OOP思想来讲,这样是有点out-dated了。Django现在更常用的是基于类的视图做处理。
基于类的视图,说起来简单,但是也费劲。我再一一道来,_

基于类的视图使用

1. urls.py的改变

如果使用的是视图类,那么在url中处理的方法需要改为`XXView.as_views()`。这个相当于是一个入口,初始化一个view类的实例,同时调用dispatch方法。

2. views.py的改变

你可以继承很多类,但是基本的可以用templateview,但常用的是自己建立一个类(父类是View)。
1). 设定类属性,比如: form_classtemplate_name
2). 可以覆盖get、post方法,例如最简单的:

def get(self, request, *args, **kwargs):
        form = self.form_class()
        return render(request, self.template_name, {'form': form})

3). post方法常常要求一些限制,比如原子操作,或者需已登录:
如果是原子操作,在post方法前使用@transaction.atomic;
如果是需登录,抱歉,直接将login_required是不行的。正确的做法是重写dispatch方法:
@method_decorator(login_required) def dispatch(self, request, *args, **kwargs): return super(YourView, self).dispatch(request, *args, **kwargs)

4). 返回

  • 如果是指定某个界面,使用:
return render(request, self.template_name, {
            'form': form,
        })
  • 如果是重定向到其他页面,使用redirect。使用next是,比如直接点某个界面,但是需要先登录,所以网址会先到登录界面。此时你注意网址的get参数是有next的,表示下一个要去的网址。:
return redirect(request.GET['next'] if 'next' in request.GET else 'home')

结语

当然常常view类是和form类一起使用的(因为提交表单的关系),下一篇会讲使用到的form类。

相关文章

  • 类似图/中间键

    在Django中也可以使用类来定义一个视图,称为类视图。使用类视图可以将视图对应的不同请求方式以类中的不同方法来区...

  • 2.7 django类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比...

  • 最浅显易懂的Django系列教程(31)-类视图

    类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特性,比...

  • Django学习-第十二讲:视图高级(二)类视图、模板视图、列表

    1. 类视图 在写视图的时候,Django除了使用函数作为视图,也可以使用类作为视图。使用类视图可以使用类的一些特...

  • 基于"类"的视图(1)---View

    在写视图的时候,Django除了使用'函数'作为视图,也可以使用'类'作为视图。使用类视图可以使用类的一些特性,比...

  • Django ListView DetailView等基于类的视

    场景: Django开发中,如果我们使用了类视图,如:ListView、DetailView、UpdateView...

  • Django类视图笔记整理

    Django基于类的视图 1.基于类的视图简介 基于类的视图使用Python 对象实现视图,它提供除函数视图之外的...

  • Django-类视图

    一、思考 如何在一个视图中处理get和post请求 二、类视图使用 在Django中也可以使用类来定义一个视图,称...

  • Django中类视图的使用

    如果看过很多的Django的开源项目,发现开始在views.py中的都是以函数def XXX(request):的...

  • 3-基于类的视图-Django REST框架

    3-基于类的视图-Django REST框架 教程3:基于类的视图 我们也可以使用基于类的视图而不是基于函数的视图...

网友评论

      本文标题:Django中类视图的使用

      本文链接:https://www.haomeiwen.com/subject/bsmfrttx.html