Python 登录视图未登录用户
我正在构建我的第一个django应用程序。我试图创建一个稍微定制的身份验证系统,但我的登录视图不起作用 当我创建一个用户时,我的注册视图创建该用户,对其进行身份验证,然后正确地重定向到另一个url 如果然后我注销并进入登录表单并发布到登录视图,我将继续被重定向到同一表单。my views.py如下所示: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
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和上面的内容(请求)和返回…已修复!但原始问题仍然存在。对此有何想法?