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):

    def post(self, request, aaa):
        aaa = aaa  # 獲取url路徑中的參數
        bbb_str = request.query_params.get('bbb')  # 獲取一個查詢字符串的參數
        ccc_list = request.query_params.getlist('ccc')  # 獲取多個查詢字符串參數
        # 請求體中的參數
        # 如果通過form表單傳遞,獲取出來是QueryDict,通過.dict()轉換成python的字典
        form_body = request.data
        # 如果通過JSON傳遞,獲取出來就是字典,例如{'body':'body'}
        # json_body = request.data
        print(aaa)
        print(bbb_str)
        print(ccc_list)
        print(form_body.dict())
        # print(json_body)
        return Response({'message': 'OK'})
結果
aaa
bbb
['ccc', 'CCC']
{'body': 'body'}
URL路徑參數/查詢字符串不區分請求方式,GET/POST/PUT等都一樣
serializer中獲取參數
# view
class DemoView(GenericAPIView):
    serializer_class = DemoSerializer

    def post(self, request, aaa):
        serializer = self.get_serializer(data=request.query_params)
        serializer.is_valid(raise_exception=True)
        return Response({'message': 'OK'})

# serializer
class DemoSerializer(serializers.Serializer):
    bbb = serializers.CharField()
    ccc = serializers.ListField()  # List

    def validate(self, attrs):
        aaa = self.context['view'].kwargs.get('aaa')  # 獲取路徑參數
        bbb = attrs['bbb']  # 獲取查詢字符串
        ccc = attrs['ccc']  # 獲取以多個key相同的查詢字符串
        # 獲取當前登陸的對象,需要根據場景進行使用
        # user = self.context['request'].user
        print(aaa)
        print(bbb)
        print(ccc)
        return attrs

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM