Django REST Framework——5. 视图与路由

文章目录


基于类的视图的一个关键好处是:它们允许您组合一些可重用的行为。而DRF通过提供大量预构建的视图来利用这一点,为我们提供了一些常用的模式,我们要做的就是选择合适的视图类进行继承即可。

一、APIView类

DRF提供的APIView类是Django的View类的子类。它和一般的View类有以下不同:

  • 被传入到处理方法的请求不是Django的HttpRequest类的实例,而是DRF的Request类的实例。
  • 处理方法可以返回DRF的Response,而不只是Django的HttpRequest。视图会管理内容协议,给响应设置正确的渲染器。
  • 任何APIException异常都会被捕获,并且传递给合适的响应。
  • 传入的请求将经过身份验证,并在将请求分派给处理方法之前运行适当的权限或限频检查。

使用APIView类和使用一般的View类非常相似,通常,传入的请求会被分发到合适的处理方法比如get()post()。我们之前一直的视图,都是继承了APIView

二、GenericAPIView类

此类是APIView的子类,对APIView类进行了扩展,添加了一些具体通用视图(后面会学到,每个视图都有具体的应用场景)都会用到的的方法。而每个具体通用视图则是通过将GenericAPIView与一个或多个mixin类组合来构建的,即GenericAPIView与这些mixin类是具体通用视图的父类。

2.1 常用属性

  • queryset:

    设置从该视图返回对象的查询集。 比如queryset = Book.objects,之后就会从该查询集中获取模型对象。

    必须设置该属性或者重写get_queryset()方法

    如果要覆盖一个视图方法,那么就应该调用get_queryset()方法而不是直接访问该属性,这是很重要的。因为DRF第一次求出queryset的值后,就会缓存起来给所有后续的请求使用。

  • serializer_class:

    设置用于验证、反序列化输入以及序列化输出的Serializer类必须设置此属性或者重写get_serializer_class() 方法

  • lookup_field:查找单个模型对象时,参考的字段。默认是'pk'

    也就是说,从路由捕获到参数命名为pk后,传入视图中,在按照pk获取模型对象时,DRF会自动将pk作为查找条件找出目标对象。不需要我们再去写filter(pk=pk)了。

2.2 常用方法

  • get_object(self)

    queryset属性设置的模型类获取基本查询集,然后使用lookup_field属性过滤基本查询集,最后返回一个对象实例。

  • get_queryset(self)

    返回由queryset属性指定的模型类的查询集。

  • get_serializer_class(self)

    默认返回serializer_class属性的值,即指定的序列化器类。

  • get_serializer(self, instance=None, data=None, many=False, partial=False)

    返回serializer_class属性指定的序列化器类的实例。

我们还是通过一个书籍相关的例子来理解上面的方法(模型类和序列化器类不是重点,自己写啊

上一篇:Windows 2008 R2 安装.NET Framework 3.5


下一篇:2022-01-23-Spring学习step001