我有2个函数目前正在工作,一个是is_staff的特定视图用户,另一个为任何用户。现在员工登录后,他们可以添加路径/dashboard指定URL,可以访问路由,而普通用户无法查看路由。
问题:我想在登录时重定向user.is_staff直接到这个路径/dashboard,而不是先索引。
我认为我必须合并的函数:(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'),
]
当用户为is_staff时,显示"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 %}
###################<更新>####################更新>
到目前为止,这个工作,但我仍然需要重构:
10 @login_required
11 def index(request):
12 if request.user.is_staff:
##13 @staff_member_required
##14 def staff_dashboard(request):
15 users = User.objects.all()
16 customer = Customer.objects.all()
17 accounts = Account.objects.all()
18 context = {
19 'users': users,
20 'customer': customer,
21 'accounts': accounts
22 }
23 return render(request, 'bank_app/dashboard.html', context)
##24 return HttpResponseRedirect('staff_dashboard')
25 else:
##26 def user_dashboard():
27 customer = Customer.objects.filter(user=request.user)
28 accounts = Account.objects.filter(user=request.user)
29 context = {
30 'customer': customer,
31 'accounts': accounts
32 }
33 return render(request, 'bank_app/index.html', context)
34
我被指示在语句中使用装饰器-教师需求:/-(因为只有员工可以查看部分内容)并使用HttpResponse显示正确的html。知道如何重构它吗?
我试图添加在注释掉的行(##)上看到的逻辑
(urls . py):
5 urlpatterns = [
6 path('', views.index, name='index'),
##7 path('staff_dashboard', views.index, name='staff_dashboard'),
##8 path('user_dashboard/', views.index, name='user_dashboard'),
############## 解决方案 ###################
根据评论中的建议,我已经修复了url .py并将请求拆分到views.py中:
1 @login_required
2 def index(request):
3 if request.user.is_staff:
4 return HttpResponseRedirect('staff_dashboard/')
5 else:
6 return HttpResponseRedirect('user_dashboard/')
7
8
9 @staff_member_required
10 def staff_dashboard(request):
11 users = User.objects.all()
12 customer = Customer.objects.all()
13 accounts = Account.objects.all()
14 context = {
15 'users': users,
16 'customer': customer,
17 'accounts': accounts
18 }
19 return render(request, 'bank_app/dashboard.html', context)
20
21
22 @login_required
23 def user_dashboard(request):
24 customer = Customer.objects.filter(user=request.user)
25 accounts = Account.objects.filter(user=request.user)
26 context = {
27 'customer': customer,
28 'accounts': accounts
29 }
30 return render(request, 'bank_app/index.html', context)
(urls . py):
1 urlpatterns = [
2 path('', views.index, name='index'),
3 path('staff_dashboard/', views.staff_dashboard, name='staff_dashboard'),
4 path('user_dashboard/', views.user_dashboard, name='user_dashboard'),
试试这样做。
@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.
让我知道它是否有效。