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. CSS的overflow属性介绍

    overflow 属性规定如何处理如何处理不符合元素框的内容.用法如下:Object.style.overflow=visible|hidden|scroll|auto. 参数介绍: visible: ...

  2. MongoDB用户授权和管理

    转载于https://blog.csdn.net/yu757371316/article/details/55210536 1.mongodb安装好后第一次进入是不需要密码的,也没有任何用户,通过sh ...

  3. 利用Confluence搭建企业Wiki

    Confluence安装与部署 下载安装包及破解包 安装包下载地址:https://www.atlassian.com/software/confluence/download-archives 破解 ...

  4. python 生成器和迭代器介绍

    在正式接触生成器之前,我们先来了解一些概念 容器(container) 容器是一种把多个元素组织在一起的数据结构,容器中的元素可以逐个迭代获取,可以用in.not in关键字判断元素是否包含在容器中. ...

  5. [Java] 集合框架原理之二:锁、原子更新、线程池及并发集合

    java.util.concurrent 包是在 Java5 时加入的,与 concurrent 的相关的有 JMM及 AbstractQueuedSynchronizer (AQS),两者是实现 c ...

  6. mq使用场景、不丢不重、时序性

    mq使用场景.不丢不重.时序性.削峰 参考: http://zhuanlan.51cto.com/art/201704/536407.htm http://zhuanlan.51cto.com/art ...

  7. [译]Quartz.NET 框架 教程(中文版)2.2.x 之第六课 CronTrigger

    第六课 CronTrigger CronTrigger比SimpleTrigger更常用,当你需要一个基于日历般概念的作业调度器,而不是像SimpleTrigger那样精确指定间隔时间. 使用Simp ...

  8. 转载http中302与301的区别

    http://blog.csdn.net/qmhball/article/details/7838989 一.官方说法301,302 都是HTTP状态的编码,都代表着某个URL发生了转移,不同之处在于 ...

  9. mysql 距离函数

    要有超级权限 SET GLOBAL log_bin_trust_function_creators = 1;DELIMITER $$CREATE DEFINER=`root`@`localhost` ...

  10. STL-map and multimap

    定义 map<int,int> a; map<int,string> a; map<double,int> a; …… 首先要知道的一些 Map是STL的一个关联容 ...