Pay*_*aam 3 django session signals login
用于登录功能的django信号是什么?用户已添加到请求会话表中.那么在Django auth.login函数中对signal的最后一行调用是什么?
@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)
Run Code Online (Sandbox Code Playgroud)
已经定义user_logged_in了在结束时发送的信号,login()以便在用户登录时可以用于通知.它还更新last_login当前登录用户的属性(如上面提到的@ozgur).
auth框架使用两个信号(
user_logged_in和user_logged_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
Run Code Online (Sandbox Code Playgroud)
定义寄存器功能后,将此接收器功能与user_logged_in信号连接
user_logged_in.connect(perform_some_action_on_login)
Run Code Online (Sandbox Code Playgroud)
现在,无论何时用户登录,user_logged_in都会发送由接收器功能接收的信号perform_some_actions_on_login.然后它执行那些额外的操作.
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |