TLDR: <input type="hidden" name="next" value="{{ next }}">
- это строка кода, которую я не понимаю. При этом эта система перенаправления работает нормально, однако я не понимаю, что она делает. Это как если бы он связывал пользователя со следующей страницей, но на самом деле ни одна ссылка не была нажата?
Я понимаю, что если пользователь не вошел в систему, параметр next
используется для перенаправления пользователя к чему-либо @login_required
оформленный вид, к которому они пытались получить доступ после входа в систему. Хотя способ, которым это происходит, кажется немного автоматическим.
У меня есть следующие настройки входа в систему:
LOGIN_REDIRECT_URL = 'dashboard' # tells django which url to redirect after login if no 'next' parameter is present in the request
LOGIN_URL = 'login' # url to redirect the user to log in (for example, views using the login_required decorator)
и я использую источник аутентификационных просмотров в django.contrib.auth
(только три включены для простоты):
from django.urls import path
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
path('', views.dashboard, name = 'dashboard'),
path('login/', auth_views.LoginView.as_view(), name = 'login'),
path('password_change/', auth_views.PasswordChangeView.as_view(), name = 'password_change'),
]
Вот пользовательский логин. html tempate, расположенный в учетной записи / регистрации / индексе. html:
<div class="login-form">
<form action="{% url 'login' %}" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}">
<input type="submit" name="" value="Log-in">
</form>
</div>
Теперь скажите, что я не авторизован и попробуйте получить доступ к /account/password_change
, я буду перенаправляется в представление login
и путь будет http://127.0.0.1:8000/account/login/?next=/account/password_change/
, после входа я могу сменить пароль без проблем. Однако, если я удаляю <input type="hidden" name="next" value="{{ next }}">
из индекса. html:
<div class="login-form">
<form action="{% url 'login' %}" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="submit" name="" value="Log-in">
</form>
</div>
и снова пытаюсь получить доступ к /account/change_password
(как не зарегистрированный пользователь), я буду перенаправлен на страницу входа и URL будет таким же, как и раньше http://127.0.0.1:8000/account/login/?next=/account/password_change/
. Однако, когда я вхожу в этот раз, я перенаправляюсь в представление dashboard
(для меня это имеет смысл, я определил это с помощью LOGIN_REDIRECT_URL = 'dashboard'
и не предоставил параметр next
.
Со всем, что сказано , что я не понимаю, почему после удаления <input type="hidden" name="next" value="{{ next }}">
путь в login
подоконнике http://127.0.0.1:8000/account/login/?next=/account/password_change/
(хотя я буду перенаправлен на dashboard
, а не password_change
)? И почему после добавления <input type="hidden" name="next" value="{{ next }}">
вернуться к html знает ли браузер, как перенаправить пользователя на нужную страницу?
Если кто-то найдет время, чтобы прочитать и ответить на это, заранее спасибо!