码迷,mamicode.com
首页 > 其他好文 > 详细

Django restframework

时间:2019-09-04 00:36:16      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:自定义   none   object   error   img   hvie   post   更新   admin   

一、总纲

1、一切皆资源,操作既请求

2、分析

一个类(无参数)

查所有数据    get          返回所有数据

添加数据        post          返回添加的数据

另一个类(含参数)

查看某一条数据    get      返回这一条数据

修改某一条数据         put      返回修改的这条数据

删除某条数据       delete       返回None

二、ModelSerializer

1、简介

用法与ModelForm相似

2、作用

a、models表与序列化直接关联

b、校验、保存、更新数据

3、自定义字段

4、Hyperlink

三、例子

1、配置文件

restframwork相当于app

技术图片
INSTALLED_APPS = [
    django.contrib.admin,
    django.contrib.auth,
    django.contrib.contenttypes,
    django.contrib.sessions,
    django.contrib.messages,
    django.contrib.staticfiles,
    app01.apps.App01Config,
    rest_framework,
]
setting.py

2、模型(储存表关系)

技术图片
from django.db import models

# Create your models here.


class Book(models.Model):
    title = models.CharField(max_length=32)
    price = models.IntegerField()
    pub_date = models.DateField()
    publish = models.ForeignKey("Publish", on_delete=models.CASCADE)
    authors = models.ManyToManyField("Author")

    def __str__(self):
        return self.title


class Publish(models.Model):
    name = models.CharField(max_length=32)
    email = models.EmailField()

    def __str__(self):
        return self.name


class Author(models.Model):
    name = models.CharField(max_length=32)
    age = models.IntegerField()

    def __str__(self):
        return self.name
models.py

3、路由(CBV)

技术图片
urlpatterns = [
    path(admin/, admin.site.urls),

    path(books/, views.BookView.as_view()),
    path(books/<book_id>/, views.BookDetailView.as_view()),

    path(publish/, views.PublishView.as_view()),
    path(publish/<publish_id>/, views.PublishDetailView.as_view()),
]
views.py

4、模型序列化

技术图片
from rest_framework import serializers
from app01.models import Author, Publish, Book


# 作者表的序列化
class PublishModelSerialize(serializers.ModelSerializer):
    class Meta:
        model = Publish
        fields = "__all__"


class BookModelSerialize(serializers.ModelSerializer):
    class Meta:
        model = Book
        fields = __all__
模型序列化

5、视图

技术图片
from django.shortcuts import render, HttpResponse
from rest_framework.views import APIView
from app01.serialize import BookModelSerialize, PublishModelSerialize
from app01.models import Author, Publish, Book
from rest_framework.response import Response
# Create your views here.


class BookView(APIView):
    # 查看书籍, 返回所有数据(书籍信息)
    def get(self, request):
        book_list = Book.objects.all()
        book_serialize = BookModelSerialize(book_list, many=True)
        # return HttpResponse(author_serialize.data)
        return Response(book_serialize.data)

    # 添加书籍,并返回改书籍的数据
    def post(self, request):
        # 反序列化
        book = BookModelSerialize(data=request.data)
        if book.is_valid():
            book.save()
            return Response(book.data)
        else:
            return Response(book.errors)


class BookDetailView(APIView):
    # 查看某一部书,返回这本书
    def get(self, request, book_id):
        book_obj = Book.objects.filter(pk=book_id).first()
        book_serialize = BookModelSerialize(book_obj)
        return Response(book_serialize.data)

    # 修改书籍, 返回修改后的数据
    def put(self, request, book_id):
        book_obj = Book.objects.filter(pk=book_id).first()
        # 反序列化
        book = BookModelSerialize(book_obj, data=request.data)
        if book.is_valid():
            book.save()
            return Response(book.data)
        else:
            return Response(book.errors)

    # 删除书籍 返回None
    def delete(self, request, book_id):
        Book.objects.filter(pk=book_id).delete()
        return Response()


class PublishView(APIView):
    # 查看出版社, 返回所有数据(出版社信息)
    def get(self, request):
        publish_list = Publish.objects.all()
        publish_serialize = PublishModelSerialize(publish_list, many=True)
        # return HttpResponse(author_serialize.data)
        return Response(publish_serialize.data)

    # 添加出版社,并返回该出版社的数据
    def post(self, request):
        # 反序列化
        publish = PublishModelSerialize(data=request.data)
        if publish.is_valid():
            publish.save()
            return Response(publish.data)
        else:
            return Response(publish.errors)


class PublishDetailView(APIView):
    # 查看某一出版社,返回该出版社
    def get(self, request, publish_id):
        publish_obj = Publish.objects.filter(pk=publish_id).first()
        publish_serialize = PublishModelSerialize(publish_obj)
        return Response(publish_serialize.data)

    # 修改出版社, 返回修改后的数据
    def put(self, request, publish_id):
        publish_obj = Publish.objects.filter(pk=publish_id).first()
        # 反序列化
        publish = PublishModelSerialize(publish_obj, data=request.data)
        if publish.is_valid():
            publish.save()
            return Response(publish.data)
        else:
            return Response(publish.errors)

    # 删除出版社 返回None
    def delete(self, request, publish_id):
        Publish.objects.filter(pk=publish_id).delete()
        return Response()
视图

 

Django restframework

标签:自定义   none   object   error   img   hvie   post   更新   admin   

原文地址:https://www.cnblogs.com/wt7018/p/11456440.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!