登录视图未记录用户

时间:2016-01-18 21:42:35

标签: python django views

我正在构建我的第一个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 ***************************** *********

这意味着密码在存储之前已经过哈希处理。

有关如何修复登录视图的任何想法? :(

2 个答案:

答案 0 :(得分:0)

我在您的视图中看到的唯一问题是在login()调用之后的return语句。为什么返回视图而不是HttpResponse对象

return HttpResponseRedirect('/')

答案 1 :(得分:0)

好的,想通了。

form = AuthenticationForm(request.POST)

应该是:

form = AuthenticationForm(data=request.POST)