From a1e2d29cf404b372efeeec476380a4855f066895 Mon Sep 17 00:00:00 2001 From: shaohuzhang1 Date: Tue, 12 Mar 2024 17:16:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=BA=94=E7=94=A8=E5=85=AC=E5=85=B1?= =?UTF-8?q?=E8=AE=BF=E9=97=AE=E9=93=BE=E6=8E=A5=E6=B7=BB=E5=8A=A0=E8=AE=BF?= =?UTF-8?q?=E9=97=AE=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...licationaccesstoken_access_num_and_more.py | 29 +++++++++++++++++++ apps/application/models/api_key_model.py | 7 +++++ .../serializers/application_serializers.py | 18 +++++++++++- .../swagger_api/application_api.py | 7 ++++- 4 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 apps/application/migrations/0008_applicationaccesstoken_access_num_and_more.py diff --git a/apps/application/migrations/0008_applicationaccesstoken_access_num_and_more.py b/apps/application/migrations/0008_applicationaccesstoken_access_num_and_more.py new file mode 100644 index 000000000..eb387a422 --- /dev/null +++ b/apps/application/migrations/0008_applicationaccesstoken_access_num_and_more.py @@ -0,0 +1,29 @@ +# Generated by Django 4.1.10 on 2024-03-12 17:11 + +import django.contrib.postgres.fields +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('application', '0007_alter_application_desc'), + ] + + operations = [ + migrations.AddField( + model_name='applicationaccesstoken', + name='access_num', + field=models.IntegerField(default=100, verbose_name='访问次数'), + ), + migrations.AddField( + model_name='applicationaccesstoken', + name='white_active', + field=models.BooleanField(default=False, verbose_name='是否开启白名单'), + ), + migrations.AddField( + model_name='applicationaccesstoken', + name='white_list', + field=django.contrib.postgres.fields.ArrayField(base_field=models.CharField(blank=True, max_length=128), default=list, size=None, verbose_name='白名单列表'), + ), + ] diff --git a/apps/application/models/api_key_model.py b/apps/application/models/api_key_model.py index 01ec568fa..84f3dfd08 100644 --- a/apps/application/models/api_key_model.py +++ b/apps/application/models/api_key_model.py @@ -8,6 +8,7 @@ """ import uuid +from django.contrib.postgres.fields import ArrayField from django.db import models from application.models import Application @@ -21,6 +22,7 @@ class ApplicationApiKey(AppModelMixin): user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="用户id") application = models.ForeignKey(Application, on_delete=models.CASCADE, verbose_name="应用id") is_active = models.BooleanField(default=True, verbose_name="是否开启") + class Meta: db_table = "application_api_key" @@ -32,6 +34,11 @@ class ApplicationAccessToken(AppModelMixin): application = models.OneToOneField(Application, primary_key=True, on_delete=models.CASCADE, verbose_name="应用id") access_token = models.CharField(max_length=128, verbose_name="用户公开访问 认证token", unique=True) is_active = models.BooleanField(default=True, verbose_name="是否开启公开访问") + access_num = models.IntegerField(default=100, verbose_name="访问次数") + white_active = models.BooleanField(default=False, verbose_name="是否开启白名单") + white_list = ArrayField(verbose_name="白名单列表", + base_field=models.CharField(max_length=128, blank=True) + , default=list) class Meta: db_table = "application_access_token" diff --git a/apps/application/serializers/application_serializers.py b/apps/application/serializers/application_serializers.py index d421f4616..171c2a59e 100644 --- a/apps/application/serializers/application_serializers.py +++ b/apps/application/serializers/application_serializers.py @@ -111,6 +111,12 @@ class ApplicationSerializer(serializers.Serializer): access_token_reset = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("重置Token")) is_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启")) + access_num = serializers.IntegerField(required=False, error_messages=ErrMessage.integer("访问次数")) + white_active = serializers.BooleanField(required=False, error_messages=ErrMessage.boolean("是否开启白名单")) + white_list = serializers.ListSerializer(required=False, child=serializers.CharField(required=True, + error_messages=ErrMessage.char( + "白名单")), + error_messages=ErrMessage.list("白名单列表")) def edit(self, instance: Dict, with_valid=True): if with_valid: @@ -124,6 +130,12 @@ class ApplicationSerializer(serializers.Serializer): application_access_token.is_active = instance.get("is_active") if 'access_token_reset' in instance and instance.get('access_token_reset'): application_access_token.access_token = hashlib.md5(str(uuid.uuid1()).encode()).hexdigest()[8:24] + if 'access_num' in instance and instance.get('access_num') is not None: + application_access_token.access_num = instance.get("access_num") + if 'white_active' in instance and instance.get('white_active') is not None: + application_access_token.white_active = instance.get("white_active") + if 'white_list' in instance and instance.get('white_list') is not None: + application_access_token.white_list = instance.get('white_list') application_access_token.save() return self.one(with_valid=False) @@ -141,7 +153,11 @@ class ApplicationSerializer(serializers.Serializer): application_access_token.save() return {'application_id': application_access_token.application_id, 'access_token': application_access_token.access_token, - "is_active": application_access_token.is_active} + "is_active": application_access_token.is_active, + 'access_num': application_access_token.access_num, + 'white_active': application_access_token.white_active, + 'white_list': application_access_token.white_list + } class Authentication(serializers.Serializer): access_token = serializers.CharField(required=True, error_messages=ErrMessage.char("access_token")) diff --git a/apps/application/swagger_api/application_api.py b/apps/application/swagger_api/application_api.py index 2a7419496..c18544a7c 100644 --- a/apps/application/swagger_api/application_api.py +++ b/apps/application/swagger_api/application_api.py @@ -125,7 +125,12 @@ class ApplicationApi(ApiMixin): description="重置Token"), 'is_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否激活", description="是否激活"), - + 'access_num': openapi.Schema(type=openapi.TYPE_NUMBER, title="访问次数", description="访问次数"), + 'white_active': openapi.Schema(type=openapi.TYPE_BOOLEAN, title="是否开启白名单", + description="是否开启白名单"), + 'white_list': openapi.Schema(type=openapi.TYPE_ARRAY, + items=openapi.Schema(type=openapi.TYPE_STRING), title="白名单列表", + description="白名单列表"), } )