100天 cmdb最后一天

#RESTful API
- 定义规范 如get就是请求题
- 面向资源编程 把网络任何东西都当作资源 #给一个url,根据方法的不同对资源做不同的操作
#返回结果和状态码 http://www.baidu.com/order/
method:
- GET
- POST
- PUT
- DELETE #Django REST framework
为什么使用REST framework
1.前后端分离的业务需要搭建API
2.基于DJango快速开发REST api
1. pip3 install djangorestframework
2. 创建app01
3. setting 中加入 INSTALLED_APPS = [ 'rest_framework'
] REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAdminUser',
],
'PAGE_SIZE': 10
}
4. app01/models.py class Publisher(models.Model):
name = models.CharField(max_length=32,verbose_name="名称",unique=True)
address = models.CharField(max_length=128,verbose_name="地址") def __str__(self):
return self.name class Meta:
verbose_name = "出版社"
verbose_name_plural = verbose_name 5. makemigrations migrate 6. 创建超级用户 admin注册Publisher 增加数据 7. 项目/urls.py urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^publishers/', views.publisher_list),
] 8. app01/views.py from django.shortcuts import render
from django.http import HttpResponse
# Create your views here. from app01 import models def publisher_list(request):
queryset = models.Publisher.objects.all() ##方式一: 列表里套字典
# data = []
# for i in queryset:
# p_tmp = {
# "name":i.name,
# "address":i.address
# }
# data.append(p_tmp) ##方式二:
#缺点 图片的字段无法转换为字典
data = []
from django.forms.models import model_to_dict # model 对象 转换成 字典 方式
for i in queryset:
data.append(model_to_dict(i)) #方式三:djangorestframework 自提供
#需要在app01下创建serializers.py文件 from app01 import serializers serializer = serializers.PublisherSerializer(queryset,many=True) import json
return HttpResponse(json.dumps(data),content_type="application/json") 9. app01/serializers.py from rest_framework import serializers
from app01 import models class PublisherSerializer(serializers.ModelSerializer):
class Meta:
model = models.Publisher
fields = (
"id",
"name",
"address"
) 9. 浏览器访问 序列化

序列化

#urls.py

    urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^publishers/$', views.publisher_list),
url(r'^publishers/(?P<pk>[0-9]+)$', views.publisher_detail),
] #views.py from django.shortcuts import render
from django.http import HttpResponse
from rest_framework.decorators import api_view
from app01 import models
from app01 import serializers
from rest_framework.response import Response
from rest_framework import status @api_view(['GET', 'POST'])
def publisher_list(request,format=None): if request.method == 'GET':
queryset = models.Publisher.objects.all()
s = serializers.PublisherSerializer(queryset,many=True)
return Response(s.data)
if request.method == "POST":
#创建出版社
s = serializers.PublisherSerializer(data=request.data)
if s.is_valid():
s.save()
return Response(s.data,status=status.HTTP_201_CREATED)
else:
return Response(s.errors,status=status.HTTP_400_BAD_REQUEST) @api_view(['GET', 'PUT',"DELETE"])
def publisher_detail(request,pk,format=None):
try:
publisher = models.Publisher.objects.get(pk=pk)
except models.Publisher.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND) if request.method == 'GET':
s = serializers.PublisherSerializer(publisher)
return Response(s.data) elif request.method == 'PUT':
s = serializers.PublisherSerializer(publisher, data=request.data)
if s.is_valid():
s.save()
return Response(s.data)
return Response(s.errors, status=status.HTTP_400_BAD_REQUEST) elif request.method == 'DELETE':
publisher.delete()
return Response(status=status.HTTP_204_NO_CONTENT) #创建超级用户
pip3 install httpie
http -a admin:admin111.. http://127.0.0.1:8000/publishers/
http -a admin:admin111.. http://127.0.0.1:8000/publishers/1
http -a admin:admin111.. http://127.0.0.1:8000/publishers/2

Requests and Responses

#urls.py
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^publishers/$', views.PublisherList.as_view()),
url(r'^publishers/(?P<pk>[0-9]+)$', views.PublisherDetail.as_view()),
] #views.py # -*- coding: utf-8 -*-
from django.http import Http404
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from app01 import models
from app01 import serializers from rest_framework import mixins
from rest_framework import generics # Create your views here. # class PublisherList(APIView):
# """
# 列出所有的出版社,或者创建一个新的出版社
# """
#
# def get(self, request, format=None):
# queryset = models.Publisher.objects.all() # 查询出所有的出版社
#
# s = serializers.PublisherSerializer(queryset, many=True)
# return Response(s.data)
#
# def post(self, request, format=None):
# s = serializers.PublisherSerializer(data=request.data)
# if s.is_valid(): # 如果数据没问题
# s.save()
# return Response(s.data, status=status.HTTP_201_CREATED)
# return Response(s.errors, status=status.HTTP_400_BAD_REQUEST) # class PublisherList(mixins.ListModelMixin,
# mixins.CreateModelMixin,
# generics.GenericAPIView):
#
# queryset = models.Publisher.objects.all()
# serializer_class = serializers.PublisherSerializer
#
# def get(self, request, *args, **kwargs):
# return self.list(request, *args, **kwargs)
#
# def post(self, request, *args, **kwargs):
# return self.create(request, *args, **kwargs) class PublisherList(generics.ListCreateAPIView):
queryset = models.Publisher.objects.all()
serializer_class = serializers.PublisherSerializer #
# class PublisherDetail(APIView):
# """
# 具体的出版社,查看,修改,删除视图
# """
# def get_object(self, pk):
# try:
# return models.Publisher.objects.get(pk=pk)
# except models.Publisher.DoesNotExist:
# raise Http404
#
# # 查看具体的出版社信息
# def get(self, request, pk, format=None):
# publisher = self.get_object(pk)
# s = serializers.PublisherSerializer(publisher)
# return Response(s.data)
#
# # 修改出版社信息
# def put(self, request, pk, format=None):
# publisher = self.get_object(pk)
# s = serializers.PublisherSerializer(publisher, data=request.data)
# if s.is_valid():
# s.save()
# return Response(s.data)
# return Response(s.errors, status=status.HTTP_400_BAD_REQUEST)
#
# # 删除出版社信息
# def delete(self, request, pk, format=None):
# publisher = self.get_object(pk)
# publisher.delete()
# return Response(status=status.HTTP_204_NO_CONTENT) # class PublisherDetail(mixins.RetrieveModelMixin,
# mixins.UpdateModelMixin,
# mixins.DestroyModelMixin,
# generics.GenericAPIView):
#
# queryset = models.Publisher.objects.all()
# serializer_class = serializers.PublisherSerializer
#
# def get(self, request, *args, **kwargs):
# return self.retrieve(request, *args, **kwargs)
#
# def put(self, request, *args, **kwargs):
# return self.update(request, *args, **kwargs)
#
# def delete(self, request, *args, **kwargs):
# return self.destroy(request, *args, **kwargs) class PublisherDetail(generics.RetrieveUpdateDestroyAPIView):
queryset = models.Publisher.objects.all()
serializer_class = serializers.PublisherSerializer

class view 三种方式

  

RESTful API 和 Django REST framework的更多相关文章

  1. day71:drf:API接口&Restful API规范&Django Rest Framework&drf中的序列化和反序列化功能

    目录 1.web应用模式 2.API接口 3.Restful API规范 4.序列化 5.Django Rest Framework 1.drf的简单介绍 2.drf的特点 3.如何安装drf 4.d ...

  2. RESTful api 与 Django的 restfulframework

    RESTful api 与 Django的 restfulframework 1 restful api 的基本概念 一类的资源使用一个url,不同的操作通过 请求方式处理 api -- >&g ...

  3. 使用Django创建RESTful API

    Agenda 1.What is an api Api refers to application programming interface It is a set of subroutine de ...

  4. Django Rest Framework API指南

    Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...

  5. 用Django Rest Framework和AngularJS开始你的项目

    Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...

  6. Getting Started with Django Rest Framework and AngularJS

    转载自:http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html A ReST ...

  7. Django Rest framework实现流程

    目录 一 什么是restful架构 二 Django REST framework简介 三 Django REST framework原理 四 Django REST framework源码流程 五 ...

  8. 利用 Django REST framework 编写 RESTful API

    利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...

  9. RESTful API学习Day2 - Django REST framework

    Django REST framework 参考文档: 官方文档:官方文档 中文文档:中文文档 一.是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: ​ CBV的 ...

随机推荐

  1. git的一些常见问题

    from:http://hi.baidu.com/mvp_xuan/blog/item/2ba062d8cd2c9fc939012fae.html 关于linux上建库等操作请看文章: http:// ...

  2. bzoj 1208

    1208: [HNOI2004]宠物收养所 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 9775  Solved: 3918[Submit][Sta ...

  3. K8S调度之节点亲和性

    Node Affinity Affinity 翻译成中文是"亲和性",它对应的是 Anti-Affinity,我们翻译成"互斥".这两个词比较形象,可以把 po ...

  4. Java基础-线程操作共享数据的安全问题

    Java基础-线程操作共享数据的安全问题 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.引发线程安全问题 如果有多个线程在同时运行,而这些线程可能会同时运行这段代码.程序每次运 ...

  5. jquery.lazyload插件实现图片延迟加载详解

    什么是LazyLoad技术? 在页面上图片比较多的时候,打开一张页面必然引起与服务器大数据量的交互.尤其是对于高清晰的图片,占了几百K的空间.Lazy Load 是一个用 JavaScript 编写的 ...

  6. android获取APP 包名和activity

    1.连接设备并启动被测试app应用 2.打开cmd窗口 3.windows获取包名和activity    adb shell dumpsys activity |find "mFocuse ...

  7. IIS Media Service: Channel 小结

    IIS Media Service 对Channel的Schema可以在浏览器中输入http://{0}:{1}/services/smoothstreaming/publishingpoints.i ...

  8. 《编写高质量代码:改善JavaScript程序的188个建议》学习小记(二)

    建议3:减少全局变量污染 1.把多个全局变量都追加在一个名称空间下,将显著降低与其他应用程序产生冲突的概率,应用程序也会变得更容易阅读. var My = {}; My.name = { " ...

  9. jQuery代码实现表格内容可编辑修改

    1.效果及功能说明 表格特效制作jquery表格可编辑任意修改里面的数值,是一种比较人性化的用户设计体验方式 2.实现原理 通过点击事件来触发跳出一个输入框可以在里面输入当这个输入框失去焦点后就把,所 ...

  10. 2017萧山第5场(2016 Pacific Northwest - Division 1)

    B:Buggy Robot [题意] 一个n*m的地图(1≤n, m≤50),有一个入口和一个出口.给定一个命令序列(上,下,左,右),如果碰到障碍或者边际就忽略.问至少加入或删除多少个的命令,使得能 ...