如果使用`rest-auth`,用户登录时如何添加last_login_ip?

时间:2018-01-15 05:00:17

标签: python django django-rest-auth

如果使用rest-auth用户登录,如何添加last_login_ip?

Befor问我在帖子中搜索了一个帖子:

How can I do my logic in `http://127.0.0.1:8000/rest-auth/login/` of `django-rest-auth`?

答案非常适合自定义验证登录参数。

但是,登录后怎么样,然后向用户添加属性?

我的意思是,答案只是为了验证数据,我想在用户登录成功之后,我想将last_login_ip添加到用户实例。

修改

请注意,我知道如何获取访问我网站的远程IP。我的意思是我使用rest-auth登录,并自定义LoginSerializer,如链接。该链接用于验证登录数据,我无法更改last_login_ip中的LoginSerializer数据,我想在用户登录成功时,然后更改用户的last_login_ip。但在哪里写我的更改last_login_ip代码?

修改-2

我按照@ at14的建议,在init.py中(与apps.py处于同一级别):

default_app_config = '管理员后台.用户管理.qiyun_admin_usermanage.apps.QiyunAdminUsermanageConfig'

apps.py

from django.apps import AppConfig

class QiyunAdminUsermanageConfig(AppConfig):
    name = 'qiyun_admin_usermanage'

    def ready(self):
        import 管理员后台.用户管理.qiyun_admin_usermanage.api.signals

会出现以下错误:

django.core.exceptions.ImproperlyConfigured: Cannot import 'qiyun_admin_usermanage'. Check that '管理员后台.用户管理.qiyun_admin_usermanage.apps.QiyunAdminUsermanageConfig.name' is correct.

我还尝试对default_app_config = '管理员后台.用户管理.qiyun_admin_usermanage.apps.QiyunAdminUsermanageConfig'中的init.py发表评论,但仍无效。

1 个答案:

答案 0 :(得分:1)

使用django的用户登录信号将此信息保存到数据库中。

在signals.py中,

from django.contrib.auth.signals import user_logged_in
from django.dispatch import receiver

@receiver(user_logged_in)
def user_logged_in_callback(sender, user, request, **kwargs):
   // Get the IP Address and save it

详细了解信号here。 请注意如何在app ready方法中导入信号

在你的app目录中创建一个apps.py(它可能已经存在),

from django.apps import AppConfig


class YourAppConfig(AppConfig):
    name = '管理员后台.用户管理.qiyun_admin_usermanage'

    def ready(self):
        import 管理员后台.用户管理.qiyun_admin_usermanage.api.signals  # noqa

在您的应用 init .py文件

default_app_config = '管理员后台.用户管理.qiyun_admin_usermanage.apps.QiyunAdminUsermanageConfig'