我正在构建我的第一个django应用程序。我试图创建一个稍微定制的身份验证系统,但我的登录视图不起作用。
当我创建用户时,我的注册视图会创建用户,对其进行身份验证,然后正确地重定向到另一个URL。
如果那时我退出并登录我的登录表单并发布到登录视图,我会继续被重定向到相同的表单。我的views.py看起来像这样:
from django.contrib.auth.forms import AuthenticationForm
from django.shortcuts import render
from django.contrib import messages
from general import forms
from django.http import HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login,logout, authenticate
# Create your views here.
def home(request):
if request.user.is_authenticated():
return render(request, 'general/home.html')
else:
return HttpResponseRedirect('/login')
def loginView(request):
form = AuthenticationForm()
if request.method=='POST':
form = AuthenticationForm(request.POST)
if form.is_valid():
user = authenticate(username=request.POST['username'], password=request.POST['password'])
if user is not None:
messages.add_message(request, messages.SUCCESS,
"Welcome back, {}".format(user))
login(request, user)
return home(request)
return render(request, 'general/loginForm.html', {'form': form})
def logoutView(request):
if request.user.is_authenticated():
logout(request)
return HttpResponseRedirect('/')
def register(request):
if request.method=='POST':
form = forms.MyCreationForm(request.POST)
if form.is_valid():
form.save()
messages.add_message(request,messages.SUCCESS,
"Welcome to ShopGlue, in 3 steps you'll be up and running!")
user = authenticate(username=request.POST['username'], password=request.POST['password1'])
if user is not None:
login(request,user)
return profile(request)
else:
return render(request, 'general/registerForm.html', {'form': form})
else:
form = forms.MyCreationForm()
return render(request, 'general/registerForm.html', {'form': form})
@login_required()
def profile(request):
return render(request, 'general/profile.html')
我的urls.py看起来像这样:
from django.conf.urls import url
from general import views
urlpatterns = [
url(r'^$', views.home, name="home"),
url(r'^login$', views.loginView, name="loginView"),
url(r'^logout$', views.logoutView, name="logoutView"),
url(r'^register$', views.register, name="register"),
url(r'^profile$', views.profile, name="profile"),
]
我不能为我的生活,弄清楚我做错了什么。一些反馈将非常感激。
谢谢你们。
编辑:这是MyCreationForm():
class MyCreationForm(UserCreationForm):
class Meta:
model = User
fields = [
'username',
'email',
]
它只是扩展了django提供的UserCreation表单。 此外,在管理员中,当我点击一个用户并尝试查看其密码时,我看到了:
算法:pbkdf2_sha256迭代:20000盐:cU32aI ****** hash:sABS3A ***************************** *********
这意味着密码在存储之前已经过哈希处理。
有关如何修复登录视图的任何想法? :(
答案 0 :(得分:0)
我在您的视图中看到的唯一问题是在login()调用之后的return语句。为什么返回视图而不是HttpResponse对象
return HttpResponseRedirect('/')
答案 1 :(得分:0)
好的,想通了。
form = AuthenticationForm(request.POST)
应该是:
form = AuthenticationForm(data=request.POST)