目录 drf-jwt认证组件、权限组件、频率组件的使用 认证组件 权限组件 频率组件 drf-jwt签发token源码分析 自定义签发token实现多方式登录 源码分析 多方式登陆签发token实例...user = self.authenticate_credentials(payload) #得到登录用户,返回(user,token) return...LoginModelSerializer(serializers.ModelSerializer): # post请求,序列化默认当做create动作进行校验,需要校验数据库,create动作username会抛用户已存在异常...# 抛用户已存在异常是多余的,所以自定义系统校验规则即可 username = serializers.CharField(min_length=3, max_length=16)...在视图类中局部配置 #在我们的settings文件中的REST_FRAMEWORK中进行如下频率配置 'DEFAULT_THROTTLE_RATES': { 'user': '5/min',#自定义已登录用户每分钟访问次数
上面列出的工具或多或少都需要花费一定时间去手动维护,在drf后端项目中可以利用其自带的Core API、第三方库Swagger以及更好的drf-yasg自动生成接口文档 2、Core API生成接口文档..., 登录的链接使用 restframework 自带的....,因此需要在路由中开启drf默认的登录入口,修改主路由 from rest_framework.schemas import get_schema_view from rest_framework_swagger.renderers...3.6 说明 Django REST Swagger从19年开始就已弃用不再维护了,作者在官方网站上说明了更推荐使用drf-yasg 可以阅读https://github.com/marcgibbons...支持针对不同用户返回不一样的 API 文档(通过public、authentication_classes、permission_classes等参数配置), 因此对于不同用户(通过HTTP 请求头中的
在使用DRF的时候,通常的文档有:默认文档RestFrameWork、CoreAPI、Swagger,Swagger是最流行的API文档库,在绝大多数服务端开发中都有用到,之前我们使用了CoreAPI来生成文档...作为键,以上其中一项作为值 auth:用auth方法的显式列表替换发现的auth description:替换发现的文档字符串 summary:一个可选的短的总结描述 deprecated:将操作标记为已弃用...extensions:规范扩展 最后我们将登录、注册接口修改为Common标签 from drf_spectacular.utils import extend_schema class LoginView...中配置了两种认证方式,因此页面就会显示两种认证方式 BUG 目前使用中存在一个BUG,就是对于read_only字段,按照我们的理解就是在查询请求是返回给客户端,而创建时在请求体中不需要包含。...目前我采用的是第一种方式,宁愿API不明确一点,也不能增加后端的复制程度。
这个应用支持多种认证体系,比如用户名或电子邮件。一旦用户注册成功,它还可以提供从无需认证到电子邮件认证的多种账户验证的策略。同时,它也支持多种社交账户和电子邮件账户。...这是在像 Django Rest Framework(下称 DRF)这样的 API 框架发布之前,大多数人所做的。...如果你对 Django 的视图类很熟悉,你会觉得使用 DRF 构建 REST API 与使用它们很相似,不过 DRF 只针对特定 API 使用场景而设计。...一般的 API 设置只需要一点代码,所以我们没有提供一份让你兴奋的示例代码,而是强调了一些可以让你生活的更舒适的 DRF 特性: 可自动预览的 API 可以使你的开发和人工测试轻而易举。...未读通知数、通知列表、标为已读等等。
DRF (Django REST Framework)[1] 有了 DRF,你可以快速将现有的 Django site 转换为 RESTful API。...DRF 非常容易上手,DRF 的接口和 Django 的非常一致。如果只能用一个第三方包,我会选择 DRF。 django-ninjia是一个类似的包,具有高性能和异步特性,但需要类型提示。...这个包从 Django 开始就已经存在了,是现代 Django 开发的中流砥柱。...它对 Django 的注册默认值进行了许多改进,包括社交身份验证、仅电子邮件登录等。我在每个 Django 项目中都使用它。 django-extensions[4] 提供了一些命令扩展。...django-anymail[7] 发送电子邮件可能很棘手,但它是任何用户注册过程或通知的核心部分。
查看redis中是否存在。...count":"数量", "selected":"勾选状态" }, ... ] 3.1业务逻辑 1.获取用户的购物车记录 1.1如果用户已登录...1.2获取用户,防止触发DRF框架的认证机制,对错误进行捕获。 2.删除用户的购物车记录。 2.1如果用户已登录,删除redis中对应的购物车记录。...2.1如果用户已登录,设置redis中用户购物车记录勾选状态。 2.1.1获取redis链接。 2.1.2从redis hash中获取用户购物车中所有商品的id。...此命令会覆盖以存在的属性。
return APIResponse(token=user_ser.token)  ---- 返回登录用户信息 serializers.py from rest_framework...import OrderingFilter # 3)drf的分页类 - 自定义 from . import pagenations ## 自定义过滤器 from api.filters import...import OrderingFilter # 3)drf的分页类 - 自定义 from . import pagenations ## 自定义过滤器 from api.filters import...import OrderingFilter # 3)drf的分页类 - 自定义 from . import pagenations ## 自定义过滤器 from api.filters import...处理异常,如果有响应结果,代表drf已处理,如果是None,自己处理 """ 序列化组件 # 1)可以将model对象序列化成可以返回给前台的json数据 # 2)可以校验前台传来的数据,完成model
一、基础视图 (APIView)APIView 是 DRF 中所有视图的基类,继承自 Django 的 View,并添加了 DRF 特有的功能(如认证、权限、限流等)。...path("shops/", ShopView.as_view()), path("shops//", ShopDetailView.as_view()),]这种方式虽然直观,但存在大量重复代码...:http://127.0.0.1:8000/api/books/get:查询列表post:新增打开浏览器登录访问:http://127.0.0.1:8000/api/books/1get:查询单个对象...put:修改delete:删除三、通用视图的高级用法动态查询集通过重写 get_queryset() 方法,可以实现动态过滤查询集,例如只返回当前登录用户的数据:def get_queryset(self...# 使用 Token 认证 authentication_classes = [TokenAuthentication] def get_object(self): # 返回当前登录用户信息
在我们最近的工作中,构建网站使用的架构是带有 Django REST Framework(DRF)后端的 React 前端。它们是通过在前端使用 axios(前端库)调用后端 API 来交互的。...我们还使用了 Redux(前端库)来存储全局的应用程序状态(存在浏览器端)。这是我们首选,因为它允许前后端完全分离。...只要我们提前定义好请求的资源列表(后面单个都简称:endpoint)和返回的数据格式,前端和后端就可以并行的进行开发。...这也使我们可以轻松的为未来的任何项目创建移动端 App,因为它们仍然可以复用后端 API。 在本文的剩余部分,我将介绍如何配置 React 前端和 DRF 后端。...现在,你已经拥有了一个后端 DRF API:叫 /auth 的 endpoint,访问它可以获得一个身份验证令牌。让我们先配置一个用户,并运行后端服务器以供测试。
: 每一个返回代码都有具体特定含义 返回格式:推荐固定具体格式 DjangoRestFramework(DRF) https://q1mi.github.io/Django-REST-framework-documentation...boolean 在使用从外部传入的数据之前,必须使用此函数进行验证 如果验证失败,返回数据错误异常 validated_data: 经过验证后的数据,存入此结构 视图 DRF的视图从处理任务,处理流程等跟...api.tulingxueyuan.com/student/?...# 使用案例 name = self.request.query_params.get('name', None) - user - 登录后的用户信息都在...user中 - 如果没有登录,则是anoymous - 可以用来判断用户是否登录成功Responserest_framework.response.Response用Renderer
Django的配置AUTHENTICATION_BACKENDS AUTHENTICATION_BACKENDS控制了应用根据传入的参数校验用户是否属于合法用户(用户名是否存在?密码是否正确?)。...如果你想接入第三方登录,OAuth登录,都应该自定义一个Backend,无需继承任何基类,只需实现一个authenticate方法,该方法参数与django.contrib.auth.authenticate...的传入参数相同,返回一个用户对象,然后将这个Backend添加到AUTHENTICATION_BACKENDS就可以了。...raise PermissionDenied() def get_user(self, user_id): # 若通过浏览器访问则需要定义次方法,获取已登录的用户对象...会选择第一顺位的Authentication的此方法返回的结果作为WWW-Authentication头 # 如果返回为空则会将401错误转换成403错误 return
一、DRF的token基本使用 1.DRF的token登录原理 基于DRF的前后端分离登录与单独使用Django登录的原理不同,不再需要CSRF验证,DRF提供了许多开箱即用的身份验证方案,并且还允许实现自定义方案...身份验证方案始终定义为类列表,DRF框架尝试对列表中的每个类进行身份验证,并使用成功进行身份验证的第一个类的返回值设置request.user和request.auth。...在之前已经测试过,传统的前后端分离项目中,前端登录,后端生成对应的token信息并保存到session或数据库中。但是如果存在XSS漏洞,就可能存在cookie泄漏、信息不安全的问题。...捕捉返回400状态码,便于在前端查看。...从之前的DRF的测试中可以总结出,DRF请求消息返回的规范为: http_code { field1: ['', ''], field2: [], ...
Django REST Framework(DRF)为开发人员提供了一种灵活的权限系统,该系统可让您轻松地在API中管理和保护敏感数据。...在DRF中,权限是通过Permission类实现的,Permission类是一个抽象类,定义了几种方法来控制API的访问权限。...IsAuthenticated IsAuthenticated是指要求用户已通过身份验证才能访问API视图。如果用户未经过身份验证,则DRF将返回一个HTTP 401 Unauthorized响应。...IsAdminUser IsAdminUser是指只有超级用户才能访问API视图。如果用户不是超级用户,则DRF将返回一个HTTP 403 Forbidden响应。...如果未通过身份验证,DRF将返回一个HTTP 401 Unauthorized响应。在get方法中,我们还演示了如何使用request对象获取已通过身份验证的用户和凭据。
常用属性: request.data:返回POST提交的数据,与request.POST类似 request.query_params:返回GET URL参数,与request.GET类似 浏览器get...:基于Token的认证 RemoteUserAuthentication:基于远程用户的认证 DRF支持权限: IsAuthenticated:只有登录用户才能访问所有API AllowAny:允许所有用户...IsAdminUser:仅管理员用户 IsAuthenticatedOrReadOnly:登录的用户可以读写API,未登录用户只读 DRF Session 认证 参考文档: https://www.django-rest-framework.org.../api-guide/authentication/#sessionauthentication 由于Django默认提供Session存储机制,可直接通过登录内置管理后台进行验证。.../user5/ token自定义返回信息 需要重写返回信息函数 在app项目下的utils目录中新增重写信息: myapp/utils/token_auth.py from rest_framework.authtoken.views
github项目地址:sgahch/studyroom 自习室预约系统 - 设计与总结报告 第一章 需求分析 为解决高校及公共自习室普遍存在的"占座难、管理乱"问题,开发本在线预约管理系统。...后端 (Django): API 层 (DRF): 提供 RESTful API 接口供前端调用,处理业务逻辑,如用户认证、密码重置等。...Django Admin): 数据管理 (用户、自习室、座位、预约等) 2.3 接口设计 RESTful API (DRF): /api/login/: 用户登录 /api/register...性能测试 (初步): 观察页面加载速度、API 响应时间。 总结: 系统核心功能基本可用,前后端分离部分已实现用户认证和密码重置。...5.3 使用流程 确保后端 Django 服务已启动。 (如果适用) 确保前端 Vue 开发服务器已启动。
在上一章中已经完成了注册的接口了,现在需要完成登录 因为登录采用了JWT方式进行校验,所以需要继承rest_framework_simplejwt.views中的视图 登录 代码如下 from rest_framework_simplejwt.views...获取一组用户凭据并返回访问和刷新json web令牌对,以证明这些凭据的身份验证。...__init__ 里面不细看了,总之会返回这样一个token update_last_login 如果配置了UPDATE_LAST_LOGIN则会触发update_last_login操作 def...发起请求后查看数据库的last_login字段,发现时间变为了当前时间(时区为0) 异常处理 之前在backend/LightSeeking/settings.py的REST_FRAMEWORK写了 # DRF...}, status=status.HTTP_500_INTERNAL_SERVER_ERROR, exception=True) return response # 处理之后有值,就直接返回结果
一、概述Django REST Framework(DRF)中的信号(Signals)是一种非常有用的机制,可以让我们在某些重要的事件发生时执行一些自定义的代码。...DRF扩展了Django的信号系统,添加了一些新的信号,使我们可以更好地处理API相关的事件。DRF的信号是基于Python标准库中的signal模块实现的。...DRF中的信号通常用于以下情况:在对象创建、保存、删除等事件发生时执行某些操作。在请求处理过程中的某些特定时间点执行某些操作,如请求前、请求后、异常处理等。...我们可以在do_something函数中执行任何自定义的代码,如发送电子邮件、调用外部API等。...另外,DRF还提供了一些自定义的信号,如request_started、request_finished、request_exception等。
前言 上一篇我们分析了认证的源码,一个请求认证通过以后,第二步就是查看权限了,drf默认是允许所有用户访问 权限源码分析 源码入口:APIView.py文件下的initial方法下的check_permissions...""" return [permission() for permission in self.permission_classes] permission_classes又等于api_settings.DEFAULT_PERMISSION_CLASSES...drf为我们提供了4个系统权限认证: 1. AllowAny 认证规则全部返回True:`return True` 游客与登录用户都有所有权限 2....,登录用户才有权限 3....rule3) 以上定义了3条规则 rule1:请求方法是GET、OPTIONS、HEAD游客和用户都可以访问 rule2:当前用户如果有多个分组,其中必须有一个分组是管理员 rule3:管理员分组必须存在
,在Django基础工程的基础上,安装DRF并进行配置:比如统一接口返回格式、统一异常处理等,并在后面的文章中,不断完善出一套DRF脚手架,以降低后面的开发同学的趟坑成本。...for the browsable API. pip install django-filter # Filtering support 备注:安装DRF时,请留意周边版本依赖,比如: [3.10.2...rest_framework.authentication.SessionAuthentication', # 'rest_framework.authentication.BasicAuthentication', ], # 接口权限设置:仅支持登录用户访问...": 0 } DRF的接口一般会直接返回创建的数据或者数据列表,如图所示: [DRF接口返回一] [DRF接口返回二] 于是,结合开发规范对接口的要求,我们需要对DRF的返回格式进行统一处理 首先,我们简单看下...部分接口的路由单独拎出来,比如以/api/开头的路由到DRF提供的接口中: [根目录下的urls.py] 而在具体app的路由中,直接使用DRF的router模块,并将视图视图注册到路由中即可: [app
DRF 框架,全称为 Django Rest Framework,是 Django 内置模块的扩展,用于创建标准化 RESTful API;它利用 ORM 映射数据库,并自定义序列化数据进行返回,多用于前后端分离项目...django-admin startproject drf_demo 2-4 数据库映射及超级用户创建 ?...http://127.0.0.1:8000/ 接着,点击界面右上角的登录,使用超级用户进行登录后 ?...如此,就完成了一个简单 RESTful API 的构建 3....最后 文中介绍了快速入门 DRF 的基本流程,实际项目中,一般将序列化、视图类单独分离出来 另外,序列化、视图函数、API 可以根据父类去自由定制,这部分内容下篇文章再进行说明