drf获取请求过来时的request

0. 获取请求过来时的request

"""

获取请求时带过来的request,结合drf认证组件,判断用户的登录状态,

来获取用户的粒度操作,比如点赞/收藏/关注 的取消与私有化,

示例:用在序列化中的字段钩子方法

"""
from rest_framework import serializers
from rest_framework.generics import ListAPIView
from api.serializer.articlelist import ArticleListSerializer
from api import models

class ArticleSerializer(serializers.ModelSerializer):

    faver = serialiers.SerializerMethodField()

    class Meta:
        model = models.ArticleDetail
        fields = "__all__"

    def get_faver(self,obj):

        request = self.context["request"]

        if not request.user:
            return False
        exists = models.ArticleDetail.objects

class ArticleListView(ListAPIView):
    queryset = models.ArticleDetail.objects
    serializer_class = ArticleListSerializer

1. get方法(ListAPIView)

class ListAPIView(mixins.ListModelMixin,
              GenericAPIView):
    """
    Concrete view for listing a queryset.
    """
    def get(self, request, *args, **kwargs):
        return self.list(request, *args, **kwargs)

        

2. list方法(ListModelMixin)

class ListModelMixin:
    """
    List a queryset.
    """
    def list(self, request, *args, **kwargs):
        queryset = self.filter_queryset(self.get_queryset())

        page = self.paginate_queryset(queryset)
        if page is not None:
            serializer = self.get_serializer(page, many=True)
            return self.get_paginated_response(serializer.data)

        serializer = self.get_serializer(queryset, many=True)
        return Response(serializer.data)

    

3. get_queryset方法(GenericAPIView)

class GenericAPIView(views.APIView):

    queryset = None
    serializer_class = None

    def get_queryset(self):

        assert self.queryset is not None, (
            "'%s' should either include a `queryset` attribute, "
            "or override the `get_queryset()` method."
            % self.__class__.__name__
        )

        queryset = self.queryset
        if isinstance(queryset, QuerySet):
            # Ensure queryset is re-evaluated on each request.
            queryset = queryset.all()
        return queryset

    

4. get_serializer(GenericAPIView)

def get_serializer(self, *args, **kwargs):
    """
    Return the serializer instance that should be used for validating and
    deserializing input, and for serializing output.
    """
    serializer_class = self.get_serializer_class()

    kwargs['context'] = self.get_serializer_context()

    return serializer_class(*args, **kwargs)
    

5. get_serializer_class(GenericAPIView)

def get_serializer_class(self):
    """
    Return the class to use for the serializer.
    Defaults to using `self.serializer_class`.

    You may want to override this if you need to provide different
    serializations depending on the incoming request.

    (Eg. admins get full serialization, others get basic serialization)
    """
    assert self.serializer_class is not None, (
        "'%s' should either include a `serializer_class` attribute, "
        "or override the `get_serializer_class()` method."
        % self.__class__.__name__
    )

    return self.serializer_class

6. get_serializer_context(GenericAPIView)

def get_serializer_context(self):
    """
    Extra context provided to the serializer class.
    """
    return {
        'request': self.request,
        'format': self.format_kwarg,
        'view': self
    }

    

原文地址:https://www.cnblogs.com/daviddd/p/12202498.html

时间: 2024-07-29 13:55:06

drf获取请求过来时的request的相关文章

六、django分面、获取请求参数

一.获取请求参数 def index(request): limit = request.GET.get('limit',20) #get请求获取请求参数 page = request.GET.get('page',1) username = request.POST.get('name','nana') #post请求获取请求参数 二.分页的方法 from django.core.paginator import Paginator #实现分页的类 l = list(range(100)) #

Request获取请求路径方法介绍

Request对象通过以下方法来获取请求路径. (1)String getServerName():获取服务器名:localhost (2)String getServerPort():获取服务器端口号:8080 (3)String getContextPath():获取项目名:Test (4)String getServletPath():获取Servlet路径:/login (5)String getQueryString():获取参数部门,即问号后面的部分:username=zhangsa

request获取请求头和请求数据

1 package cn.itcast.request; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.io.PrintWriter; 6 import java.lang.reflect.InvocationTargetException; 7 import java.util.Enumeration; 8 import java.util.Map; 9 10 import javax.s

request 获取请求参数

/** * 根据request获取请求的用户参数 * @return * @return */ protected <T> T getParamConvertEntity(Class cls) { Object obj = null; try { obj = cls.newInstance(); Map paramMap = new HashMap(); paramMap.putAll(request.getParameterMap()); //设置用户ID paramMap.put(&quo

常用Request对象获取请求信息

Request.ServerVariables(“REMOTE_ADDR”) ‘获取访问IPRequest.ServerVariables(“LOCAL_ADDR”) ‘同上Request.ServerVariables(“SERVER_NAME”) ‘获取服务器IPRequest.ServerVariables(“HTTP_REFERER”) ‘获取访问来源页面Request.ServerVariables(“OS”) ‘获取操作系统request.ServerVariables(“APPL_

request功能获取请求行数据

1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 2 //获取请求方式 3 String method=request.getMethod(); 4 System.out.println(method); 5 //(*重要)获取虚拟路径 6 String contextpath=request.getCont

django request 获取请求的URL

1. get_full_path() 获取的url路径包含参数 2.path_info 获取的路径不包含参数 注意:获取的路径都不包含协议 IP 和端口 3.补充 sesssion http://127.0.0.1:8000/admin/login/?next=/admin/ 1.登录admin /admin/ 使用 path_info 获取 /admin/ django request 获取请求的URL request.get_host() 获取请求地址 request.path 获取请求的p

[Java][Web]Request 获取请求头和数据

获取方式一 InputStream in = request.getInputStream(); int len = 0; byte buffer[] = new byte[1024]; while((len = in.read(buffer)) > 0) { System.out.println(len); System.out.println(new String(buffer,0,len)); } 获取方式二 String value  = request.getParameter("

python DRF获取参数介绍

DRF获取参数的方式 例如url url(r'^demo/(?P<word>.*)/$', DemoView.as_view()) 在类视图中获取参数 url:http://127.0.0.1:8000/demo/aaa/?bbb=bbb&ccc=ccc&ccc=CCC form:{"body":"body"} JSON:{"body":"body"} class DemoView(APIView)