Django следующий параметр url
Я использую пользовательский Login View и пользовательскую страницу входа. Я не могу найти следующий параметр, который я хочу использовать, поэтому если в url есть следующий параметр, то пользователь перенаправляется на предыдущую страницу.
Как вы можете видеть в приведенном ниже коде, я использую django-crispy-forms и django-axes.
Проблема заключается в том, что я могу успешно перенаправлять пользователей на домашнюю страницу, но я не могу получить доступ к любым данным, которые видны для зарегистрированных пользователей (все представления ограничены для зарегистрированных пользователей), таким как электронная почта пользователя и контент. Более того, когда я пытаюсь нажать на любую гиперссылку, Django автоматически перенаправляет на страницу входа.
Когда я пытаюсь получить доступ к странице вручную, например, http://127.0.0.1:8000/articles, она перенаправляет меня на http://127.0.0.1:8000/accounts/login/?next=/articles/, что дает мне
Page not found (404) Request Method: GET Request URL: http://127.0.0.1:8000/accounts/login/?next=/articles/
views.py
class UpdatedLoginView(LoginView):
form_class = LoginForm
template_name = 'user/login.html'
redirect_field_name='main/homepage.html'
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
if 'next' in request.POST:
return redirect(request.POST.get('next'))
else:
return(redirect('homepage'))
else:
return render(request, self.redirect_field_name, {'form': form})
class ArticleListView(LoginRequiredMixin, ListView):
template_name = 'articles/ArticleListView.html'
model = Article
paginate_by = 6
queryset = Article.objects.filter(status=1)
def get_context_data(self, **kwargs):
context = super(ArticleListView, self).get_context_data(**kwargs)
return context
login.html
<form method="post" class="login-form background" novalidate>
{% csrf_token %}
{{ form|crispy }}
{% if request.GET.next %}
<input type="hidden" name="next" value="{{ request.GET.next }}"/>
{% endif %}
<button type="submit" class="text-center mx-auto login-btn">Login</button>
</form>
urls.py
urlpatterns = [
path('', views.UpdatedLoginView.as_view(), name='login'),
path('logout/', views.logout_view, name='logout'),
path('home/', views.HomePageView.as_view(), name='homepage'),
path('articles/', views.ArticleListView.as_view(), name='article_list'),
]
settings.py
#AUTHORIZATION
AXES_FAILURE_LIMIT = 4
AXES_ONLY_USER_FAILURES = True
AXES_ENABLE_ADMIN = True
LOGIN_REDIRECT_URL = 'homepage'
LOGOUT_REDIRECT_URL = 'login'
Не могли бы вы проверить код и сообщить мне, что я делаю не так? Возможно, это связано с настройками, но я не уверен, в чем здесь дело. Нужно ли мне передавать следующий параметр всем представлениям? Если да, то как это лучше всего сделать?
в вашем приложении LOGIN_URL установлен в значение по умолчанию, т.е. "/accounts/login/"
но "/accounts/login/" не связан с представлением, поэтому веб-сервер возвращает 404 (не найдено).
Одним из способов решения проблемы является включение стандартного представления входа в систему путем добавления следующей строки в urlpatterns:
path("accounts/", include("django.contrib.auth.urls")),