En tercer lugar, para lograr el análisis de vistas de origen de varios: Django Ver nativa, rest_framework.views.APIView, rest_framework.generics.GenericAPIView, ViewSetMixin

Una, Django Ver nativa:

  1, inicie el programa, una URL precargado, as_view ejecución (), la función devuelve ver

ruta ( ' libro / ' , views.BookView.as_view ()),

 

  2, los métodos de acceso de usuario para realizar vista, en despacho:

 

 

   3, el envío valor de retorno self.get de ejecución, el envío Vista a la llamada, vista llamada LibroVer clase, por lo que el valor de retorno es el valor de retorno de la expedición de vista, el valor de retorno es el valor de retorno vista de despacho que se devuelve el valor de la página .

 

II: Uso del proceso de solicitud de rest_framework.views.APIView:

re_path ( ' ^ libro / (\ d +) ' , views.BookDetailView.as_view ()),

  1, la sucesión APIView Django Ver nativa, as_view método en la superclase APIView vista retorno as_view del valor de retorno

 

   2, los métodos de acceso de usuario para llevar a cabo vista, en despacho: lograr un método de despacho bajo APIView, por lo despacho bajo APIView tiene prioridad:

 

   3, la ejecución de despacho respuesta devuelve, el valor de retorno es igual a la respuesta vista. vista llamada de encaminamiento de vista, la llamada LibroVer clase de vista, por lo que la vista del valor de retorno es la respuesta, es decir, el valor de retorno de despacho, el valor de retorno de despacho es la vista del valor de retorno, ese valor se devuelve a la página.

  

 

Tres, rest_framework.generics.GenericAPIView: es sólo un simple envasado en APIView, la vista original del código redundante implementado en varias clases diferentes envasados bajo

ruta ( ' autor / ' , views.AuthorView.as_view ()),
clase AuthorView (mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView): 
    queryset = models.Author.objects.all () 
    serializer_class = serializers.AuthorSerializers 

    def get (uno mismo, solicitud, * args, ** : kwargs)
         de retorno auto. lista (petición, * args, ** kwargs) 

    def POST (auto, solicitar, * args, ** kwargs):
         retorno self.create (solicitud, * args, ** kwargs)

  1, con el fin de ver el programa está cargado con el método as_view padre, mixins.ListModelMixin, no encontraron la siguiente mixins.CreateModelMixin, bajo generics.GenericAPIView no lo hizo, sino que hereda APIView, hay al APIView, ejecutarlo, y vuelva a la vista.

 

   2, la implementación de acceso de los usuarios a la vista, vista del valor de retorno es el valor de retorno de envío, tiempo de ejecución envío prioritario realiza bajo APIView, valor de retorno de despacho es el valor de retorno de la vista

 

   3, vista posterior, el valor de retorno de los valores de retorno del método lista para una vista, la clase de vista de lista no implementa el método, con el fin de encontrar al padre

 

   4, el método mixins.ListModelMixin tiene una lista, ejecutarlo, devuelve una secuencia de datos, los datos se devuelven por la vista, y luego volver a la expedición, y a continuación, ver. Pero este proceso es la forma de lograrlo, mira el método get_queryset

 

   5, get_queryset: Este método se encuentra en generics.GenericAPIView

 

  

  6, get_queryset tono lista, el ajuste de la lista de visión, por lo self.queryset es el queryset clase de vista

 

   7, la lista después de que damos al método en la vista de objetos queryset retorno serialización

 

Cuatro, viewsets.ModelViewSet en ViewSetMixin

ruta ( ' libro / ' , views.BookView.as_view ({ ' llegar ' : ' lista ' , ' después ' : ' crear ' })),

  1, la ejecución del programa de as_view conocido, en el que ViewSetMixin, no es as_view Django nativa bajo Ver, en este momento que recibe un parámetro de acción, es decir, al diccionario en la url

  2, el acceso del usuario, la ejecución Vista, esta vez "get", "post" y similares cadena es igual a self.creater self.list

 

   3, paso a paso despacho investigación, no se dio cuenta en ViewSetMixin, GenericAPIView no se dio cuenta, GenericAPIView herencia APIView, se dio cuenta de APIView

 

 

 

   4, ejecutados bajo el APIView despacho, la ejecución vuelve a self.list

 

   5, en busca de self.list, encontrar el método de la lista en clase es ListModelMixin

 

 

 resumen:

  Cuando los hereda de la clase vista de Django views.View orígenes: as_view () devuelve la vista, su valor de retorno es igual a despachar el valor de retorno, el valor de retorno es igual a la clase de vista get despacho, correo o similares se lleva a cabo

  Cuando APIView la clase de vista hereda bajo rest_framework, as_view () todavía se lleva a cabo bajo nativa clase as_view Vista, pero APIView cubriendo método de envío, por lo que el valor de retorno es la vista de la APIView expedición realizada. Se reconstruye una nueva solicitud

Debido a lo anterior, cuando dos maneras de alcanzar la vista, demasiado código redundante, ya que la clase mixins para simplificar el código:

  La herencia y la clase ListCreateAPIView RetrieveUpdateDestroyAPIView, sólo tienen que proporcionar objetos QuerySet se pueden serializar clase. Expedición y ejecución APIView as_view consistente y sólo el último paso en vista a obtener, publicar o similares se encapsula en la clase mixins.

  viewsets.ModelViewSet clase se puede lograr por medio de peticiones de URL todo sólo puede realizarse con un VBC. Principalmente ejecución as_view ya no es un as_view nativa bajo la clase View, pero as_view bajo ViewSetMixin. Se devuelve la vista cuando el usuario accede ejecutado, realice el método del diccionario correspondiente a la URL después de tratamiento de control se realiza para la expedición, que puede encontrar las clases y métodos de ejecución correspondientes en los métodos mixins de clase en vista, por ejemplo self.list, auto .Create

 

Supongo que te gusta

Origin www.cnblogs.com/aizhinong/p/12543799.html
Recomendado
Clasificación