RESTful API 和 Django REST framework
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的更多相关文章
- 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 ...
- RESTful api 与 Django的 restfulframework
RESTful api 与 Django的 restfulframework 1 restful api 的基本概念 一类的资源使用一个url,不同的操作通过 请求方式处理 api -- >&g ...
- 使用Django创建RESTful API
Agenda 1.What is an api Api refers to application programming interface It is a set of subroutine de ...
- Django Rest Framework API指南
Django Rest Framework API指南 Django Rest Framework 所有API如下: Request 请求 Response 响应 View 视图 Generic vi ...
- 用Django Rest Framework和AngularJS开始你的项目
Reference: http://blog.csdn.net/seele52/article/details/14105445 译序:虽然本文号称是"hello world式的教程&quo ...
- Getting Started with Django Rest Framework and AngularJS
转载自:http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html A ReST ...
- Django Rest framework实现流程
目录 一 什么是restful架构 二 Django REST framework简介 三 Django REST framework原理 四 Django REST framework源码流程 五 ...
- 利用 Django REST framework 编写 RESTful API
利用 Django REST framework 编写 RESTful API Updateat 2015/12/3: 增加 filter 最近在玩 Django,不得不说 rest_framewor ...
- RESTful API学习Day2 - Django REST framework
Django REST framework 参考文档: 官方文档:官方文档 中文文档:中文文档 一.是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: CBV的 ...
随机推荐
- Maven问题合集
背景:总结maven使用过程中的相关问题,方便以后查询! 1 问题汇总 今天在导入github上下载的maven项目时候,出现了一堆错误,一时间不知道该如何下手. 根据错误提示,发现是一些依赖的jar ...
- 【最小割】【网络流24题】【P2762】 太空飞行计划问题
Description W 教授正在为国家航天中心计划一系列的太空飞行.每次太空飞行可进行一系列商业性实验而获取利润.现已确定了一个可供选择的实验集合E={E1,E2,-,Em},和进行这些实验需要使 ...
- composer安装第三方库出现需要认证信息等原因
最近,在学习使用thinkcmf的时候,使用composer安装第三方类库,遇到了需要输入验证码的问题,援引https://laravel-china.org/topics/17893该链接中的讨论, ...
- Nginx+Tomcat+Memcache实现负载均衡及Session共享
第一部分 环境介绍 部署环境: Host1:Nginx.Memcached.Tomcat1 Host2:Tomcat2 Tomcat_version:8.0.38 第二部分 Nginx+Tomcat实 ...
- UVA12167 Proving Equivalences
UVA12167 Proving Equivalences 题意翻译 题目描述 在数学中,我们常常需要完成若干命题的等价性证明. 例如:有4个命题a,b,c,d,要证明他们是等价的,我们需要证明a&l ...
- android listview使用自定义的adapter没有了OnItemClickListener事件解决办法
在使用listview的时用使用自定义的adapter的时候,如果你的item布局中包含有Button,Checkable继承来的所有控件,那么你将无法获取listview的onItemClickLi ...
- 线程中wait/notify/notifyAll的用法
前言 多线程时,最关注的就是线程同步,线程间的同步一般用锁来实现,常见的锁就是synchronized和lock.用了synchronized,就不得不提到wait/notify/notifyAll. ...
- poj 1419 Graph Coloring
http://poj.org/problem?id=1419 题意: 一张图黑白染色,相邻点不能都染黑色,最多能染几个黑色点 最大点独立集 但是图不能同构为二分图,不能用二分图匹配来做 那就爆搜吧 还 ...
- 【mybatis笔记】 resultType与resultMap的区别
序言: 昨天做一个项目,看到很多刚开始用mybatis的同事对于resultType和resultMap的理解与使用含糊不清,这里我试图用最好理解的说法写一写,欢迎大家勘误. 两者异同: 相同点:re ...
- Java序员的成长之路
对于Java程序猿学习的建议 第一阶段——Java基础 第二阶段——Web开发 这些内容主要是Web开发相关的内容,包括HTML/CSS/JS(前端页面).Servlet/JSP(J2EE)以及MyS ...