Django 进阶 之 Restful框架


一、 什么是Rest

  • Rest(Respresentational State Transfer)表现层状态转化
  • 是一种架构风格:
    • 从资源角度来观察整个网络
    • 每个URL代表一种资源
    • 客户端通过四个http动词对厚度进行操作
  • Http动词举例
    • get /poems
    • post /poems
    • get /poems/id
    • put /poems/id
    • delete /poems/id
  • 状态吗
    • 服务端向客户端返回的状态码和信息提示
    • 200 OK - [GET] : 服务器成功返回用户请求的数据
    • 201 CREATED - [POST/PUT] : 用户新疆或修改数据成功
    • 400 INVALID REQUEST - [POST/PUT] : 用户发出的请求有错误
  • Django REST framework
    • 一套构建restful API有效和便利的框架
    • 安装: pip install djangorestframework

二、 应用示例

1. 先在setting中引入Restful框架

 1 INSTALLED_APPS = [
 2     'django.contrib.admin',
 3     'django.contrib.auth',
 4     'django.contrib.contenttypes',
 5     'django.contrib.sessions',
 6     'django.contrib.messages',
 7     'django.contrib.staticfiles',
 8     'polls',
 9     'rest_framework',   #引入Restful框架
10 ]

2. 建立系列化文件serializers.py,配置要序列化的model

1 from rest_framework import serializers
2 
3 from .models import Poem
4 
5 class PoemSerializer(serializers.ModelSerializer):
6     class Meta:
7         model = Poem
8         fields = ['id', 'author', 'title', 'type']

3. 在视图中编写查看model列表的类

 1 from rest_framework.views import APIView
 2 from rest_framework import status
 3 from rest_framework.response import Response
 4 from .serializers import PoemSerializer
 5 
 6 class PoemListView(APIView):
 7     def get(self, reqeust, format=None):
 8         poems = Poem.objects.all()
 9         serializer = PoemSerializer(poems, many=True)   #manay=True说明返回的是多条数据
10         return Response(serializer.data)
11 
12     def post(self, request, format=None):
13         serializer = PoemSerializer(data=request.data, many=True)
14         if serializer.is_valid():
15             serializer.save()
16             return Response(serializer.data, status=status.HTTP_201_CREATED)
17         else:
18             return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
/polls/views.py

4. 在视图只编写查看model单个对象的方法,使用装饰器来实现

 1 from rest_framework import status
 2 from rest_framework.response import Response
 3 from .serializers import PoemSerializer
 4 from rest_framework.decorators import api_view
 5 
 6 @api_view(['GET','PUT','DELETE'])
 7 def poem_detail(request, id):
 8     try:
 9         poem = Poem.objects.get(id=id)
10     except Poem.DoesNotExist:
11         return Response(status=status.HTTP_404_NOT_FOUND)
12 
13     if request.method == 'GET':
14         serializer = PoemSerializer(poem)
15         return Response(serializer.data)
16     elif request.method == 'POST':
17         serializer = PoemSerializer(poem, request.data)
18         if serializer.is_valid():
19             serializer.save()
20             return Response(serializer.data)
21         else:
22             return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
23     elif request.method=='DELETE':
24         poem.delete()
25         return Response(status=status.HTTP_204_NO_CONTENT)
/polls/views.py

5. 配置URL路由

1 from django.conf.urls import url
2 from . import views
3 
4 urlpatterns = [
5     url(r'^$', views.home, name='home'),
6     url(r'^poems_res', views.PoemListView.as_view()),
7     url(r'poem_res/(?P<id>\d+)$', view=views.poem_detail),
8 ]
/polls/urls.py

优质内容筛选与推荐>>
1、.NET之权限管理
2、转:我是否该放弃VB.Net?
3、jQuery学习笔记--jQuery的DOM操作
4、oracle的undo表空间
5、Linux环境下Swap配置方法


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn