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. oracle的loop

    oracle的loop等循环语句的几个用法小例子 --loop循环用法 (输出1到10) ) :; begin loop v_num :; ; --上面退出循环也可以用下面3行 /* if(v_num ...

  2. java中的date类型转换为js中的日期显示 我改

    function dateChange(javaDate){ if(javaDate){ return javaDate.substr(0,10).replace(/-/g,"/" ...

  3. 主角场景Shader效果:光影

    基本思路:unity有一种很容易实现光影效果的神器,那就是unity自带的projector. 首先需要用到两张贴图: 一张投影需要的光圈贴图,如下: 一张根据远近距离显示暗淡的贴图(左至右,白渐变黑 ...

  4. Rstdio快捷键总结

    Rstdio常用快捷键总结 在R语言里面输入了一个不完整的指令以后 左下方的console pane一直有加号+,不管输入什么都是加号,只用推出重新打开Rstudio才行,后来google了下,按左上 ...

  5. 【Asp.net入门2-01】C#基本功能

    C#是一种功能强大的语言,但并不是所有程序员都熟悉我们将在本书中讨论的所有功能.因此, 本章将介绍优秀的Web窗体程序员需要了解的C#语言功能. 本章仅简要介绍每一项功能.有关C#语言本身的知识不是本 ...

  6. P1621 集合

    P1621 集合 题目描述 现在给你一些连续的整数,它们是从A到B的整数.一开始每个整数都属于各自的集合,然后你需要进行一下的操作: 每次选择两个属于不同集合的整数,如果这两个整数拥有大于等于P的公共 ...

  7. Maven学习二:使用Nexus搭建Maven私服及相关配置

    处于安全等原因的考虑,一些企业内部网络是不允许访问外部网络的,但是项目内部搭建的项目又是Maven架构,这样就需要企业在内部网络中搭建自己的Maven仓库服务,再者一些大型企业或者内部模块化组件化划分 ...

  8. Redis slowlog慢查询

    slowlog (阅读原文) 此命令用于读取和重置redis慢请求日志 redis slow log概述 redis的slow log记录了那些执行时间超过规定时长的请求.执行时间不包括I/O操作(比 ...

  9. 使用 Collections 实现排序 sort方法 对List 实体类实现Comparable类 示例

    package com.test.jj; import java.util.ArrayList; import java.util.Collections; public class Test { A ...

  10. 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值

    [题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...