本文从分析现在流行的前后端分离Web应用模式说起,然后介绍如何设计REST API,通过使用Django来实现一个REST API为例,明确后端开发REST API要做的最核心工作,然后介绍Django...验证使用序列化器进行反序列化时,需要对数据进行验证后,才能验证成功的数据或保存成模型类对象。在反序列化的数据前,必须调用is_valid()方法进行验证,验证成功返回True,否则返回False。...如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。验证成功,可以通过序列化器对象的validated_data属性数据。...serializers.ValidationError,可以通过传递raise_exception=True参数开启,REST framework接收到此异常,会向前端返回HTTP 400 Bad Request...fields 指明为模型类的哪些字段生成我们可以在python manage.py shell中查看自动生成的BookInfoSerializer的具体实现>>> from booktest.serializers
把其他格式的数据转换为程序中数据结构类型,这个过程叫做反序列化的过程。 例:将前端传递的数据保存到模型对象中的过程,叫做反序列化过程。...通常简称为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....raise serializers.ValidationError("图书不是关于Django的") return value 然后在字段中添加validators选项参数,写一个列表,将定义的校验函数名放进去
token值会保存到数据中,跟这个用户相关联 ? (4)客户端身份验证 对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP header 中。...未经身份验证的响应被拒绝将导致 HTTP 401 Unauthorized 的响应和相应的 WWW-Authenticate header。...', 'rest_framework.authentication.TokenAuthentication' ) } drf的token缺点 保存在数据库中,如果是一个分布式的系统...7.2.json web token方式完成用户认证 使用方法:http://getblimp.github.io/django-rest-framework-jwt/ (1)安装 pip install...= code: raise serializers.ValidationError("验证码错误") else: raise serializers.ValidationError
插件中搜索HttpRequester [0] (4)客户端身份验证 对于客户端进行身份验证,令牌密钥应包含在 Authorization HTTP header 中。...未经身份验证的响应被拒绝将导致 HTTP 401 Unauthorized 的响应和相应的 WWW-Authenticate header。...', 'rest_framework.authentication.TokenAuthentication' ) } drf的token缺点 保存在数据库中,如果是一个分布式的系统...300-399 用于已经移动的文件并且常被包含在定位头信息中指定新的地址信息。 400-499 用于指出客户端的错误。 500-599 用于支持服务器错误。...= code: raise serializers.ValidationError("验证码错误") else: raise serializers.ValidationError
验证失败,可以通过序列化器对象的 errors 属性获取错误信息,返回一个字典, 包含字段和字段的错误,若是非字段错误,可以通过修改 REST framework 配置中的 NON_FIElD_ERRORS_KEY...来控制错误字典中的键名。...APIView与View的不同之处在于: 传入到视图方法中的是REST framework的Request对象,而不是Django的HttpRequeset对象; 视图方法可以返回REST framework...在APIView中仍以常规的类视图定义方法来实现get() 、post() 或者其他请求方式的方法。...在试图中可以调用该方法获取详情信息的模型类对象。 若详情访问的模型类对象不存在,会返回404。
在服务端响应时,使用序列化器可以完成对数据的序列化。将模型类数据装换和其他数据装换成json 格式的数据。...使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。...如果是非字段错误,可以通过修改REST framework 配置中的NON_FIELD_ERRORS_KEY 来控制错误字典中的键名。...=True 参数开启,REST framework 接收到此异常,会向前端返回HTTP 400 Bad Request响应。...(source='test') test是Book表模型中的方法 # SerializerMethodField()的使用 1 它需要有个配套方法,方法名叫get_字段名,返回值就是要显示的东西
定义方法Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serializer。...序列化使用我们在django shell中来学习序列化器的使用。...验证使用序列化器进行反序列化时,需要对数据进行验证后,才能验证成功的数据或保存成模型类对象。在反序列化的数据前,必须调用 is_valid() 方法进行验证,验证成功返回True,否则返回False。...如果是非字段错误,可以通过修改REST framework配置中的 NON_FIELD_ERRORS_KEY 来控制错误字典中的键名。...serializers.ValidationError,可以通过传递 raise_exception=True 参数开启,REST framework接收到此异常,会向前端返回HTTP 400 Bad
身份验证方案始终定义为类列表,DRF框架尝试对列表中的每个类进行身份验证,并使用成功进行身份验证的第一个类的返回值设置request.user和request.auth。...在之前已经测试过,传统的前后端分离项目中,前端登录,后端生成对应的token信息并保存到session或数据库中。但是如果存在XSS漏洞,就可能存在cookie泄漏、信息不安全的问题。...并不需要保存到用户数据表中,因此在验证之后需要删除,在validate(attrs)方法中实现即可,同时因为人为设定前端传递回来的手机号数据变量名为username而非mobile,因此需要在validate...(attrs)方法中为attrs变量增加键为mobile的数据,并且要修改UserProfile模型的mobile字段允许为空,修改如下: class UserProfile(AbstractUser)...其中一类信号是模型信号,django.db.models.signals模块定义了模型系统发送的一组信号,对模型进行操作后,Django会发出全局信号,捕捉到之后可以加入需要的业务逻辑,具体包括pre_init
drf返回的token值会保存到数据库中并与用户进行关联: ? 然后客户端需要进行身份验证,令牌密钥包含在 Authorization HTTP header 中。...' 6 ) 7 } drf的token也有很大的缺点: token信息是保存在数据库中的,如果是一个分布式的系统,就比较麻烦 token永久有效,没有过期时间 2、json web token...方式完成用户认证(JWT) 在虚拟环境中pip install djangorestframework-jwt 将settings中的REST_FRAMEWORK的TokenAuthentication...jwt接口默认采用的是用户名和密码登录验证,如果用手机登录的话,就会验证失败,所以我们需要自定义一个用户验证,在users/view.py中编写: 1 from django.shortcuts import...中添加密码字段: 1 fields = ('username', 'code', 'mobile', 'password') 需要注意的是密码不能明文显示,需要加密保存, 这是重载Create方法:
django中视图本质上就是个函数,接受用户传入的请求,返回对应的响应。 在视图中处理业务逻辑。django约定将视图放在views.py的文件中。这个文件应放在项目或者应用目录中。...基于类的视图,换了一种写法,不能替代函数视图,有一些优势: 用特定的方法去管理http方法(get post) 使用面向对象的技术,可以将代码分解成可重用的组件 所以后续大部分会采用类视图的方式编写代码...这个创建是个抽象方法,所以需要我们去实现它 我们在users.serializers.UserRegisterSerializer.create中实现了它 def create(self, validated_data...一旦其中一个url模式匹配,django将导入并调用给定的视图。 如果没有匹配,或者在此过程中引发任何异常,django调用错误视图。...注册路由 根路由 在根路由backend/LightSeeking/urls.py中添加 path('users/', include('users.urls')), 表示前端可以使用http://IP
序列化 序列化demo 字段类型 字段参数 序列化自定制返回字段 方法一:在序列化类(serializers.py)中写 方法二:在表模型(models.py)中写 反序列化 反序列化demo 反序列化之局部和全局钩子...),序列化器可以把字典转换成模型存到数据库中 存数据库需要校验,反序列化就可以帮我们完成数据的校验功能 通俗理解为: 响应给前端的内容需要序列化(给前端看),存数据库的数据就反序列化; 序列化:模型对象...demo 在app中新建serializer.py,自定义类,继承DRF框架的Serializer及其子类 在类中写要序列化的字段(序列化哪些就写哪些,不序列化的不写) 使用序列化类,视图类中用,得到序列化类对象...---》只能看到name # 反序列化,前端需要传什么过name,price,author都传 序列化自定制返回字段 如果我们想自定制序列化返回字段的样式,可以使用,有两种方法 方法一:在序列化类...value 在序列化类中写需要搭配get_字段的方法,来自定制字段 方法二:在表模型(models.py)中写 '''models.py''' from django.db import models
后台记录异常具体信息 """ ---- 源码分析 # 异常模块:APIView类的dispatch方法中 response = self.handle_exception(exc) # 点进去 #...获取处理异常的句柄(方法) # 一层层看源码,走的是配置文件,拿到的是rest_framework.views的exception_handler # 自定义:直接写exception_handler...(返回值)response,有值代表drf已经处理了,None代表需要自己处理 # 自定义异常处理文件exception,在文件中书写exception_handler函数 from rest_framework.views...:param status: http响应状态码 :param template_name: drf也可以渲染页面,渲染的页面模板地址(不用了解) :param...return Response({ 'detail': '服务器错误' }, status=status.HTTP_500_INTERNAL_SERVER_ERROR
版本控制:讨论DRF中实现API版本控制的方法,如URL路径版本、请求头版本等。...异常处理:介绍如何使用DRF的异常体系(如PermissionDenied、NotAuthenticated、ValidationError等)处理错误情况,并自定义异常响应。...二、易错点与避免策略序列化器验证遗漏:确保在序列化器中充分定义验证规则,使用validate_方法对关联字段、自定义逻辑进行验证,防止脏数据进入数据库。...:在项目中统一响应格式,包括状态码、数据结构、错误消息等,遵循RESTful原则,提升API的易用性和一致性。...REST framework的关键知识点、规避常见错误,并通过实战项目积累经验,将有助于你在Python面试中展现优秀的API开发技能,从容应对DRF相关的问题挑战。
在 Sentry,我们有两种不同类型的序列化器 :Django Rest Framework Serializer 和 Model Serializer。...https://www.django-rest-framework.org/ 示例 在典型的 serializer 中,指定了字段,以便它们根据您的规范验证数据的类型和格式。...如果写入适合 model,Django Rest Framework 序列化程序还可以将信息保存到数据库中。...在上面给出的示例中,类型被检查并且必须是某个字符串。如果某个字段与您的验证方法所期望的不匹配,则会引发 ValidationError。...用法 在 endpoint 中,这是 Django Rest Framework Serializer 的典型用法 class ExampleEndpoint(Endpoint): def post
使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。...在获取反序列化的客户端数据前,必须在视图中调用序列化对象的is_valid()方法,序列化器内部是在is_valid方法内部调用验证选项和验证方法进行验证,验证成功返回True,否则返回False。...如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。...', 'django.contrib.messages', 'django.contrib.staticfiles', 'rest_framework', # 把drf框架注册到...,需要对来自客户端的数据进行处理,例如,验证和保存到数据库中。
今天讲一下如何用 Django REST framework[1](DRF) 来实现 OTP,阅读本文需要一定的 DRF 的基础知识。...('请一分钟后再次发送') return email 3、发送验证码 发送验证码,其实就是生成验证码并保存的过程,借助于 Django REST framework 框架的 GenericViewSet...= code: raise serializers.ValidationError('验证码错误') # 不用将code返回到数据库中,只是做验证...最后的话 一次性验证码(OTP)的逻辑简单,需要思考的是如何在 DRF 的框架中填空,填在哪里?...这其实需要了解 DRF 的 ModelSerializer 类和 ViewSet 类之前的关系,在调用关系上,ViewSet 类调用 ModelSerializer 来实现字段的验证和数据保存及序列化,
Django REST框架构建Web API。...Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。 ? ?...在登录需求中常见的手机验证码如何实现,原有的 obtain_jwt_token 方法中只能用户名和密码。...2.users 应用下的 views.py 文件中添加 ? 小技巧补充 from django.http import JsonResponse 封装响应内容 ? ? ?...若需要短信验证码登录,可以在 serializers.py 文件中添加验证字段或自定义验证方法。
序列化使用 我们在django shell中来学习序列化器的使用。...验证 使用序列化器进行反序列化时,需要对数据进行验证后,才能获取验证成功的数据或保存成模型类对象。...如果是非字段错误,可以通过修改REST framework配置中的NON_FIELD_ERRORS_KEY来控制错误字典中的键名。...serializers.ValidationError,可以通过传递raise_exception=True参数开启,REST framework接收到此异常,会向前端返回HTTP 400 Bad Request...的', code='invalid')]} 3)validate 在序列化器中需要同时对多个字段进行比较验证时,可以定义validate方法来验证,如 class BookInfoSerializer(
# 完成数据的校验,会走序列化类的 全局钩子校验规则,校验得到登录用户并签发token存储在序列化对象中 核心源码:rest_framework_jwt.serializer.JSONWebTokenSerializer...) ## 将当前用户和签发的token都保存在序列化对象中 self.user = user_obj self.token =...先在api目录下的filter.py文件中中自定义一个类 ## django-filter插件过滤器类 from django_filters.rest_framework import FilterSet...,并且在filter_class中配置 ## Car群查接口 from rest_framework.generics import ListAPIView from . import models #...重点使用方法 ---- 自定义过滤字段 api目录下的filter.py文件中 ## django-filter插件过滤器类 from django_filters.rest_framework import
在django中很著名的一个框架是django-rest-framework,帮我们减少了很多工作量,尤其在序列化与反序列化成我们需要的格式帮了我们省了很多事 在这里就记录一下个人的学习过程 django-rest-framework...实现一组api的基本流程 在models.py中创建自己需要的数据模型 创建serializers.py在其中写出适合的serializer类,能够正确的序列化与反序列化 在views.py中写出合适的...api类,只需要继承rest_framework中generics中的某个类,重写我们需要的方法实现合适的逻辑即可 在urls.py中配置所需要的url 一组api的demo 创建一个model 在创建好的...是多少, serializer.data是对模型序列化成的字典,如果想拼成需要的格式,需要提前构造合适的字典,在用Response()方法帮我们序列化成json类型 在urls中自定义资源的url 在urls.py...上述环境在ubuntu16.04 lts django1.9 djangorestframework3.6.2中测试成功 上述文字皆为个人看法,如有错误或建议请及时联系我
领取专属 10元无门槛券
手把手带您无忧上云