首页 > Windows开发 > 详细

Django基于REST framework实现API

时间:2019-02-17 21:15:38      阅读:248      评论:0      收藏:0      [点我收藏+]

一、基于RESTframework实现API

1、环境准备

安装restframework,注册app

pip install djangorestframework
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‘,
]

2、url

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^publish/‘, views.PublishView.as_view()),
]

3、models

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
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")
    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

4、views

基于CBV方式

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.shortcuts import render,HttpResponse

# Create your views here.
from .models import Publish
from rest_framework.views import APIView

class PublishView(APIView):
    def get(self,request):
 
        #序列化方式4rest_framework
        from rest_framework.response import Response
        publish_list = Publish.objects.all()
        ps = PublishSerializers(publish_list, many=True)
        return Response(ps.data)

    def post(self,request):
        return  HttpResponse(‘POST‘)

5、测试

技术分享图片

 

二、序列化

API返回结果的形式,json是非常流行的。但是我们在序列化结果时,有多种方式,每种方式实现的方式不同。

1、原生json方式

import json
        publish_list = list(Publish.objects.all().values())
        return HttpResponse(json.dumps(publish_list))

 使用json方式对结果进行强转,先把结果强转成列表的方式,然后通过json的dumps方式对结果进行格式化。

注意:

这种方式实现最简单,也可以自定制需要返回的字段。

 

2、model_to_dict方法

#序列化方式2
        # from django.forms.models import model_to_dict
        # publish_list = Publish.objects.all()
        # data = []
        # for obj in publish_list:
        #     data.append(model_to_dict(obj))
        # return HttpResponse(data)

  通过models自带的model_to_dict方法直接把obj对象转换成字典的形式,然后返回。缺点:需要把每个对象再次进行处理。

 

3、django自带的serializers方法

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

  

4、rest-framework自带serializers方法

from rest_framework import serializers
class PublishSerializers(serializers.Serializer):
    name=serializers.CharField(max_length=32)
    email=serializers.CharField()


from rest_framework.views import APIView
视图函数继承APIView方法
#序列化方式4rest_framework from rest_framework.response import Response publish_list = Publish.objects.all() ps = PublishSerializers(publish_list, many=True) return Response(ps.data)

  

  

 

Django基于REST framework实现API

原文:https://www.cnblogs.com/skyflask/p/10392593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!