原文链接在我的个人博客:http://liboer.top/articles/detail/8/
在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, })