ApiView

RESTful API学习Day2

大兔子大兔子 提交于 2020-04-25 18:42:55
Django REST framework 参考文档: 官方文档: 官方文档 中文文档: 中文文档 一、是什么? 基于Django开发RESTful API的一个框架 为什么要用它? 补充: ​ CBV的工作原理 ​ urls.py里面 CBV.as_view() --> 确定要使用CBV中的哪个方法 ​ as_view() --> dispath() --> request.method.lower()反射 二、安装 pip install djangorestframework 若是安装速度不是很快的话可以用国内的源: pip install djangorestframework -i https://pypi.tuna.tsinghua.edu.cn/simple  三、DRF使用: 注册app (不是必须) INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'bms.apps.BmsConfig', 'rest_framework', ] 导入APIView

Django REST framework 1

纵饮孤独 提交于 2020-04-25 18:40:35
Django REST framework Django REST framework官方文档: 点击 中文文档: 点击 安装djangorestframework:pip3 install djangorestframework (pip3 list 查看详情和版本信息) 注册rest_framework(settings.py) INSTALLED_APPS = [ ' django.contrib.admin ' , ' django.contrib.auth ' , ' django.contrib.contenttypes ' , ' django.contrib.sessions ' , ' django.contrib.messages ' , ' django.contrib.staticfiles ' , ' app01 ' , ' rest_framework ' , ] settings.py DRF序列化 做前后端分离的项目,前后端交互一般都选择JSON数据格式,JSON是一个轻量级的数据交互格式。后端给前端数据的时候都要转成json格式,那就需要对从数据库拿到的数据进行序列化。 要用DRF的序列化,就要遵循人家框架的一些标准 声明序列化类(app01目录下新建serializers.py文件) Django CBV继承类是View

Django Rest framework 之 权限

主宰稳场 提交于 2020-04-19 05:13:43
django rest framework 之 认证(一) django rest framework 之 权限(二) django rest framework 之 节流(三) django rest framework 之 版本(四) django rest framework 之 解析器(五) django rest framework 之 序列化(六) django rest framework 之 分页(七) django rest framework 之 视图(八) 一、权限实例 在阅读本文之前请先参考 django rest framework 之 认证 中关于<code>django rest framework</code>的相关内容及实例 1、目录结构 为了更好的管理各个功能组件,在 django rest framework 之 认证 中我们说到可以将认证类单独的拿出来,放到其他目录下,然后导入到<code>views.py </code>文件中,在权限环节我们亦可以这么做,目录结构就变成这样 在api这个app下创建一个utils包专门用来存放相关的组件。 2、为模型类添加认证字段 我们在models.py中定义了两个模型类,分别是 from django.db import models class UserInfo(models.Model): USER

DRF Django REST framework 之 APIView(一)

|▌冷眼眸甩不掉的悲伤 提交于 2020-04-19 05:12:02
什么是REST? REST是一个 标准,一种规范 ,遵循REST风格可以使开发的接口通用,便于调用者理解接口的作用。 使url更容易理解,让增删改清晰易懂,在前后端分离开发中按照这一规范能加快开发效率,减少不必要的讨论时间。 GET: 获取特定资源(通过ID)或资源集合 POST:   创建一个新资源 PUT: 更新特定资源(通过ID) DELETE: 按ID删除特定资源 详情可见: https://baike.baidu.com/item/rest/6330506 可以理解为: URL唯一代表资源,HTTP请求方式来区分用户行为。 URL的设计规范: GET: 127.0.0.1:9001/books/ 获取所有数据 GET:    127.0.0.1:9001/books/{id} 获取单条数据 POST: 127.0.0.1:9001/books/    增加数据 DELETE: 127.0.0.1:9001/books/{id} 删除数据 PUT: 127.0.0.1:9001/books/{id} 修改数据 数据响应规范: GET: 127.0.0.1:9001/books/    返回[{}, {}, {}] GET: 127.0.0.1:9001/books/{id} {} 单条数据 POST: 127.0.0.1:9001/books/    {} 添加成功的数据

django rest framework 外键序列化方法与问题总结

大城市里の小女人 提交于 2020-03-24 07:22:29
3 月,跳不动了?>>> django rest framework 外键序列化方法与问题总结 当借口中需要出现一对多关系的时候,我们可以用rest_framwork的序列化功能来处理,代码如下. # models.py from django.db import models class PersonGoals(models.Model): name = models.CharField(max_length=100, verbose_name="目标名称") desc = models.CharField(max_length=200, verbose_name="说明") status = models.IntegerField() class Meta: db_table = "person_goals" def __str__(self): return self.name class KeyResult(models.Model): name = models.CharField(max_length=100, verbose_name="结果名称") desc = models.CharField(max_length=200, verbose_name="结果说明") status = models.IntegerField() person = models

Django-rest-framework(八)使用技巧(持续补充中)

房东的猫 提交于 2020-03-24 07:19:11
3 月,跳不动了?>>> 当viewset中,多个action对应了不同的serializers的时候 class UserView(viewsets.GenericViewSet): queryset = User.objects.all() serializer_class = UserSeriallers def get_serializer_class(self): if self.action in ['collection', ]: return Serializers1 elif self.action in ['orderhouse', ]: return Seriallers2 elif self.action in ['disperson', ]: return Serializers3 return self.serializer_class 当viewset中,多个action对应不同的permission class AdviserView(viewsets.GenericViewSet): queryset = Adviser.objects.all().order_by("-id") serializer_class = AdviserSerializers permission_classes = (AdviserPermission, ) def

Django-rest-framework(三)view and viewsets使用

非 Y 不嫁゛ 提交于 2020-03-24 07:18:27
3 月,跳不动了?>>> DRF 中有多种view和viewsets,我整理了一下,如下图所示,接下来,我们分别了解下view,viewsets。 APIView 所有的view,viewsets都是继承APIView,而APIView是继承的django的django.views.generic.View, 然后增加了一些通用的操作,和重载了 as_view , dispatch , options , http_method_not_allowed 方法来适应DRF相关的配置和后续的使用。 在直接使用APIView的时候,就和使用django View一样,分发规则也是一样,GET请求分发到了get方法,POST请求分发到post方法, 所以路由的注册方式也一样。所以在这里不做演示了。 GenericAPIView 通用view的基础视图,其他的基础view都是继承了这个view,我们可以来看看源码里面实现了那些个方法 # 为了简化,我删掉了注释和具体的实现, class GenericAPIView(views.APIView): queryset = None # 这些会在mixins中用到 serializer_class = None lookup_field = 'pk' lookup_url_kwarg = None pagination_class = api

DRF filter 过滤器实现流程

佐手、 提交于 2020-02-28 04:20:29
关系 ListModelMixin GenericAPIView(views.APIView).filter_queryset(queryset) drf filters.py BaseFilterBackend SearchFilter(BaseFilterBackend) OrderingFilter(BaseFilterBackend) DjangoFilterBackend(metaclass=RenameAttributes)# django_filters.rest_framework.backends 官方filterdemo 1.入口queryset = self.filter_queryset(self.get_queryset()) views.py class RecordView(MyModelViewSet): """ user view """ queryset = Record.objects.filter(status__gte=0) permission_classes = (permissions.IsAuthenticated, ) filterset_class = RecordFilter # 定义过滤器 serializer_map = { 'create': AuthorizationRecordCreateSerializer, }

ModelSerializer 和 Mixin的使用

丶灬走出姿态 提交于 2019-12-26 11:44:31
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 使用serializers.ModelSerializer 之前我们学了serializers模块中Serializer类的使用,现在我们来学习一下如何使用Django中的serializers.ModelSerializer类替换之前的serializers.Serializer类 上一章我们是在Schools APP中的serializer.py中编写的代码吧,我们先看一下之前的代码 from rest_framework import serializers from .models import School class SchoolSerializer(serializers.Serializer): name = serializers.CharField() desc = serializers.CharField() location = serializers.CharField() create_time = serializers.DateTimeField(default=datetime.now,) course_numbers = serializers.IntegerField() def create(self, validated_data): """ Create and

Serializer和ModelSerializer的使用

自作多情 提交于 2019-12-26 11:38:47
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> Django REST Framework API返回结果解析 学习了之前的文章我们知道如何使用Django REST framework框架设计API,我还使用Schools APP设计了一个API 除此之外,我们还可以查看API的OPTIONS,然后可以得很多信息,比如说第一行请求行'HTTP 200 OK',表示请求成功,第二行Allow表示允许的请求方式,Content-Type:application/json表示发送端发送的实体数据的数据类型。 还有下面的json数据,name表示接口名字、description详细描述、renders表示可解析的形式,parses是服务器端可解析的三种方式 我们还可以在app的views.py的类中可以给API添加注释,如比给前端人员的接口说明等信息,且注释可以在Django REST Framework的页面中显示; class AllSchoolsView(APIView): """ 这是AllSchoolsView的返回结果 """ def get(self, request): schools = School.objects.all() schools_serializer = SchoolSerializer(schools, many=True)