jwt支持的django rest框架请求
drf-requests-jwt的Python项目详细描述
这是一个用于在django实例之间通信的简单助手。
它适合与django rest framework api点和序列化程序一起工作。
功能
- 如果尚未向JWT进行身份验证
- 用不同的后端缓存jwt(目前是django缓存和文件系统)
- 在交付结果之前,请求所有页面
- 使用标准drf序列化程序类反序列化结果
安装它
pip install drf_requests_jwt
如何使用
假设在另一个django实例上有一个分页的api点,并且需要获取所有设备。
然后,您将继承httprequestservice并实现抽象方法,大致如下:
from apps.devices.models import Device # Your Device Django model. from rest_framework import serializers from drf_requests_jwt.services import HttpRequestService class DeviceSerializer(serializers.Serializer): eui = serializers.CharField() def create(self, validated_data): return Device(**validated_data) class DeviceHttpRequestService(HttpRequestService): obtain_jwt_allowed_fail_attempts = 3 cache_backend_class = 'drf_requests_jwt.backends.django_cache.DjangoCacheBackend' def _get_base_url(self): return 'https://example.com' def _get_jwt_login_url_path(self): return 'api/v1/auth/jwt/login/' def _get_url_path(self): return 'api/v1/devices/' def _get_username(self): return 'john' def _get_password(self): return 'snow' def _get_params(self): return { 'param1': 'val1', 'param2': 'val2', } def get_deserialized_data(self): device_list = [] for device in self.get_results_from_all_pages(): serializer = DeviceSerializer(data=device) if serializer.is_valid(): device_list.append(serializer.save()) return device_list
现在,在您的业务逻辑中,您需要这样的设备列表:
devices = DeviceHttpRequestService().get_deserialized_data()
< H2>混合蛋白< /H2>
有助于反序列化。
from drf_requests_jwt.deserializers import ObjectListDeserializerMixin from apps.devices.serializers import DeviceSerializer # Your device serializer. class DeviceDeserializerMixin(ObjectListDeserializerMixin): serializer_class = DeviceSerializer class DeviceHttpRequestService(DeviceDeserializerMixin, HttpRequestService): # ... Other abstract methods implemented def get_deserialized_data(self): return self.get_deserialized_object_list()
结论
对于我们的用例来说,这是一个非常特别的助手,但是我认为它可以很容易地调整以适应其他需求。
请随时提出您的请求。谢谢。