请教Django REST framework的一些问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教Django REST framework的一些问题相关的知识,希望对你有一定的参考价值。
参考技术A restful 通过http的状态码来做为操作结果的执行状态的,比如访问/post/<id>/ 返回404 就是不存在,200 就是存在, 你发送一个post请求到 /post/ 接口上,返回201 表示创建成功,返回403表示没有权限之类的。rest framework 返回的数据其实是一个分页的结果,你可以通过定制paginationSerializer来完成你的需求Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
【中文标题】Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers【英文标题】:Django-rest-framework and django-rest-framework-jwt APIViews and validation Authorization headers 【发布时间】:2019-05-12 20:56:08 【问题描述】:我正在使用 DRF 和 DRF-jwt 来保护我的 API。目前我有一些这样写的CBV
class Organization(APIView):
permission_classes = (IsAuthenticated,)
@method_decorator(csrf_exempt, name='dispatch')
class OfficeVisitsOverview(APIView):
def post(self, request, *args, **kwargs):
cursor = connection.cursor()
(before, today) = getDateRange()
cursor.execute("SELECT format(COUNT(*), 'N0') \
FROM Medi_OfficeVisit \
WHERE ( cast(VisitDate as date) BETWEEN '0' AND '1' ) \
".format(before, today))
data = dictfetchall(cursor)
connection.close()
return JsonResponse("numberOfOVs": data[0][""])
根据我的理解,APIView 和权限类 IsAuthenticated 确保存在与请求标头一起发送的授权令牌。你怎么能确定没有人修改过 JWT?我怎么知道我的 Django 应用程序中的 Secret_Token 每次都被用来解码/编码/验证/验证每个请求接收/发送的 JWT?这对我的 API 向公众开放是否足够安全?
【问题讨论】:
【参考方案1】:经过身份验证只需确保当前 request.user.is_authenticated 为 True。检查标头、验证令牌等并设置 User.is_authenticated 是身份验证后端的责任。这是您在设置 rest-framework-jwt 时添加到设置文件中的一个。这是一个专为安全身份验证而创建的应用程序,所以是的,这就足够了。但是你还是要照顾其他方面的,比如 SSL、sql 注入等等(搜索 Django 安全性)。 警告!不要使用 .format 创建 SQL 查询,因为这是 SQL 注入的直接方式。如果您稍后使用一些用户提供的参数进行查询,您将处于危险之中。将参数作为第二个参数传递给 cursor.execute 或使用 ORM 来避免这种情况。
【讨论】:
以上是关于请教Django REST framework的一些问题的主要内容,如果未能解决你的问题,请参考以下文章
Django REST Framework:序列化程序上下文如何工作?
Django-rest-framework 和 django-rest-framework-jwt APIViews and validation Authorization headers
Django Rest Framework 和 django Rest Framework simplejwt 两因素身份验证