Как предотвратить перенаправление пользователя на запрещенную страницу в 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 -> Ссылка