python - 登录后Django重定向到下一个(通用窗体视图)

时间:2018-05-26 02:32:50

标签: django python-3.x django-models django-forms django-views

我使用通用表单视图进行身份验证,我在url中获取下一个参数但不幸的是我不知道如何将其重定向到下一个,在成功登录Generic Form View之后,这是我的观点

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 :(得分:1)

基本上,你所获得的网址意味着它试图转到127.0.0.1:8000/accounts/dashboard/,但由于用户需要登录,因此需要登录。首先进入登录页面。从本质上讲,这意味着您的视图由于某种原因没有记录用户。

尝试使用(或扩展)在LoginForm类中构建的Django(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

答案 1 :(得分:0)

您应该使用 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 的示例。