DRF配置步骤
- pip安装
djangorestframework
markdown
django-filter
- 在settings.py中激活
INSTALLED_APPS = [
……
'rest_framework'
]
DRF中的请求和响应
-
Django-request
类型:WSGIRequest
方式:GET、POST -
Django-response
HttpResponse、render、redirect、JsonResponse -
DRF-request
类型:rest_framework.request
request.POST:POST
request.data:POST\PUT\PATCH -
DRF-response
Response(data)
DRF使用
api_view
@api_view(["GET", "POST", ...])
①限定请求方式;
②改变request类型。
请求request
-
接收POST\PUT\PATCH
params = request.data.dict()
-
接收GET
request.query_params
响应response
from rest_framework.response import Response
from rest_framework import status
def xx:
query_set = User.objects.all()
# 序列化,结果为字符串
data = serialize("json", query_set)
# 转化为json
data = json.loads(data)
return Response(data, status=status.HTTP_200_OK)
- Response会直接将json格式的数据进行排版:
- csrf在drf中失效
- 状态码:
默认200
状态码的官方解释
响应参数:drf序列化器
-
django中的序列化
django.forms.model_to_dict(针对模型对象)
django.core.serializers.serialize(针对queryset)
-
drf中的序列化
from rest_framework.serializers import Serializer(类似form)
from rest_framework.serializers import ModelSerializer(类似modelform)
-
Serializer
- 在应用下新建
serializers.py
from rest_framework import serializer
class UserSerializer(serializers.Serializer):
# 定义需要接收的数据
username = serializers.CharField()
password = serializers.CharField()
gender = serializers.CharField()
tel = serializers.CharField()
接收数据时只收到serializer中定义的字段;
不会默认增加pk字段
- 用于返回对象
from .serializers import *
# 查询用户
@api_view(["GET"])
def find_user(request):
users = User.objects.all()
# 默认序列化单个数据,序列化多个数据时设置many=True
serializer = UserSerializer(users, many=True)
return Response(serializer.data, status=status.HTTP_200_OK)
- 用于接收参数
# 增加用户
@api_view(["POST"]