获取名称包含子字符串的所有cookie



我正在制作这个简单的随机帖子系统,我遇到的一个问题是推荐用户以前从未见过的帖子。为了区分看过帖子和没看过帖子的用户,我存储了一个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的值是否为假,因为只有查看的帖子才会通过其pk-id存储cookie(

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

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