Django,如何在用户登录时调用查询?

时间:2013-07-01 21:16:16

标签: django loginview django-login

我正在Django中创建一个应用程序。我有一个名为Business_profile的模型,其中User为外键。现在我想要的是每次用户登录应用程序时,我想在基本模板中显示以下超链接:

1)如果Business_profile中的条目存在:

显示链接:

  • HOME
  • 商业页面

2)如果Business_profile中的条目不存在:

  • HOME
  • 添加业务

现在我知道查询将是Business_profile.objects.filter(user=user_obj).exists()

但是我想在用户登录时检查这个,怎么做?有没有办法覆盖登录视图?请帮忙。感谢。

3 个答案:

答案 0 :(得分:1)

当用户登录时,Django会提供信号user_logged_in。您可以注册以收听该信号并在收到信号时执行操作。

from django.contrib.auth.signals import user_logged_in

def do_my_stuff(sender, user, request, **kwargs):
    whatever actions you want to to go here

user_logged_in.connect(do_my_stuff)

答案 1 :(得分:0)

这在django中非常容易,其授权功能请查看以下链接:

http://www.djangobook.com/en/2.0/chapter14.html

    if 'password' in request.POST and 'username' in request.POST:
         user = auth.authenticate(username=request.POST['username'], password=request.POST['password'])
    if user is not None and user.is_active:
        auth.login(request,user)
        #do your queries here
        return render(request,'htmlpage.html',{'data':data}

答案 2 :(得分:0)

不确定你要做的事情,但这是你的问题让我猜到的。

如果您通过直接链接或通过视图上的@login_required装饰器将用户指向登录页面,则可以将她重定向到LOGIN_REDIRECT_URL下的设置文件中设置的网址,或者POST请求中next参数中的一个(优先)。

也就是说,在POST提交之后发生的是对这些URL之一下的页面的GET请求。如果您的Business_profile模型依赖于正在进行身份验证的用户,那么我只需检查用户身份验证,以便在未对用户进行身份验证时显示链接HOME和ADD BUSINESS。

当她登录时,您应该注意将Business_profile对象传递给您在渲染模板中处理的视图。但是,如果我正确理解您不需要在登录视图中管理它,则应该在用户已经过身份验证的所有视图中进行安排。