0013_rate_limit_ratelimitlog.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # Generated by Django 5.2.13 on 2026-05-18
  2. import django.db.models.deletion
  3. import uuid_utils.compat
  4. from django.db import migrations, models
  5. class Migration(migrations.Migration):
  6. dependencies = [
  7. ('application', '0012_remove_applicationapikey_user'),
  8. ]
  9. operations = [
  10. migrations.CreateModel(
  11. name='RateLimit',
  12. fields=[
  13. ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')),
  14. ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')),
  15. ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
  16. ('is_enabled', models.BooleanField(default=False, verbose_name='是否启用限流')),
  17. ('rate_type', models.CharField(choices=[('QPS', '每秒请求数'), ('QPM', '每分钟请求数'), ('QPH', '每小时请求数'), ('QPD', '每日请求数')], default='QPM', max_length=10, verbose_name='限流类型')),
  18. ('max_requests', models.IntegerField(default=60, verbose_name='最大请求数')),
  19. ('burst_size', models.IntegerField(default=10, verbose_name='突发容量')),
  20. ('window_seconds', models.IntegerField(default=60, verbose_name='时间窗口(秒)')),
  21. ('application', models.OneToOneField(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, to='application.application', verbose_name='应用')),
  22. ],
  23. options={
  24. 'db_table': 'application_rate_limit',
  25. },
  26. ),
  27. migrations.CreateModel(
  28. name='RateLimitLog',
  29. fields=[
  30. ('create_time', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='创建时间')),
  31. ('update_time', models.DateTimeField(auto_now=True, db_index=True, verbose_name='修改时间')),
  32. ('id', models.UUIDField(default=uuid_utils.compat.uuid7, editable=False, primary_key=True, serialize=False, verbose_name='主键id')),
  33. ('client_ip', models.CharField(default='', max_length=45, verbose_name='客户端IP')),
  34. ('request_path', models.CharField(default='', max_length=512, verbose_name='请求路径')),
  35. ('is_limited', models.BooleanField(default=False, verbose_name='是否被限流')),
  36. ('request_time', models.DateTimeField(auto_now_add=True, verbose_name='请求时间')),
  37. ('application', models.ForeignKey(db_constraint=False, on_delete=django.db.models.deletion.CASCADE, to='application.application', verbose_name='应用')),
  38. ],
  39. options={
  40. 'db_table': 'application_rate_limit_log',
  41. 'ordering': ['-request_time'],
  42. },
  43. ),
  44. ]