可以用HTML表单在Django中创建登录吗



我是Django的新手,我正在创建一个简单的注册和登录功能。我遵循了一个youtube教程,其中的人使用Django表单。我尝试只使用HTML表单进行登录和注册。注册部分已经完成,我在admin url上看到了数据。对于登录,我在这条线上没有得到:

user = authenticate(request, username=username, password=password)

这就是为什么我不能通过if user不是None条件。有人能帮忙吗?这是代码:

这是寄存器部分:

def createUser(request):
if request.method == 'POST':
if request.POST.get('username') and request.POST.get('password'):
post = FormDetails()
post.register_email = request.POST.get('username')
post.register_pass = request.POST.get('password')
post_save = post.save()
print("data posted and saved")
return redirect('login')
messages.success(
request, f'Your account has been created ! You are now able to log in')
return render(request, 'users/register.html')

FormDetails是我的电子邮件和密码字段模型(这就是为什么我在管理页面中看到密码为纯文本(。

登录名为:

def loginScreen(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
print("username={}".format(username))
user = authenticate(request, username=username, password=password)
print("user={}".format(user))
if user is not None:
login(request, user)
messages.success(request, f' welcome {username} !!')
print("here")
return HTTPResponseRedirect('index')
else:
messages.info(request, f'account done not exit plz sign in')
return render(request, 'users/login.html')

HTML表单有可能吗?如有任何帮助或线索,我们将不胜感激。

编辑1:

从评论中,我做了一些改变。我已经注释掉了模型文件,现在我使用的是表单文件:

from django import forms

从django.contrib.auth.models导入用户

类UserForm(forms.ModelForm(:类元:model=用户fields=["电子邮件"、"密码"]

并在视图中的寄存器功能中使用它:

def createUser(request):
if request.method == 'POST':
uform = UserForm(data=request.POST)
# print("uform={}".format(uform.password))
if uform.is_valid():
user = uform.save()
user.set_password(user.password)
user.save()
print("data posted and saved")
else:
print(uform.errors)
else:
uform = UserForm()
return render(request, 'users/register.html')

但我在点击提交按钮时收到了这个错误:

UNIQUE约束失败:auth_user.username

Django在保存用户密码时使用set_password方法。您不应该将密码保存为纯文本。这可能会导致在尝试进行身份验证时出现问题。

我要感谢所有为我指明正确道路的人。我解决了这个错误。在我添加forms.py文件并删除模型的EDIT 1之后,我能够通过提供";用户名";字段到CCD_ 1字段。我之前没有提供用户名,这就是为什么创建了一个空白用户名,下次尝试时显示用户名已经存在,因为它又是空白的。

现在一切都很好。如果其他人也面临同样的问题,我希望这个答案能有所帮助。

相关内容

  • 没有找到相关文章

最新更新