我正在Django中创建一个应用程序。我有一个名为Business_profile
的模型,其中User
为外键。现在我想要的是每次用户登录应用程序时,我想在基本模板中显示以下超链接:
1)如果Business_profile中的条目存在:
显示链接:
2)如果Business_profile中的条目不存在:
现在我知道查询将是Business_profile.objects.filter(user=user_obj).exists()
但是我想在用户登录时检查这个,怎么做?有没有办法覆盖登录视图?请帮忙。感谢。
答案 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对象传递给您在渲染模板中处理的视图。但是,如果我正确理解您不需要在登录视图中管理它,则应该在用户已经过身份验证的所有视图中进行安排。