【问题标题】:Get all cookies with name that includes a substring获取名称中包含子字符串的所有 cookie
【发布时间】:2021-09-17 13:06:48
【问题描述】:

我正在制作这个简单的随机帖子系统,我遇到的一个问题是推荐用户以前从未见过的帖子。为了区分看过帖子和未看过帖子的用户,我存储了一个 cookie(用于匿名查看者),如下所示:

def render_to_response(self, context, **response_kwargs):
   # Logic
   response.set_cookie(f'viewed{post_id}', 'true', max_age=60*60*24*10)  # 30 Days Till Expiry

这会存储一个 cookie,如果我有一个 id=12 的帖子,它将被存储为:

viewed12, true

为了得到我所做的价值:

request.COOKIES.get(f'viewed{post_id}')

我想知道检索以字符串 viewed 开头的所有 cookie,然后我想获取之后的所有内容(所以我只想从 cookie 中获取帖子的 ID)。这是我的代码:

import random


def random_post(request):
    objects_to_exclude = [1, 2, 8] # Using the cookies with substring "viewed" I want to insert into this list 
    posts = Post.objects.all().exclude(pk__in=objects_to_exclude)
    post = random.choice(posts)
    return render(request, 'blog/post_detail.html', {'object': post, 'post': post, 'id': post.id, 'pk': post.id, 'random': 'True'})

基本上我想找到所有带有子字符串viewed的cookie,得到它后面的数字,然后将它插入到名为objects_to_exclude的列表中。

编辑: (我不需要检查查看过的 cookie 的值是否为 false,因为只有查看过的帖子才会通过他们的 pk id 存储 cookie)

【问题讨论】:

  • 您是否考虑过设置单个 cookie(例如 viewed)并将逗号分隔的帖子 ID 存储为值?
  • @Selcuk,是的,我考虑过这种方式,但我想知道我是否可以这样做,因为我必须更改很多代码才能做到这一点。如果这是唯一的方法,那么是的,我已经考虑过并且能够做到。
  • 编辑:如果将来有人看到这个,我建议不要为每个查看的帖子存储 cookie,因为你很快就会达到限制。在这里阅读更多:docs.devexpress.com/AspNet/11912/common-concepts/…

标签: python django list cookies substring


【解决方案1】:

如果你可以重构,最好的前进方式似乎是设置一个 cookie(例如viewed)并将逗号分隔的帖子 ID 存储为值。如果你不能,这应该工作:

objects_to_exclude = [int(cookie_name[6:]) for cookie_name in request.COOKIES if cookie_name.startswith("viewed")]

【讨论】:

    猜你喜欢
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-04
    相关资源
    最近更新 更多