request

Django的原生request:

    浏览器 ------------- 服务器

    "GET url?a=1&b=2 http/1.1 user_agent:Google contentType:urlencoded "
    "POST url http/1.1 user_agent:Google contentType:urlencoded a=1&b=2"


  如果是GET请求:    

  #http://127.0.0.1:8000/books/?a=1&b=2
  print(request._request.body) #b'' request._request.body取的是请求体的数据,GET请求没有请求体 为空
  print(request._request.GET) #<QueryDict: {'a': ['1'], 'b': ['2']}>#取到的是url中的数据

    
  request.get :拿到的是url?后面的数据
  request.body: a=1&b=2 拿到的是请求体里面的数据,没有经过解析的
  request.POST:
          会判断 contentType是不是urlencoded:如果是转换成字典格式 a=1&b=2----->{"a":1,"b":2}
          如果发的json数据,request.POST取不到值,request.body取到的是json字符串


from rest_framework.views import APIView
class PublishView(APIView):
def get(self,request):

# restframework
# 取数据
# print("request.data", request.data)
# print("request.data type", type(request.data))
# print(request._request.GET)
# print(request.GET)
# 序列化
# 方式1:
# publish_list=list(Publish.objects.all().values("name","email"))

# 方式2:
# from django.forms.models import model_to_dict
# publish_list=Publish.objects.all()
# temp=[]
# for obj in publish_list:
# temp.append(model_to_dict(obj))

# 方式3:
# from django.core import serializers
# ret=serializers.serialize("json",publish_list)

# 序列组件
publish_list = Publish.objects.all()
ps = PublishModelSerializers(publish_list, many=True)
return Response(ps.data)

def post(self,request):
# 取数据
# 原生request支持的操作
# print("POST",request.POST)
# print("body",request.body)
# # print(request)
# print(type(request))
# from django.core.handlers.wsgi import WSGIRequest

获取旧的request为request._request.POST  request._request.GET
# 新的request支持的操作
# print("request.data",request.data)
# print("request.data type",type(request.data))字典类型


#
# post请求的数据
ps = PublishModelSerializers(data=request.data)
if ps.is_valid():
print(ps.validated_data)
ps.save() # create方法
return Response(ps.data)
else:
return Response(ps.errors)

原文地址:https://www.cnblogs.com/chvv/p/10039219.html