您好想问:在Django的身份验证层之外手动生成Django的session_key(sessionid
cookie)是一种好习惯吗?
我正在实现post hit/page views
和post comment
机制,我想在sessionid
和session
模型中将PostHit
用于PostComment
字段。原因是,我不想为此目的创建用于生成定制会话密钥的完整逻辑,因为我认为Django的session_key
非常简单明了,足以应付Web访问者会话的记录。
但是我突然想到sessionid
仅适用于已登录的用户,不应为未经身份验证的访问者生成。如果仍然不好,您是否有更好的方法为已登录和匿名访问者生成会话密钥?
非常感谢!
session_key的示例实现:
class APIDetail__Post(generics.RetrieveUpdateDestroyAPIView):
queryset = Post.objects.all().order_by('-publish_date')
serializer_class = PostSerializer
lookup_field = 'slug'
permission_classes = [permissions.IsAuthenticatedOrReadOnly]
def get_queryset(self):
post_slug = self.request.resolver_match.kwargs['slug']
post = Post.objects.get(slug=post_slug)
if post:
if post.published and post.approved:
if not self.request.session.session_key:
self.request.session.create()
if not PostHit.objects.filter(post=post, session=self.request.session.session_key):
view = PostHit(
post=post,
ip=self.request.META['REMOTE_ADDR'],
created=datetime.now(),
session=self.request.session.session_key)
view.save()
else:
if not PostHit.objects.filter(post=post, session=self.request.session.session_key):
view = PostHit(
post=post,
ip=self.request.META['REMOTE_ADDR'],
created=datetime.now(),
session=self.request.session.session_key)
view.save()
return self.queryset
会话ID是可以使用的,与身份验证无关。请勿将其与Auth Token混淆。