不忘初心,
牢记使命。

Django没有继承auth_user自定义last_login字段

2021-04-01 大聪明 0评论 192 1喜欢

在userinfo表中新增字段

last_login = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='最后登录时间')

models.py

class UserInfo(models.Model):
    """用户信息表"""
    username = models.CharField(max_length=16, verbose_name='姓名')
    password = models.CharField(max_length=32, verbose_name='密码')
    email = models.EmailField()
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False, null=True, blank=True)
    avatar = models.FileField(upload_to='avatars/', default=None)
    last_login = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name='最后登录时间')

    class Meta:
        verbose_name_plural = '用户信息表'

    def __str__(self):  # __unicode__

        return self.username

在view.py中的登录逻辑中添加时间

只需在认证成功后,把last_login字段的值更新为当前时间即可

# 更新最后登录时间
user_obj_set.update(last_login=datetime.datetime.now())

LoginView

class LoginView(View):

    def post(self, request):
        # 初始化返回值
        res = {"code": 500}

        user = request.POST.get('username')
        pwd = request.POST.get('password')
        # 判断用户名和密码
        user_obj_set = models.UserInfo.objects.filter(username=user, password=set_md5(pwd))
        user_obj = user_obj_set.first()
        if user_obj:
            res['code'] = 200
            # 更新最后登录时间
            user_obj_set.update(last_login=datetime.datetime.now())
            # 把当前用户id添加到session中
            request.session['user_id'] = user_obj.id

        return JsonResponse(res)

留言界面显示最近登录的人

只需按last_login字段的值逆序排列即可,这里只显示了前20个用户

least_users = models.UserInfo.objects.all().order_by('-last_login')[:20]
class MessagesView(View):

    def get(self, request):

        user_id = request.session.get('user_id')
        # 文章分类
        categories = models.Category.objects.all()
        # 文章专栏
        columns = models.Column.objects.all().order_by('-weights')

        if user_id:
            cur_user_name = models.UserInfo.objects.get(id=user_id)
        else:
            cur_user_name = None

        least_users = models.UserInfo.objects.all().order_by('-last_login')[:20]

        # 所有评论
        comment_obj = models.Comment.objects.all().order_by('-add_time')[:10]
        comment_list = self.build_msg(comment_obj)
        ret = self.get_comment_list(comment_list)

        return render(request, 'messages.html',
                      {'cur_user_name': cur_user_name, "categories": categories, 'columns': columns,
                       'least_users': least_users, 'ret': ret, })

发表评论 取消回复

电子邮件地址不会被公开。

请输入正确格式的qq邮箱
请输入以http或https开头的URL,格式如:https://libo_sober.top