我是Python和Django的新手,我正在查看使用Django内置登录系统(django.contrib.auth.login)的代码。
用户登录后,我想根据用户权限将用户重定向到适当的URL。例如,某些用户名具有管理员权限,而有些用户名只是普通用户。但是,单击“登录”按钮后,用户始终会重定向到同一URL。
为了以不同方式重定向用户,我必须检查用户名,并检查用户拥有的权限。但是,我找不到任何方法从django.contrib.auth.login获取用户名。就好像用户名在经过身份验证后就会消失。
有谁知道如何解决这个问题?
谢谢!
答案 0 :(得分:1)
可以在此处找到用户名:
request.user.username
答案 1 :(得分:0)
如果你能够记录他,你应该有类似的东西(这里是部分代码):
user = authenticate(username=username, password=password)
login(request, user)
if user.is_admin and user.is_staff:
return HttpRedirectResponse('/some/path')
elif user.idontknow:
return HttpRedirectResponse('/some/other/path')
...
else:
return HttpRedirectResponse('/default/redirect/url')
答案 2 :(得分:0)
登录视图支持" next"参数。因此,在表单模板中,您可以像这样添加它:
<form method="POST">
{% csrf_token %}
<input type="hidden" name="next" value="/go/here/if/successful" />
{{ form }}
</form>
要在视图中执行此操作,同时尊重下一个参数并根据用户提供不同的默认值:
from django.contrib.auth.views import LoginView
class MyLoginView(LoginView):
def get_redirect_url(self):
next = super(MyLoginView, self).get_redirect_url()
if not next:
user = self.request.user # see form_valid and auth.login()
if user.is_staff:
return '/staff/goes/here'
return next
答案 3 :(得分:0)
在登录模板中有些像:
<form action="/login/" method="post">
<input type="text" name="username" placeholder="username"/>
<input type="password" name="password" placeholder="password"/>
</form>
在django docs之类的后端说:
from django.contrib.auth import authenticate
user = authenticate(username='john', password='secret')
if user is not None:
# A backend authenticated the credentials
else:
# No backend authenticated the credentials
答案 4 :(得分:0)
您可以在视图中使用以下代码并将url绑定到索引函数
from django.shortcuts import render
def index(request):
if request.user.is_admin and request.user.is_active:
return render(request, 'admin-page.html')
return render(request, 'user-page.html')