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()

结论

对于我们的用例来说,这是一个非常特别的助手,但是我认为它可以很容易地调整以适应其他需求。

请随时提出您的请求。谢谢。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
我可以用C++代码使用java代码吗?   java使用JSR303在派生类中提供更具体的约束   java在这个查找唯一路径数算法中我做错了什么?   java如何为2个不同的服务提供商使用2个不同的SSL证书?   java在Gridview上绘制文本   java使用连接for循环构建字符串名   java StringBuilder拆分无法处理某些文件   java事件关注EditText   Java Web Start“找不到URL的缓存资源”   java程序从命令行运行的速度比在Eclipse中慢   java为什么HttpServletRequest会截断#字符上的url输入?   java自定义折叠工具栏平滑标题大小调整   使用Mockito对安卓 java中调用另一个静态函数的函数进行单元测试   http在java客户机中使用cachecontrol头   java如何使用。是否使用Delimiter从输入文件中排除标点符号和数字?   使用上下文作为参数/参数的java   java更有效地从Jar中提取文件   java为多个JButton提供相同的actionListener