Django UserCreationForm、哈希密码和身份验证()
我是Django的新手,我正在尝试创建简单的用户注册/登录应用程序。 对于注册,我使用自定义UserCreationForm:Django UserCreationForm、哈希密码和身份验证(),django,authentication,login,hash,registration,Django,Authentication,Login,Hash,Registration,我是Django的新手,我正在尝试创建简单的用户注册/登录应用程序。 对于注册,我使用自定义UserCreationForm: def registration(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): new_user = form.save() messa
def registration(request):
if request.method == 'POST':
form = UserCreationForm(request.POST)
if form.is_valid():
new_user = form.save()
messages.info(request, "You've successfully registered")
return HttpResponseRedirect('/')
else:
form = UserCreationForm
return render(request, 'accounts/registration.html', {'form': form})
而且效果很好。但是写登录函数我遇到了困难。我在/accounts/login'User'对象上获得了AttributeError,但该对象没有属性'backend'。即使登录/密码正确,authenticate()似乎也不会返回任何对象
def login(request):
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
userData = form.cleaned_data
user = authenticate(username=userData['username'],password=userData['password'])
auth_login(request, user)
messages.info(request, "You're successfully logged in")
return HttpResponseRedirect('/')
else:
messages.info(request, 'Invalid username or password')
return HttpResponseRedirect('/accounts/login')
else:
form = LoginForm()
return render(request, 'accounts/login.html', {'form': form}
我认为关键是密码以散列形式保存在DB中,这就是为什么userData['password']与同一用户名的DB中的值不相同的原因
修复此错误的最佳方法是什么
跟踪误差
Internal Server Error: /accounts/login
Traceback (most recent call last):
File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\core\handlers\base.py"
, line 115, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "C:\Python27\myproject\djcode\first_venv\myownproject\accounts\views.py", line 36, in login
auth_login(request, user)
File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\contrib\auth\__init__.
py", line 92, in login
request.session[BACKEND_SESSION_KEY] = user.backend
File "C:\Python27\myproject\djcode\first_venv\venv\lib\site-packages\django\utils\functional.py",
line 203, in inner
return func(self._wrapped, *args)
AttributeError: 'User' object has no attribute 'backend'
在你的代码中试试这个
user = authenticate(username=userData['username'],password=userData['password'])
if user:
user.backend = 'django.contrib.auth.backends.ModelBackend'
auth_login(request, user)
else:
print "invalid login"
请您出示UserCreationForm代码,可以将密码直接保存到数据库中。如果您使用user.set_password(),它将对密码值进行django编码,然后在身份验证时对其进行正确检查。我使用默认的UserCreationForm,不进行更改,因此在forms.py中,我只有LoginForm(用户名/密码)。也许我该怎么纠正它?添加跟踪错误无效登录[05/Jul/2013 16:51:20]“POST/accounts/login HTTP/1.1”200 631只要在UserCreationForm中使用User.objects.create\u User方法,它与哈希无关。你能发布你的登录信息和用户创建表单吗。。如果您厌倦了这样做,那么只需使用这个类LoginForm(forms.Form):username=forms.CharField(max_length=30)password=forms.CharField(widget=forms.PasswordInput)LoginForm很简单,默认的UserCreationForm(像这样)谢谢您的建议,我正在尝试通过创建基本应用来学习如何使用django。否则我永远也学不会:)试着在错误出现的地方调试。。。从django管理员创建一个用户,并运行登录视图,并将其放入