2 REST framework

1、入门

1.1 参考blog

官方文档:http://www.django-rest-framework.org/tutorial/quickstart/#quickstart

yuan的Blog:http://www.cnblogs.com/yuanchenqi/articles/8719520.html

alice的Blog:https://www.cnblogs.com/alice-bj/p/9228402.html

1.2 restful协议

restful协议

---- 一切皆是资源,操作只是请求方式

----book表增删改查
/books/ books
/books/add/ addbook
/books/(\d+)/change/ changebook
/books/(\d+)/delete/ delbook

----book表增删改查 url里面不能出现动词!!
/books/ -----get books ----- 返回当前所有数据
/books/ -----post books ----- 返回提交数据

/books/(\d+)-----get bookdetail ----- 返回当前查看的单条数据
/books/(\d+)-----put bookdetail ----- 返回更新数据
/books/(\d+)-----delete bookdetail ----- 返回空
 

1.3 安装

pip install django

pip install djangorestframework

2. 序列化方法

序列化是什么? QuerySet-->list-->json

2.1 restdemo

model

from django.db import models

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

url

from django.contrib import admin
from django.urls import path

from app01 import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('publishes/', views.PublishView.as_view()),
]

view

from django.shortcuts import render,HttpResponse

# Create your views here.
from django.views import View

from .models import Publish
import json

class PublishView(View):

    def get(self,request):
        # QuerySet-->vales取值--->list--->json
        publish_list = list(Publish.objects.all().values("name","email"))

        return HttpResponse(json.dumps(publish_list))

    def post(self,request):
        pass

database

  

data生成与迁移

  python manage.py makemigrations

  python manage.py migrate

 运行django项目

  

2.2 方式1 :list()

2.3 方式2:model_to_dict(obj)

2.4 方式3:django serializers

 

2.5 方式4 :restframework  serializers (推荐)

 

 2.6 code

from django.shortcuts import render,HttpResponse

# 为queryset,model对象做序列化
from rest_framework import serializers  # rest_framework的序列化组件

class PublishSerializers(serializers.Serializer):
    # 对哪些字段序列化
    name = serializers.CharField()
    email = serializers.EmailField()


from django.views import View
from .models import Publish
import json

class PublishView(View):

    def get(self,request):
        # QuerySet--->list--->json

        # 序列化方式1  # list()
        # publish_list = list(Publish.objects.all().values("name","email"))
        #return HttpResponse(json.dumps(publish_list))


        # 序列化方式2  # model对象转换为dict
        # 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))
        #
        #     # temp.append({
        #     #     "name":obj.name,
        #     #     "email":obj.email
        #     # })
        #
        # return HttpResponse(temp)
        #

        # 序列化方式3   # django的序列化组件
        # from django.core import serializers
        # publish_list = Publish.objects.all()
        # ret = serializers.serialize("json",publish_list)
        #
        # return HttpResponse(ret)

        # 序列化方式4  rest_framework的序列化组件
        publish_list = Publish.objects.all()
        ret = PublishSerializers(publish_list,many=True)

        return HttpResponse(ret.data)


    def post(self,request):
        pass

猜你喜欢

转载自www.cnblogs.com/venicid/p/11231983.html