Python - Django перенаправить на следующий после входа в систему (общий вид формы) - PullRequest
0 голосов
/ 26 мая 2018

Я использую общий вид формы для аутентификации, я получаю следующий параметр в URL, но, к сожалению, я не знаю, как перенаправить его на следующий, после успешного входа в общий вид формы, вот мое представление

class LoginView(
    views.AnonymousRequiredMixin,
    generic.FormView):
form_class = LoginForm
success_url = reverse_lazy('home')
template_name = 'accounts/registered/login.html'
def form_valid(self, form):

    username = form.cleaned_data['username']
    password = form.cleaned_data['password']
    user = authenticate(username=username, password=password)
    if user is not None and user.is_active and user.is_seller:
        login(self.request, user)
        return super(LoginView, self).form_valid(form)
    else:
        return self.form_invalid(form)

Я получаю это

http://127.0.0.1:8000/accounts/login/?next=/accounts/dashboard/

помогите мне!

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Вы должны использовать HttpRedirectResponse :

views.py

from django.http import HttpResponseRedirect

def login(request):
    # You logic goes here
    return HttpResponseRedirect('dashboard')

def dashboard(request):
    context = {
        # User information goes here
    }
    return render(request, 'dashboard', context)

Не забудьте добавить этот вызов вметод входа в ваш urls.py :

path('login', views.login, name='login'),
path('dashboard', views.dashboard, name='dashboard'),


Вы также должны взглянуть на https://docs.djangoproject.com/en/2.0/ref/request-response/, чтобы лучше понять, как работают запросы и ответы.

Вы также должны быть знакомы с https://docs.djangoproject.com/en/2.0/intro/tutorial04/, чтобы вы могли понять пример HttpResponseRedirect .

0 голосов
/ 26 мая 2018

По сути, получаемый вами URL-адрес означает, что он пытается перейти к 127.0.0.1:8000/accounts/dashboard/, но, поскольку пользователь должен войти в систему, сначала он переходит на страницу входа.По сути, это означает, что ваше представление по какой-то причине не регистрирует пользователя.

Попробуйте использовать (или расширить) встроенный в Django класс LoginForm (https://docs.djangoproject.com/en/2.0/topics/auth/default/#django.contrib.auth.views.LoginView)

В качестве альтернативы, используйте более широкий)набор решений, такой как Django Allauth (https://github.com/pennersr/django-allauth/blob/master/docs/index.rst)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...