1, 安装: pip install djangorestframework
2,配置:settings > INSTALL_APP=['rest_framework']
3,创建App: python manage.py startapp App
4,配置 : settings > INSTALL_APP=['App'] (以上是基本配置,后面的Demo都需要)
5,models
class Book(models.Model):
b_name = models.CharField(max_length=32)
b_price = models.FloatField(default=1)
6,serializers
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = ['id', 'b_name', 'b_price']
7, urls:
# 主路由
urlpatterns = [
path('app/', include('App.urls')),
]
# App urls
urlpatterns = [
path('book/<int:id>/', views.BookView.as_view()), # 获取单个书籍信息
path('books/', views.BooksView.as_view()), # 书籍复数操作
]
8, views : 此处用的是django的views,后面会继续针对views详细讲
# 获取书籍信息
class BookView(View):
def get(self, request, id):
book = Book.objects.get(pk=id)
# 将对象序列化为字典
serializer = BookSerializer(book)
book_dict = serializer.data
# 返回给前端
data = {
'msg': 'ok',
'status': 200,
'data': book_dict
}
return JsonResponse(data)
# 获取所有书籍信息
class BooksView(View):
def get(self, request):
books = Book.objects.all()
# 序列化复数的时候需要加many=True
serializer = BookSerializer(books, many=True)
books_dict = serializer.data
data = {
'msg': 'ok',
'status': 200,
'data': books_dict
}
return JsonResponse(data)
# 添加新的书籍
def post(self, request):
b_name = request.POST.get('b_name')
b_price = request.POST.get('b_price')
# 以下逻辑不可取,没有验证的过程
# book = Book()
# book.b_name = b_name
# book.b_price = b_price
#
# book.save()
#
# serializer = BookSerializer(book)
# book_dict = serializer.data
#
# data = {
# 'msg': 'create ok',
# 'status': 210,
# 'data': book_dict
# }
#
# return JsonResponse(data)
# 正确的方式
book_data = {
"b_name": b_name,
"b_price": b_price
}
# 反序列化
serializer = BookSerializer(data=book_data)
# 验证序列化是否有效is_valid()
if not serializer.is_valid():
data = {
"msg": "fail",
"status": status.HTTP_400_BAD_REQUEST,
"error": serializer.errors
}
# 无效返回错误
return JsonResponse(data)
# 有效保存
serializer.save()
book_dict = serializer.data
data = {
"msg": "create ok",
"status": 201,
"data": book_dict
}
# 返回信息
return JsonResponse(data)
#