Django аутентификация: индекс для сотрудников и индекс для пользователей (2 шаблона)
В настоящее время у меня работают 2 функции, одна из которых является специфическим видом для пользователей is_staff, а другая для любых пользователей. Сейчас после входа сотрудников в систему они могут добавить путь /dashboard к URL и могут получить доступ к маршруту, в то время как обычные пользователи не могут его просмотреть. Это ожидаемо и хорошо
Проблема: Я хочу при входе в систему перенаправлять user.is_staff прямо на этот путь /dashboard, вместо того, чтобы сначала идти в index.
Функции, которые, как мне кажется, нужно объединить: (views.py)
1 @staff_member_required
2 def staff_dashboard(request):
3 users = User.objects.all()
4 customer = Customer.objects.all()
5 accounts = Account.objects.all()
6 context = {
7 'users': users,
8 'customer': customer,
9 'accounts': accounts
10 }
11 return render(request, 'bank_app/dashboard.html', context)
12
13
14 @login_required
15 def index(request):
16 customer = Customer.objects.filter(user=request.user)
17 accounts = Account.objects.filter(user=request.user)
18 context = {
19 'customer': customer,
20 'accounts': accounts
21 }
22 return render(request, 'bank_app/index.html', context)
(urls.py:)
urlpatterns = [
path('dashboard', views.staff_dashboard, name='staff_dashboard'),
path('', views.index, name='index'),
path('create', views.create, name='create'),
path('createaccount', views.createaccount, name='createaccount'),
path('details/<int:pk>', views.details, name='details'),
]
Когда пользователь является_штатным, показывать "dashboard/
" (dashboard.html), а не ""
(index.html)
* У меня также есть шаблон расширения, показанный ниже, но это не помогло решить проблему:
28 <p>Welcome {{ user }}</p>
29
30 {% if user.is_staff %}
31 {% block staffcontent %}
32 {% endblock %}
33 {% else %}
34 {% block content %}
35 {% endblock %}
36 {% endif %}
37
38 {% block footer %}
39 {% endblock %}
попробуйте что-нибудь вроде этого.
@login_required
def index(request):
if request.user.is_superuser:
return redirect('staff_dashboard')
else:
customer = Customer.objects.filter(user=request.user)
accounts = Account.objects.filter(user=request.user)
context = {
'customer': customer,
'accounts': accounts
}
return render(request, 'bank_app/index.html', context)
Чтобы проверить, является ли пользователь is_staff, вы можете сделать что-то вроде этого user.is_staff или user.is_superuser.
Дайте мне знать, если это работает.