温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Django Rest Framework 3.3.2 开发 RESTful API

发布时间:2020-07-11 15:46:02 来源:网络 阅读:2631 作者:jethai 栏目:开发技术

Python Version:     2.7.10
Django Version:     1.9
REST framework 3.3.2


安装

pip install django

pip install djangorestframework



settings.py INSTALLED_APPS中引入rest_framework

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app01',
    'rest_framework',
]


创建model, 修改mdels.py

class Book(models.Model):
   name=models.CharField(max_length=100)
   title=models.CharField(max_length=100)
   author=models.CharField(max_length=100)


创建serializers.py

from app01.models import *
from rest_framework import serializers

class BookSerializer(serializers.Serializer):

    name = serializers.CharField(max_length=100)
    title = serializers.CharField(max_length=100)
    author = serializers.CharField(max_length=100)
    
    def create(self, validated_data):
        return Book(**validated_data)

    def update(self, instance, validated_data):
        instance.email = validated_data.get('name', instance.name)
        instance.content = validated_data.get('title', instance.title)
        instance.created = validated_data.get('author', instance.author)
        return instance


restore_object() 3.0以上版本不支持已经被create()和update()方法代替,源码如下:

(
    'Serializer `%s.%s` has old-style version 2 `.restore_object()` '
    'that is no longer compatible with REST framework 3. '
    'Use the new-style `.create()` and `.update()` methods instead.' %
    (self.__class__.__module__, self.__class__.__name__)
)



创建基于类和函数的视图

from django.shortcuts import render_to_response
from django.http import HttpResponse
from app01.forms import *
from rest_framework.views import APIView
from app01.serializers import BookSerializer
from app01.models import *
from rest_framework.response import Response
from rest_framework import generics
from rest_framework import status

# Create your views here.

class BookList(APIView):
   def get(self,request,format=None):
      books=Book.objects.all()
      ser=BookSerializer(books, many=True)
      return Response(ser.data)

   def post(self,request,format=None):
      ser=BookSerializer(data = request.data)
      if ser.is_valid():
         ser.create(ser.validated_data).save()
         return Response(ser.data,status = status.HTTP_201_CREATED)
      return Response(ser.errors)

class BookDetail(APIView):
   def get(self,request,num,format=None):
      b=Book.objects.get(id=num)
      ser=BookSerializer(b)
      return Response(ser.data)

class GenericBookList(generics.ListCreateAPIView):
   queryset = Book.objects.all()
   serializer_class = BookSerializer
   def post(self,request,format=None):
      ser=BookSerializer(data = request.data)
      if ser.is_valid():
         ser.create(ser.validated_data).save()
         return Response(ser.data,status = status.HTTP_201_CREATED)
      return Response(ser.errors)

def index(request):
   return render_to_response('index.html')

def hello(request):
   if request.method == 'POST':
      form = BookForms(request.POST)
      if form.is_valid():
         data = form.cleaned_data
         title = data["title"]
         return HttpResponse(title)
   form = BookForms()
   return render_to_response('1.html', {'form':form})


urls.py配置

from django.conf.urls import url
from django.contrib import admin
from app01.views import *
urlpatterns = [
    url(r'^admin/', admin.site.urls),
   url(r'^$', index),
    url(r'^hello/$', hello),
    url(r'^book/$', BookList.as_view()),
    url(r'^genericbook/$', GenericBookList.as_view()),
    url(r'^book/(\d+)', BookDetail.as_view()),

]


APIView

Django Rest Framework 3.3.2 开发 RESTful API



generic通用视图

Django Rest Framework 3.3.2 开发 RESTful API



RESTful Request:GET/PUT/DELETE/POST/HEAD/OPTIONS

POST请求被定义为创建“从属资源”(拥有父资源的资源) (add)

参考文章:

http://www.lifelaf.com/blog/?p=156


向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI