【发布时间】: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