66 lines
2.9 KiB
Python
66 lines
2.9 KiB
Python
from django.conf import settings
|
|
from django.db import models
|
|
|
|
|
|
class ApiCategory(models.Model):
|
|
name = models.CharField(max_length=50, unique=True, verbose_name='分类名称')
|
|
icon = models.CharField(max_length=100, default='AppstoreOutlined', verbose_name='图标名称')
|
|
sort_order = models.IntegerField(default=0, verbose_name='排序')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
|
|
class Meta:
|
|
ordering = ['sort_order', '-created_at']
|
|
verbose_name = 'API分类'
|
|
verbose_name_plural = 'API分类'
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class ApiItem(models.Model):
|
|
HTTP_METHOD_CHOICES = [
|
|
('GET', 'GET'),
|
|
('POST', 'POST'),
|
|
('PUT', 'PUT'),
|
|
('DELETE', 'DELETE'),
|
|
]
|
|
|
|
name = models.CharField(max_length=100, verbose_name='API名称')
|
|
description = models.TextField(default='', blank=True, verbose_name='API描述')
|
|
icon = models.CharField(max_length=100, default='ApiOutlined', verbose_name='图标名称')
|
|
url_path = models.CharField(max_length=200, verbose_name='API路径')
|
|
method = models.CharField(max_length=10, choices=HTTP_METHOD_CHOICES, default='GET', verbose_name='请求方法')
|
|
category = models.ForeignKey(ApiCategory, on_delete=models.SET_NULL, null=True, blank=True, related_name='items', verbose_name='所属分类')
|
|
is_enabled = models.BooleanField(default=True, verbose_name='是否启用')
|
|
is_new = models.BooleanField(default=False, verbose_name='是否为新API')
|
|
is_coming_soon = models.BooleanField(default=False, verbose_name='是否即将到来')
|
|
views_count = models.IntegerField(default=0, verbose_name='浏览次数')
|
|
color = models.CharField(max_length=20, default='#667eea', blank=True, verbose_name='主题颜色')
|
|
image_url = models.URLField(max_length=500, blank=True, default='', verbose_name='图片URL')
|
|
sort_order = models.IntegerField(default=0, verbose_name='排序')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
updated_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
|
|
|
class Meta:
|
|
ordering = ['sort_order', '-created_at']
|
|
verbose_name = 'API接口'
|
|
verbose_name_plural = 'API接口'
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class ApiFavorite(models.Model):
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='api_favorites', verbose_name='用户')
|
|
api_item = models.ForeignKey(ApiItem, on_delete=models.CASCADE, related_name='favorites', verbose_name='API接口')
|
|
created_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
|
|
|
class Meta:
|
|
verbose_name = 'API收藏'
|
|
verbose_name_plural = 'API收藏'
|
|
unique_together = ['user', 'api_item']
|
|
ordering = ['-created_at']
|
|
|
|
def __str__(self):
|
|
return f'{self.user} favorites {self.api_item}'
|