Python 登录视图未登录用户

Python 登录视图未登录用户,python,django,views,Python,Django,Views,我正在构建我的第一个django应用程序。我试图创建一个稍微定制的身份验证系统,但我的登录视图不起作用 当我创建一个用户时,我的注册视图创建该用户,对其进行身份验证,然后正确地重定向到另一个url 如果然后我注销并进入登录表单并发布到登录视图,我将继续被重定向到同一表单。my views.py如下所示: from django.contrib.auth.forms import AuthenticationForm from django.shortcuts import render from

我正在构建我的第一个django应用程序。我试图创建一个稍微定制的身份验证系统,但我的登录视图不起作用

当我创建一个用户时,我的注册视图创建该用户,对其进行身份验证,然后正确地重定向到另一个url

如果然后我注销并进入登录表单并发布到登录视图,我将继续被重定向到同一表单。my 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')
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"),
]
My urls.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')
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():

它只是扩展了django提供的用户创建表单。 此外,在管理员中,当我单击一个用户并尝试查看其密码时,我会看到:

算法:pbkdf2_sha256迭代次数:20000 salt:cU32aI*******散列:sABS3A**************************************

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


关于如何修复登录视图,有什么想法吗(

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

return HttpResponseRedirect('/')
好吧,算了

form = AuthenticationForm(request.POST)
应该是:

form = AuthenticationForm(data=request.POST)

您尚未显示MyCreationForm的代码,但我猜这只是将用户密码保存为明文,这在您登录时是无效的。首先,我建议您阅读PEP8如何编写漂亮/时尚的Python代码。其次,您可以缩短注销视图。只需在函数simple login中添加@login\u required和上面的内容(请求)和返回…已修复!但原始问题仍然存在。对此有何想法?