ApiView

Django rest framework(1)----认证

和自甴很熟 提交于 2021-02-19 11:03:04
目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django rest framework(3)----节流 Django rest framework(4)----版本 Django rest framework(5)----解析器 Django rest framework(6)----序列化 Django rest framework(7)----分页 一、基础 1.1.安装 两种方式: github pip直接安装 pip install djangorestframework 1.2.需要先了解的一些知识 理解下面两个知识点非常重要,django-rest-framework源码中到处都是基于CBV和面向对象的封装 (1)面向对象封装的两大特性 把同一类方法封装到类中 将数据封装到对象中 (2)CBV 基于反射实现根据请求方式不同,执行不同的方法 原理:url-->view方法-->dispatch方法(反射执行其它方法:GET/POST/PUT/DELETE等等) 二、简单实例 2.1.settings 先创建一个project和一个app(我这里命名为API) 首先要在settings的app中添加 INSTALLED_APPS = [

Django REST framework视图

孤街醉人 提交于 2021-02-19 08:11:05
Django REST framework视图 学习序列化的时候发现有大量的冗余代码,所以我们要使用Django REST framework里的视图减少我们的代码 DRF中的request 在Django REST Framework中内置的Request类扩展了Django中的Request类,实现了很多方便的功能--如请求数据解析和认证等。 比如,区别于Django中的request从request.GET中获取URL参数,从request.POST中取某些情况下的POST数据。 在APIView中封装的request,就实现了请求数据的解析: 对于GET请求的参数我们通过request.query_params来获取。 对于POST请求、PUT请求的数据我们通过request.data来获取。 学习序列化时的部分 from rest_framework.views import APIView from rest_framework.response import Response from .models import * from django.shortcuts import HttpResponse from django.core import serializers from rest_framework import serializers class

Django REST framework

我与影子孤独终老i 提交于 2021-02-18 08:24:03
[TOC] Django REST framework 权限和限制 (你能干什么) 与身份验证和限制一起,权限确定是应该授予还是拒绝访问请求。 在允许任何其他代码继续之前,权限检查始终在视图的最开始运行。权限检查通常使用 request.user 和 request.auth 属性中的身份验证信息来确定是否应允许传入请求。 权限用于授予或拒绝不同类别的用户访问API的不同部分。 最简单的权限类型是允许访问任何经过身份验证的用户,并拒绝访问任何未经身份验证的用户。这对应 IsAuthenticated 于REST框架中的类。 稍微不那么严格的权限样式是允许对经过身份验证的用户进行完全访问,但允许对未经身份验证的用户进行只读访问。这对应 IsAuthenticatedOrReadOnly 于REST框架中的类。 设置权限的方法 可以使用该 DEFAULT_PERMISSION_CLASSES 设置全局设置默认权限策略。例如: REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', ) } 如果未指定,则此设置默认允许不受限制的访问: 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions

Django REST framework API认证(包括JWT认证)

ぃ、小莉子 提交于 2021-02-17 12:50:40
Django REST framework API认证(包含JWT认证) + 权限 发表于 2019-02-24 | 分类于 Django , PYTHON | 0 | 阅读次数: 30 字数统计: 6.3k | 阅读时长 ≈ 26 Django REST framework API认证(包含JWT认证) + 权限 Django REST framework API认证(包含JWT认证) 一. 背景 在我们学习Django Rest Framework(简称DRF)时,其非常友好地给我们提供了一个可浏览API的界面。很多测试工作都可以在可浏览API界面完成测试。要使用可浏览API界面很简单,只需要在urls.py文件中添加如下部分即可。 1 2 3 4 from django.conf.urls import include urlpatterns += [ url( r'^api-auth/' , include( 'rest_framework.urls' , namespace= 'rest_framework' )) ] 其中, r'^api-auth/' 部分实际上可以用任何你想使用URL替代,唯一的限制是所包含的URL必须使用 'rest_framework' 命名空间。在Django 1.9+中,REST framework将自动设置,所以你也无须关心。 配置完成后

django Rest Framework----GenericAPIView 通用视图 GenericAPIView源码分析

吃可爱长大的小学妹 提交于 2021-02-08 14:49:54
一、GenericAPIView GenericAPIView扩展了APIView,为标准列表和详细视图添加了常见的行为。 提供的每个具体通用视图都是 一个 GenericAPIView 或多个mixin类 组合在一起而构建的。 例如: BookView视图类继承自: ListModelMixin:用于显示所有图书 CreateModelMixin:添加一本书 GenricAPIView:继承自APIView,提供as_view()等,获取当前视图类中queryset和serializer_class ,用于给ListModelMixin和CreateModelMixin使用。 class BookView( mixins.ListModelMixin, mixins.CreateModelMixin, generics.GenericAPIView ): queryset = models.Book.objects.all() serializer_class = BookModelSerializer def get(self,request, *args, ** kwargs): return self.list(request, *args, ** kwargs) def post(self,request,*args,** kwargs): return self

Django-DRF | GenericAPIView 视图类

☆樱花仙子☆ 提交于 2021-02-08 14:29:41
Django-DRF | APIView 视图类 Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。 from rest_framework.generics import GenericAPIView from rest_framework.mixins import ListModelMixin, RetrieveModelMixin, CreateModelMixin, UpdateModelMixin, DestroyModelMixin 一、GenericAPIView 基类 GenericAPIView 继承自 APIView,主要增加了操作序列化和数据库查询的方法,作用是为下面 Mixin 扩展类的执行提供方法支持。 通常在使用时,可搭配一个或多个 Mixin 扩展类。 指明视图使用的序列化器 ① 通过属性: serializer_class ② 通过方法: get_serializer_class(self) get_serializer(self, args, *kwargs) 数据库查询的属性与方法 指明使用的数据查询集 ① 通过属性 queryset ② 通过方法 get_queryset

Django与drf 源码视图解析

眉间皱痕 提交于 2021-02-08 13:00:50
0902自我总结 Django 与drf 源码视图解析 一.原生Django CBV 源码分析:View """ 1)as_view()是入口,得到view函数地址 2)请求来了调用view函数,内部调用dispatch函数完成请求分发 3)dispatch函数将请求方式映射成视图类的同名方法,完成请求的处理,得到相应 4)再将相应的结果一层层返回 """ 二.drf CBV 源码分析:APIView """ 1)as_view()是入口,得到view函数地址,在范围view函数地址时局部禁用csrf认证 2)请求来了调用view函数,内部调用(APIView类的)dispatch函数完成请求分发 3)dispatch函数 二次封装request、完成三大认证后,再将请求方式映射成视图类的同名方法,完成请求的处理,得到相应,再对相应做渲染处理 4)再将相应的结果一层层返回 """ 三.APIView做的处理 as_view : 就干了一件事,禁用csrf认证 dispatch : 1)二次封装request 2)三大认证 四.drf 的局部渲染和全局渲染 通过看了源码我们对于渲染内容是 JSONRenderer 还是 BrowsableAPIRenderer JSONRenderer与BrowsableAPIRenderer的导入 from rest_framework

$Django Rest Framework-序列化组件

亡梦爱人 提交于 2021-01-25 03:50:56
1 序列化组件 e= serializers. SerializerMethodField() # 方法名:叫get_字段名, 参数,返回字典   def get_e( self,obj ): #obj为book对象 from app01 import models from rest_framework import serializers from rest_framework.serializers import Serializer,ModelSerializer from django.http import JsonResponse class auth(Serializer): name = serializers.CharField() age = serializers.CharField() # 方式1 class ser(Serializer): # *****如果不指定source,字段必须对应起来,如果指定了source,字段可以任意命名 a=serializers.CharField(source= ' name ' ) # source 可以指定字段,也可也指定方法 b=serializers.CharField(source= ' authors ' ) c =serializers.CharField(source= ' publish.name

Django rest_framework 认证源码流程

。_饼干妹妹 提交于 2021-01-19 07:37:30
一、请求到来后,都要先执行dispatch方法 dispatch根据请求方式的不同触发get/post/put/delete等方法 注意,APIView中的dispatch方法有很多的功能 def dispatch(self, request, *args, ** kwargs): """ `.dispatch()` is pretty much the same as Django's regular dispatch, but with extra hooks for startup, finalize, and exception handling. """ self.args = args self.kwargs = kwargs 第一步:对request进行加工(添加数据) request = self.initialize_request(request, *args, ** kwargs) self.request = request self.headers = self.default_response_headers # deprecate? try : # 第二步: # 处理版权信息 # 认证 # 权限 # 请求用户进行访问频率的限制 self.initial(request, *args, ** kwargs) # Get the appropriate

Django rest framework 的认证流程(源码分析)

陌路散爱 提交于 2021-01-19 07:36:59
一、基本流程举例: urlpatterns = [ url(r ' ^admin/ ' , admin.site.urls), url(r ' ^users/ ' , views.HostView.as_view()), ] urls from rest_framework.views import APIView from rest_framework.response import Response class HostView(APIView): def dispatch(self, request, *args, ** kwargs): """ 请求到来之后,都要执行dispatch方法,dispatch方法根据请求方式不同触发 get/post/put等方法 注意:APIView中的dispatch方法有好多好多的功能 """ return super().dispatch(request, *args, ** kwargs) def get(self, request, *args, ** kwargs): return Response( ' GET请求,响应内容 ' ) def post(self, request, *args, ** kwargs): return Response( ' POST请求,响应内容 ' ) def put(self, request