django 1.6其中是用户字段';上次登录';更新?

django 1.6其中是用户字段';上次登录';更新?,django,Django,django usermodel django.contrib.auth.models.User有一个字段“last_login”记录用户成功登录的时间 但是我在django.contrib.auth import login的函数或django.contrib.auth import authenticate的中没有看到类似“last_login=datetime.now()”的代码。我还检查了django.contrib.auth.signals.user\u登录的 “上次登录”字段的更新代

django usermodel django.contrib.auth.models.User有一个字段“last_login”记录用户成功登录的时间

但是我在django.contrib.auth import login的函数
或django.contrib.auth import authenticate的
中没有看到类似“last_login=datetime.now()”的代码。我还检查了
django.contrib.auth.signals.user\u登录的

“上次登录”字段的更新代码在哪里

下面是所有相关的源代码,登录过程如何调用更新\u last\u login?我在登录视图或验证函数suoure code中没有看到任何代码

def update_last_login(sender, user, **kwargs):
    """
    A signal receiver which updates the last_login date for
    the user logging in.
    """
    user.last_login = timezone.now()
    user.save(update_fields=['last_login'])
user_logged_in.connect(update_last_login)

from django.dispatch import Signal
user_logged_in = Signal(providing_args=['request', 'user'])

@sensitive_post_parameters()
@csrf_protect
@never_cache
def login(request, template_name='registration/login.html',
          redirect_field_name=REDIRECT_FIELD_NAME,
          authentication_form=AuthenticationForm,
          current_app=None, extra_context=None):
    """
    Displays the login form and handles the login action.
    """
    redirect_to = request.REQUEST.get(redirect_field_name, '')

    if request.method == "POST":
        form = authentication_form(request, data=request.POST)
        if form.is_valid():

            # Ensure the user-originating redirection url is safe.
            if not is_safe_url(url=redirect_to, host=request.get_host()):
                redirect_to = resolve_url(settings.LOGIN_REDIRECT_URL)

            # Okay, security check complete. Log the user in.
            auth_login(request, form.get_user())

            return HttpResponseRedirect(redirect_to)
    else:
        form = authentication_form(request)

    current_site = get_current_site(request)

    context = {
        'form': form,
        redirect_field_name: redirect_to,
        'site': current_site,
        'site_name': current_site.name,
    }
    if extra_context is not None:
        context.update(extra_context)
    return TemplateResponse(request, template_name, context,
                            current_app=current_app)


class ModelBackend(object):
    """
    Authenticates against settings.AUTH_USER_MODEL.
    """

    def authenticate(self, username=None, password=None, **kwargs):
        UserModel = get_user_model()
        if username is None:
            username = kwargs.get(UserModel.USERNAME_FIELD)
        try:
            user = UserModel._default_manager.get_by_natural_key(username)
            if user.check_password(password):
                return user
        except UserModel.DoesNotExist:
            # Run the default password hasher once to reduce the timing
            # difference between an existing and a non-existing user (#20760).
            UserModel().set_password(password)

user\u logged\u in
信号连接到
django.contrib.auth.models.update\u last\u login
功能,它使:

user.last_login = timezone.now()
user.save(update_fields=['last_login'])

我认为做这件事最好的方法是

    request_user, data = requests.get_parameters(request)
    user = requests.get_user_by_username(data['username'])
    update_last_login(None, user) 
您还可以通过执行以下操作获取请求对象的用户

    user = request.user
关于djnago 1.11 添加此类:

class IsAuthenticated(BasePermission):
"""
Allows access only to authenticated users.
"""

def has_permission(self, request, view):
    if request.user and request.user.is_authenticated:
        user = request.user
        user.last_login = timezone.now()
        user.save(update_fields=['last_login'])
    return request.user and request.user.is_authenticated
在设置文件更改时:

'DEFAULT_PERMISSION_CLASSES': (
     # custom class 
    'IsAuthenticated',
),

但是这与登录有什么关系,比如登录视图函数,或者身份验证函数?它在
django.contrib.auth.\uuuu init\uuuuuuuuuu
中的
login
方法中调用:
user\u logged in.send(sender=user.\uuuuuu class\uuuu,request=request,user=user)
是一个函数,因此,您将始终返回trueIsAuthenticated是一个基于Django默认BasePermission类的类,通过此方法Django watch on
具有_permission
函数并向其传递和接收数据,因此,答案不总是正确的,根据
if request.user和request.user.is_认证
规则回答,如果回答为真,则修改函数
request.user
对象