gpt4 book ai didi

登录中的 Django 信号

转载 作者:行者123 更新时间:2023-12-04 23:24:29 26 4
gpt4 key购买 nike

登录功能中的django信号有什么用?用户已添加到请求 session 表中。那么 Django auth.login 函数中对信号的最后一行调用是什么?

 @sensitive_post_parameters() 
@csrf_protect
@never_cache
def login(request, user):
"""
Persist a user id and a backend in the request. This way a user doesn't
have to reauthenticate on every request. Note that data set during
the anonymous session is retained when the user logs in.
"""
session_auth_hash = ''
if user is None:
user = request.user
if hasattr(user, 'get_session_auth_hash'):
session_auth_hash = user.get_session_auth_hash()

if SESSION_KEY in request.session:
if _get_user_session_key(request) != user.pk or (
session_auth_hash and
request.session.get(HASH_SESSION_KEY) != session_auth_hash):
# To avoid reusing another user's session, create a new, empty
# session if the existing session corresponds to a different
# authenticated user.
request.session.flush()
else:
request.session.cycle_key()
request.session[SESSION_KEY] = user._meta.pk.value_to_string(user)
request.session[BACKEND_SESSION_KEY] = user.backend
request.session[HASH_SESSION_KEY] = session_auth_hash
if hasattr(request, 'user'):
request.user = user
rotate_token(request)
user_logged_in.send(sender=user.__class__, request=request, user=user)

最佳答案

user_logged_in 末尾发送的 login() 信号已被定义,以便它可以在用户登录时用于通知。它还更新当前登录用户的 last_login 属性(如上面提到的 @ozgur)。

来自 Login and Logout Signals documentation :

The auth framework uses two signals (user_logged_in and user_logged_out) that can be used for notification when a user logs in or out.



与此信号一起发送的参数是:
  • sender : 刚刚登录的用户的类。
  • request :当前的 HttpRequest 实例。
  • user : 刚刚登录的用户实例。

  • 使用此 有助于允许解耦应用程序在用户登录 时得到通知。

    假设您希望在用户登录并执行某些操作时收到通知,然后您可以使用此信号,以便您的接收器在用户登录时收到通知。要接收信号,您需要注册一个接收器函数,该函数在使用 Signal.connect() 方法发送信号时被调用。

    例如:
    perform_some_action_on_login 是一个接收器函数,它会在用户登录时执行一些额外的操作。
    from django.contrib.auth.signals import user_logged_in

    def perform_some_action_on_login(sender, user, **kwargs):
    """
    A signal receiver which performs some actions for
    the user logging in.
    """
    ...
    # your code here

    定义寄存器函数后,将这个接收函数与 user_logged_in信号连接起来
    user_logged_in.connect(perform_some_action_on_login)

    现在,每当用户登录时,都会发送一个 user_logged_in 信号,该信号由接收器函数 perform_some_actions_on_login 接收。然后它执行这些额外的操作。

    关于登录中的 Django 信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31901722/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com