Как предотвратить перенаправление пользователя на запрещенную страницу в django

Я создал страницу входа для моего сайта, но когда я вручную ввожу URL, например http://127.0.0.1:8000/home/, он перенаправляет их на главную страницу, даже если они еще не вошли, как мне предотвратить это?

Views.py

def login_user(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(request, username=username, password=password)
        if user is not None and user.is_admin:
            login(request, user)
            messages.success(request, "You have login to admin page")
            return redirect('home')
        elif user is not None and user.is_customer:  # authenticated if user is a customer service
            login(request, user)
            return redirect('customer')  # redirect the user to the customer service page

        elif user is not None and user.is_logistic:  # # authenticated if user is a logistic
            messages.success(request, "You have login to logistic page")
            login(request, user)
            return redirect('logistic')  # redirect the user to the logistic page

        else:
            messages.success(request, "try Again")
            return redirect('login')
    else:
        return render(request, 'authenticate/login.html')

urls.py

     urlpatterns = [
        path('', views.login_user, name='login'),
        path('home/', views.home, name='home'),
        path('logout/', views.logout_view, name='logout'),
        path('register/', views.register_view, name='register'),
        path('edit-register/', views.edit_register_view, name='edit_register'),
        path('change-password/', views.password_change, name='password_change'),
        path('reset-password/', views.PasswordReset.as_view(), name='password_reset'),
        path('reset-password-done/', views.PasswordResetDone.as_view(), name='password_reset_done'),
        path('reset-password/<uidb64>/<token>/', views.PasswordResetConfirm.as_view(), name='password_reset_confirm'),
        path('reset-password-complete/', views.PasswordResetComplete.as_view(), name='password_reset_complete'),
]

forms.py

class LoginForm(forms.Form):
    username = forms.CharField(
        widget=forms.TextInput(
            attrs={
                "class": "form-control"
            }
        )
    )
    password = forms.CharField(
        widget=forms.PasswordInput(
            attrs={
                "class": "form-control"
            }
        )
    )

Добавьте это в ваш html-файл(ы):

{% if user.is_authenticated %}
  # do something if use is authenticated
{% else %}
  # do something else 
{% endif %}

Используйте декоратор Login required - > Link

Добавьте вот так в вашем представлении

from django.contrib.auth.decorators import login_required

@login_required
def your_view(request):
    ...

Для перенаправления неаутентифицированных пользователей на страницу входа обновите страницу просмотра так

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def your_view(request):
    ...

Совет - Попробуйте использовать представления на основе классов, тогда работа с функциональностью будет проще. Если вы решите использовать представления на основе классов, вы будете использовать LoginRequiredMixin -> Ссылка

Вернуться на верх