簡體   English   中英

如何通過 django 正確重定向到取決於不同用戶組的頁面?

[英]How can I redirect to a page depend on different user group correctly by django?

我正在創建一個功能,讓被禁止的用戶(沒有任何組的用戶)go 在他們單擊“帖子”時訪問特定的頁面banned_alert ,因為他們不允許這樣做。 但是當我測試此功能時,Chrome 顯示This page isn't working | the IP redirected you too many times. This page isn't working | the IP redirected you too many times. 有人可以告訴我如何正確地做到這一點嗎? 我錯過了任何配置嗎? 下面是我的代碼片段。 感謝您的時間!

base.html:( has_group function 已經在其他地方正常工作)

{% load get_group %}
{% if request.user|has_group:"mod" or request.user|has_group:"default" or user.is_staff %}
<a class="nav-link" href="/create-post">Post</a>
{% else %}
<a class="nav-link" href="/banned_alert">Post</a>
{% endif %}

禁止警報.html:

{% extends 'main/base.html' %}
{% block title %}Your account has been banned by Admin{% endblock %}
{% load crispy_forms_tags %}
{% block content %}
<h2>Please contact the Admin!</h2>
{% endblock %}

視圖.py

def banned_alert(request):
    return redirect('/banned_alert')

網址.py

urlpatterns = [
    path('', views.home, name='home'),
    path('home', views.home, name='home'),
    path('sign-up', views.sign_up, name='sign_up'),
    path('create-post', views.create_post, name='create_post'),
    path('banned_alert', views.banned_alert, name='banned_alert'),
]

你有一個遞歸:

這是你的路

path('banned_alert', views.banned_alert, name='banned_alert'),

  1. 用戶訪問這個banned_alert路徑,
  2. 它重定向用戶查看banned_alert
  3. 它將用戶重定向回banned_alert
  4. 它重定向回查看banned_alert
  5. 重復N次(沒有結局)

禁止用戶的最佳方法是在他的 model 中創建一個標志:

models.py

class User(AbstractUser):
    is_banned = models.BooleanField(default=False)

如果要禁止user ,請將user's字段is_banned更改為true ,然后在您的模板或視圖中,檢查用戶是否被禁止,並根據它執行您的邏輯

順便說一句,在你的ulrs.py中,你需要用反斜杠關閉路徑,比如這個path('home/', views.home, name='home'),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM