python-Django在登录后重定向到下一个(通用表单视图)
我正在使用通用表单视图进行身份验证,我正在获取url中的下一个参数,但不幸的是,我不知道如何将其重定向到下一个参数,在成功登录通用表单视图后,这是我的视图python-Django在登录后重定向到下一个(通用表单视图),django,python-3.x,django-models,django-forms,django-views,Django,Python 3.x,Django Models,Django Forms,Django Views,我正在使用通用表单视图进行身份验证,我正在获取url中的下一个参数,但不幸的是,我不知道如何将其重定向到下一个参数,在成功登录通用表单视图后,这是我的视图 class LoginView( views.AnonymousRequiredMixin, generic.FormView): form_class = LoginForm success_url = reverse_lazy('home') template_name = 'accounts/registered/log
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/
帮帮我 因此,从本质上讲,您获得的url意味着它试图转到127.0.0.1:8000/accounts/dashboard/,但由于用户需要登录,因此它首先要转到登录页面。本质上,这意味着您的视图由于某种原因没有让用户登录 尝试使用(或扩展)Django的内置LoginForm类() 或者,使用更广泛的解决方案套件,例如django allauth()您应该使用HttpRedirectResponse: views.py 不要忘记将此调用添加到URL.py中的登录方法:
为了更好地理解请求和响应是如何工作的,您还应该查看一下
您还应该熟悉HttpResponseRedirect,这样您就可以理解HttpResponseRedirect的一个示例。谢谢,这似乎很好,但当我按照您的建议使用django内置登录表单时,它只是重定向到login\u REDIRECT\u URL,但它应该尝试将用户重定向到下一个GET参数,请帮助我,先生!你的登录地址是什么?会不会是开头少了一条斜线?这将导致它被简单地附加到您当前的URL,并且很可能是您的问题的原因。在我的设置中,LOGIN_REDIRECT_URL='/',因此,请确认,当您使用Django的本机方法时,它不会转到您希望它转到的页面,而是转到LOGIN_REDIRECT_URL?真奇怪。你能用新的查看功能更新你的原始帖子吗?你登录时的URL,以及它重定向你的URL?这是我问的另一个问题,基本上是我们如何重定向到下一个param-it通用视图,所以我没有编辑它,而是创建了一个新的查询,你可以看看-
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)
path('login', views.login, name='login'),
path('dashboard', views.dashboard, name='dashboard'),