私信  •  关注

Eugenij

Eugenij 最近创建的主题
Eugenij 最近回复了
3 年前
回复了 Eugenij 创建的主题 » 设置每月使用限制-Django API

如果您的限制很低,您可以将每个请求记录在单独的模型中,并手动检查限制。

class RareEndpointRequest(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    endpoint = models.TextField("Endpoint's URL")
    created_at = models.DateTimeField(auto_now_add=True)


def some_endpoint(request, *args, **kwargs):
    user = request.user

    request_count = RareEndpointRequest.objects.filter(
        user=user,
        endpoint='some_endpoint',
        created_at__year=timezone.now().year,
        created_at__month=timezone.now().month,
    ).count()

    if request_count > request_limit_by_group(user.group):
        return HttpResponse("Rate limit", status=429)

    # do your actions

    RareEndpointRequest.objects.create(user=user, endpoint='some_endpoint')

    return HttpResponse("Some data")

3 年前
回复了 Eugenij 创建的主题 » 在Python中隔离给定结构的所有子字符串

你可以不用这样的正则表达式来解决你的任务

data = "rolling 7d10(1+4+5+3+8+8+3)=32rolling 7d10(6+8+3+9+7+10+8)=51rolling 7d10(7+7+6+6+8+3+5)=42rolling 4d10(3+3+3+4)=13rolling 7d10(5+5+10+7+4+9+10)=50rolling 1d10 + 8(10)+8=18"

parts = data.split("rolling")[1:]
print(parts)
# [' 7d10(1+4+5+3+8+8+3)=32', ' 7d10(6+8+3+9+7+10+8)=51', ' 7d10(7+7+6+6+8+3+5)=42', ' 4d10(3+3+3+4)=13', ' 7d10(5+5+10+7+4+9+10)=50', ' 1d10 + 8(10)+8=18']

如果你需要的话,你可以系上绳子 rolling 回到零件

parts = ["rolling" + p for p in parts]
print(parts)
# ['rolling 7d10(1+4+5+3+8+8+3)=32', 'rolling 7d10(6+8+3+9+7+10+8)=51', 'rolling 7d10(7+7+6+6+8+3+5)=42', 'rolling 4d10(3+3+3+4)=13', 'rolling 7d10(5+5+10+7+4+9+10)=50', 'rolling 1d10 + 8(10)+8=18']