获取名称包含子字符串的所有 cookie
Get all cookies with name that includes a substring
我正在制作这个简单的随机 post 系统,我一直遇到的一个问题是向用户推荐以前从未见过的 posts。为了区分看过 post 和没看过 post 的用户,我像这样存储一个 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 的 post,它将存储为:
viewed12, true
获取值我做的:
request.COOKIES.get(f'viewed{post_id}')
我想知道检索所有以字符串 viewed
开头的 cookie,然后我想获取之后的所有内容(所以我只想从 cookie 中获取 post 的 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,因为只有已查看的 posts 将通过其 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")]
我正在制作这个简单的随机 post 系统,我一直遇到的一个问题是向用户推荐以前从未见过的 posts。为了区分看过 post 和没看过 post 的用户,我像这样存储一个 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 的 post,它将存储为:
viewed12, true
获取值我做的:
request.COOKIES.get(f'viewed{post_id}')
我想知道检索所有以字符串 viewed
开头的 cookie,然后我想获取之后的所有内容(所以我只想从 cookie 中获取 post 的 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,因为只有已查看的 posts 将通过其 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")]