,参数也可以调整),字段名称必须与model中的一致 在GET接口逻辑中,获取QuerySet 开始序列化:将QuerySet作业第一个参数传给序列化类,many默认为False,如果返回的数据是一个列表嵌套字典的多个对象集合...程序启动,开始初始化,获取配置信息,获取视图类并加载到内存中,获取url及视图类的对应关系 开始绑定视图类和url的对应关系,执行as_view()方法 as_view()方法被执行的时候传递了参数,为字典形式...就指向视图函数的实例对象 等待客户端请求 请求到来,开始执行视图函数,注意,调用视图函数时的方式是view(request),而如果url带有参数,调用方式为view(request, xxx=id)的形式...P\d+),所以此时的调用方式为view(request, pk=id) 视图函数中有一行self.kwargs = kwargs,所以pk已经被视图函数找到了 视图函数返回self.dispatch(...,更新token值 创建俩个model,(token可以存储在user表中,建议存储在user表中): from django.db import models # Create your models
DRF框架学习(四) 1.视图集对象的action属性 作用: 获取现在要执行的是哪一种操作。 self.action:是字符串类型,目的是获取所有执行的操作。...在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行对象访问权限的判断 DRF框架提供了四个权限控制类: AllowAny允许所有用户...pip install django-filter 在配置文件中增加过滤后端的设置: INSTALLED_APPS = [ ......8.1使用方法: 在类视图中设置filter_backends,使用 rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了...class StandardResultPagination(PageNumberPagination): # 分页默认页容量 page_size = 3 # 获取分页数据时,传递也容量的参数名称
def has_permission(self, request, view): user_id = request.GET.get('uid') user = models.UserInfo.objects.filter...(pk=user_id).first() if not user or user.role == 2: return False else:...(pk=user_id).first() if not user or user.username in BLACK_NAME_LIST: raise AuthenticationFailed...('您没有登录或者被关小黑屋啦') else: return user.username,user_id urls.py from django.conf.urls...PageNumberPagination): '''分页,自定义每页显示2条''' page_size = 2 class BWHViewSet(ModelViewSet): '''在黑名单中的用户禁止查看三围信息
在Django项目中新建permissions 引入库 from django.core.exceptions import ObjectDoesNotExist from rest_framework.permissions...import BasePermission from xxx import models 实现代码 class CanAccess(BasePermission): def has_permission...(self, request, view): kong_user = request.META.get(HEAD_KEY, "") pk = view.kwargs.get...('pk', 0) url_method, url_path = request.method, request.path try: # 获取当前用户...action_user = models.TbUser.objects.get(id=kong_user) # 获取当前用户所在的所有用户组
1.认证组件 1.1定义认证,新建一个 auth.py 的文件 1.1.1 继承BaseAuthentication 1.1.2 钩子函数名是确定的 1.1.3 返回值返回两个参数,request.user...和 request.auth,即 user_obj 和 token 1.1.4 获取 token 的方式有多种,见贴图 from rest_framework import authentication...from django.core.cache import cache from rest_framework.request import Request from rest_framework.exceptions...= cache.get(token) # 有 token 获得 user_id if user_pk: user_obj = models.User.objects.filter...(pk=user_pk).first() cache.set(token, user_pk, 60 * 20) # redis重新设置最大过期时间 return
视图中重写perform_create()方法,意思是在保存时,把request.user值赋给owner字段。...我们的请求中并没有用户信息,正常来说在访问视图的时候就该被拦截了。 给视图添加认证 我们需要让API更符合常规,让未认证的用户不能执行视图中的代码。...登录视图 如果用浏览器打开http://127.0.0.1:8000/snippets/,会发现只有GET方法没有POST,这是因为需要添加DRF登录视图,在tutorial/urls.py中添加rest_framework.urls...如果要实现token或jwt认证,需要使用到rest_framework.authentication: ? 或rest_framework_jwt.authentication: ?...东方说 DRF实现认证和权限的关键在于新增permissions.py模块,编写class,继承permissions.BasePermission,重写has_permission()或has_object_permission
框架采用的是RBAC认证规则,RBAC认证规则通常分为三表规则、五表规则,Django采用的是六表规则 三表规则: 1.用户表 2.角色表 3.权限表 五表规则: 1.用户表 2.角色表 3...authenticate(self, request): # 前台在请求头中携带认证信息,且默认规范用Authorization字段携带认证信息 # 后台固定在请求对象的META字典中获取...---- 权限类文件 在api目录下创建,permissions.py文件,在里面定义权限类 from rest_framework.permissions import BasePermission...from django.contrib.auth.models import Group class MyPermission(BasePermission): def has_permission...配置文件中,配置drf的DEFAULT_THROTTLE_RATES,格式为 {scope字符串: '次数/时间'} # 4) 在自定义频率类中重写 get_cache_key 方法 # 限制的对象返回
""" # 路由类默认只会给视图集中的基本5个API生成地址[ 获取一条,获取多条,添加.删除,修改数据 ] from rest_framework.routers import DefaultRouter...(instance=self.get_queryset().get(pk=6)) return Response(serilizer.data) """在多个视图类合并成一个视图类以后,那么有时候会出现一个类中需要调用多个序列化器...在执行视图的dispatch()方法前,会先进行视图访问权限的判断 在通过get_object()获取具体对象时,会进行模型对象访问权限的判断 内置提供的权限: AllowAny 允许所有用户 IsAuthenticated...可以在配置文件中全局设置默认的权限管理类,如: REST_FRAMEWORK = { .......使用方法: 在类视图中设置filter_backends,使用rest_framework.filters.OrderingFilter过滤器,REST framework会在请求的查询字符串参数中检查是否包含了
DRF提供了认证的方法 我们知道在APIView执行的过程中,在dispatch方法中走了三大认证self.initial(request, *args, **kwargs) def initial...token,token放在哪是自己规定的,比如从查询参数中获取 token = request.query_params.get('token') # 比对随机字符串...,分开写会好一点 频率 作用 限制视图接口被访问的频率次数 限制条件 : IP、ID、唯一键 频率周期 : 时(h)、分(m)、秒(s) 频率次数 : [num] / s 没有达到限制频率可正常访问接口...), } 总结 写一个类,继承SimpleRateThrottle,重写类属性scope,scope值自定义,配置文件中一致就行,重写get_cache_key方法,返回什么限制什么 在配置文件中配置...token,token放在哪是自己规定的,比如从查询参数中获取 token = request.query_params.get('token') # 比对随机字符串
import APIView from rest_framework.response import Response from .models import * from django.shortcuts...import * from django.shortcuts import HttpResponse from django.core import serializers from rest_framework...REST框架提供了一组已经混合好(mixed-in)的通用视图,我们可以使用它来简化我们的views.py模块。...中: from rest_framework.permissions import BasePermission class SVIPPermission(BasePermission): message....service.throttles.py中: from rest_framework.throttling import BaseThrottle VISIT_RECORD={} class VisitThrottle
的认证框架(authentication_classes数组不为空)并且身份认证失败,就抛出NotAuthenticated异常,否则会抛出PermissionDenied异常 class NotAuthenticated...default_code = 'permission_denied' 而PermissionDenied会返回错误403(拒绝授权访问) 在向permission_denied()类传递参数时,使用了反射...message属性,没找到就使用None,而这个参数在后来只会被用在PermissionDenied异常上,这些异常都继承自APIException,而在APIException的构造器中,可以发现detail...参数就是异常描述,而在自己的权限类中定义message属性可以改变认证失败后的描述 class APIException(Exception): status_code = status.HTTP...import HttpResponse from django.http import JsonResponse from rest_framework.views import APIView from
载荷中的有效期设置 JWT_AUTH = { # 1.token前缀:headers中 Authorization 值的前缀 'JWT_AUTH_HEADER_PREFIX': 'JWT...[ 'rest_framework_jwt.authentication.JSONWebTokenAuthentication', # 在 DRF中配置JWT认证 #...'rest_framework.authentication.SessionAuthentication', # 使用session时的认证器 # 'rest_framework.authentication.BasicAuthentication..., view): print(request.user) user_obj = User.objects.filter(id=request.user.pk).first...() if user_obj.vip.id !
: 1)根据pk获取指定的图书对象 2)获取参数(btitle,bpub_date)并进行校验 3)修改指定的图书的数据并更新到数据表 4)返回修改图书的json数据,状态码:200 3、删除指定的图书信息...: 1)根据pk获取指定的图书对象 2)删除对应数据 3)返回响应,状态码:204 注意: pk是id的一个别称 重点掌握的是实现的思路,如何去将需求一步步实现出来,然后其次重要的就是代码。...通常简称为DRF框架 或 REST framework。 DRF框架是建立在Django框架基础之上,由Tom Christie大牛二次开发的开源项目。...Django框架学习中创建的demo工程,在settings.py的INSTALLED_APPS中添加’rest_framework’。...3.2见识DRF的魅力 我们仍以在学习Django框架时使用的图书英雄为案例,使用Django REST framework快速实现图书的REST API。 3.2.1.
做权限认证 # 参数:权限对象self,请求对象request,视图类对象 # 返回值:有权限返回 True,无权限返回 False...request, message=getattr(permission, 'message', None) ) # 获取权限...get_permissions(self): # 由权限类定义 return [permission() for permission in self.permission_classes] 在...True 不满足设置的用户条件,代表无权限,返回 False 进行全局或局部配置 全局:配置文件 settings.py 局部:在视图类 import 测试接口:前台在请求头携带认证信息,且默认规范用...def has_permission(self, request, view): # values_list(falt=True) 获取列表转为集合,与目标求交集 group
import render,HttpResponse from django.http import JsonResponse from rest_framework.views import APIView...first() if not obj: ret['code'] = 1001 ret['msg'] = '用户名或密码错误...first() if not token_obj: raise exceptions.AuthenticationFailed('用户认证失败') #在rest...parser_context=parser_context # ) #request(原始request,[BasicAuthentications对象,]) #获取原生...'], } 内置权限 django-rest-framework内置权限BasePermission 默认是没有限制权限 class BasePermission(object): """
REST framework 在Django框架基础上,进行二次开发 用于构建Restful API 简称为DRF框架或REST freamwork框架 特性 提供了强大的Serializer序列化器...'rest_framework' INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes...', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework...): project = Projects.objects.get(id=pk) serializer = ProjectSerializer(instance=project...修改 projects.serializer.ProjectSerializer中的 id = serializers.IntegerField(label='ID', read_only=True)
,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 所有的数据,不管是通过网络获取的还是操作数据库获得(增删改查)的数据,都是资源...在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。...GET(SELECT):从服务器取出资源(一项或多项)。即获取数据 POST(CREATE):在服务器新建一个资源。...animal_type_id=1:指定筛选条件 参数的设计允许存在冗余,即允许API路径和URL参数偶尔有重复。比如,GET /zoo/ID/animals 与 GET /animals?...下面我们来看看基于Django Rest Framework框架实现 五、基于Django Rest Framework框架实现 1、自定义认证规则 详见链接 class MyAuthtication
Django Rest Framework 权限(上) ?...权限类的具体操作 获取所有的权限类 原生的权限类 二、源码解析 像 Django进阶篇 Rest framework (七) 一样进入,request 的请求流程,进入源码查看具体权限的操作。...④ 权限类的具体操作 在这里可以看到和认证中有类似的操作,获取所有的权限类,并且执行每一个权限类的 has_permission() 方法,而这个方法具体封装了判断权限操作,但是 has_permission...⑥ 原生的权限类 像认证那样,django rest framework 中也有权限类。 ?...三、总结 权限的流程,其实和上一章节 Django进阶篇 Rest framework (一) 的认证流程是一样的,认证类封装到 request 中,然后再调用认证类的方法,不过这里的方法返回值不再是像认证组件那样的直接返回一个认证的对象
Django,一个免费的开源Python Web框架,遵循模型视图控制器(MVC)软件架构模式。 Django REST框架,一个功能强大且灵活的工具包,用于在Django中构建REST API。...npm您的计算机上安装了Node.js 6+和5.2或更高版本。您可以按照如何在安装PPA时在Ubuntu 18.04上安装Node.js中的说明安装它们。...在API消耗方面,在Django的REST框架中的一个串行器允许将复杂的模型实例和查询集转换成JSON格式。...api/customers/:此端点用于按主键或ID获取,更新和删除单个客户。...结论 在本教程中,您使用Django和React创建了一个演示应用程序。您使用Django REST框架构建REST API,使用Axios来使用API,使用Bootstrap 4来构建CSS样式。
领取专属 10元无门槛券
手把手带您无忧上云