django-rest-framework 系列教程(一)- Start Your API
admin
2023-07-30 21:41:29
0

使用的环境:

  • python 2.7.10
  • Django 1.8.5
  • djangorestframework 3.4.4
创建项目

startproject rest_api

创建 APP

startapp task

配置 rest_api/settings.py
INSTALLED_APPS = (
    \'django.contrib.admin\',
    \'django.contrib.auth\',
    \'django.contrib.contenttypes\',
    \'django.contrib.sessions\',
    \'django.contrib.messages\',
    \'django.contrib.staticfiles\',
    \'rest_framework\',
    \'task\',

)
配置 rest_api/urls.py
# -*- coding:utf-8 -*-
from django.conf.urls import url, include

urlpatterns = [
    url(r\'^api/\', include(\'task.urls\')),
]
创建模型 task/models.py
# -*- coding:utf-8 -*-
from django.db import models


class Task(models.Model):
    title = models.CharField(\'标题\', max_length=100)
    description = models.TextField(\'描述\')
    completed = models.BooleanField(\'是否完成\', default=False)
    create_date = models.DateTimeField(\'创建时间\', auto_now_add=True)

    def __unicode__(self):
        return self.title
序列化 task/serializers.py
# -*- coding:utf-8 -*-
from rest_framework import serializers
from .models import Task


class TaskSerializer(serializers.ModelSerializer):
    class Meta:
        model = Task
        fields = (\'id\', \'title\', \'description\', \'completed\', \'create_date\')
视图 task/views.py
# -*- coding:utf-8 -*-
from rest_framework.decorators import api_view
from rest_framework import status
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import generics

from .models import Task
from .serializers import TaskSerializer


# 第一种方式:APIView
class TaskList(APIView):
    def get(self, request, format=None):
        tasks = Task.objects.all()
        serializer = TaskSerializer(tasks, many=True)
        return Response(serializer.data)

    def post(self, request, format=None):
        serializer = TaskSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


# 第二种方式:通用视图 ListCreateAPIView
class TaskListCreate(generics.ListCreateAPIView):
    queryset = Task.objects.all()
    serializer_class = TaskSerializer


# 第三种方式:装饰器 api_view
@api_view([\'GET\', \'POST\'])
def task_list(request):
    \'\'\'
    List all tasks, or create a new task.
    \'\'\'
    if request.method == \'GET\':
        tasks = Task.objects.all()
        serializer = TaskSerializer(tasks, many=True)
        return Response(serializer.data)
    elif request.method == \'POST\':
        serializer = TaskSerializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, status=status.HTTP_201_CREATED)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


@api_view([\'GET\', \'PUT\', \'DELETE\'])
def task_detail(request, pk):
    try:
        task = Task.objects.get(pk=pk)
    except Task.DoesNotExist:
        return Response(status=status.HTTP_404_NOT_FOUND)

    if request.method == \'GET\':
        serializer = TaskSerializer(task)
        return Response(serializer.data)
    elif request.method == \'PUT\':
        serializer = TaskSerializer(task, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
    elif request.method == \'DELETE\':
        task.delete()
        return Response(status=status.HTTP_204_NO_CONTENT)
路由 task/urls.py
# -*- coding:utf-8 -*-
from django.conf.urls import  url
from . import views

urlpatterns = [
    url(r\'^tasks/$\', views.task_list, name=\'task_list\'),
    # url(r\'^tasks/$\', views.TaskList.as_view(), name=\'task_list\'),
    # url(r\'^tasks/$\', views.TaskListCreate.as_view(), name=\'task_list\'),
    url(r\'^tasks/(?P[0-9]+)$\', views.task_detail, name=\'task_detail\'),
]
Command Line
curl http://localhost:8000/api/tasks/
curl -X POST http://localhost:8000/api/tasks/ -d \"title=hello world&description=a whole new world\"
curl -X PUT http://localhost:8000/api/tasks/1 -d \"title=hello world&description=be nice\"
curl -X DELETE http://localhost:8000/api/tasks/1
效果截图


Task List – Django REST framework


Task Detail – Django REST framework

上一篇:django-bootstrap

下一篇:终端查询12306余票

相关内容

热门资讯

500 行 Python 代码... 语法分析器描述了一个句子的语法结构,用来帮助其他的应用进行推理。自然语言引入了很多意外的歧义,以我们...
Mobi、epub格式电子书如... 在wps里全局设置里有一个文件关联,打开,勾选电子书文件选项就可以了。
定时清理删除C:\Progra... C:\Program Files (x86)下面很多scoped_dir开头的文件夹 写个批处理 定...
scoped_dir32_70... 一台虚拟机C盘总是莫名奇妙的空间用完,导致很多软件没法再运行。经过仔细检查发现是C:\Program...
65536是2的几次方 计算2... 65536是2的16次方:65536=2⁶ 65536是256的2次方:65536=256 6553...
小程序支付时提示:appid和... [Q]小程序支付时提示:appid和mch_id不匹配 [A]小程序和微信支付没有进行关联,访问“小...
pycparser 是一个用... `pycparser` 是一个用 Python 编写的 C 语言解析器。它可以用来解析 C 代码并构...
微信小程序使用slider实现... 众所周知哈,微信小程序里面的音频播放是没有进度条的,但最近有个项目呢,客户要求音频要有进度条控制,所...
Apache Doris 2.... 亲爱的社区小伙伴们,我们很高兴地向大家宣布,Apache Doris 2.0.0 版本已于...
python清除字符串里非数字... 本文实例讲述了python清除字符串里非数字字符的方法。分享给大家供大家参考。具体如下: impor...