如何用登录到我网站的会员的用户名设置cookie?
谢谢你
你可以通过使用 会话中间件确保在你的项目中启用它。我建议你使用 django.contrib.auth 来管理会话。它在数据库中管理会话,这比仅仅将用户名保存在cookie中要安全得多。
下面是一个如何使用中间件来实现的例子
class UserCookieMiddleWare(object):
"""
Middleware to set user cookie
If user is authenticated and there is no cookie, set the cookie,
If the user is not authenticated and the cookie remains, delete it
"""
def process_response(self, request, response):
#if user and no cookie, set cookie
if request.user.is_authenticated() and not request.COOKIES.get('user'):
response.set_cookie("user", 'Hello Cookie')
elif not request.user.is_authenticated() and request.COOKIES.get('user'):
#else if if no user and cookie remove user cookie, logout
response.delete_cookie("user")
return response
该 django.contrib.auth 是为您的网站添加登录功能的最佳方式。这个应用程序。django.contrib.session 应用和中间件。
会话中间件会在用户的浏览器中为你设置一个cookie后,寻找。然后,在你的代码中,这意味着你需要装饰你的视图来强制用户登录。
from django.contrib.auth.decorators import login_required
@login_required
def my_view(request):
...
在你的视图中,你将可以访问到
request.session
,这是一个 dict
在那里你可以跨会话存储数据request.user
,也就是 用户 对象我建议你阅读文档。文档是Django最好的部分之一。
https:/docs.djangoproject.comen3.0refrequest-response#django.http.HttpResponse.set_cookie。 请参考这个链接了解内置函数的各个参数。
在应用程序中创建signal.py,你的用户模型就在其中,或者添加到主项目目录中,然后在signal.py中添加以下代码段。
from django.db.models.signals import pre_save, pre_delete, post_save, post_delete
from django.dispatch import receiver
from django.dispatch import Signal
from allauth.account.signals import user_logged_in # it signal for post login
from django.shortcuts import render
@receiver(user_logged_in) # Decorator of receiving signal while user going to logged in
def post_login(sender, user, request, response, **kwargs):
response.set_cookie('team', 'india') # This will set cookie
return response
在给定的代码段中,默认的响应将在参数中出现,所以直接重定向到该响应,如果你想改变,则使用renderredirect django.shortcuts方法渲染其他模板,如下面。
response = render(request, 'base.html', {})