我使用通用表单视图进行身份验证,我在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/
帮帮我!
答案 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 的示例。