[英]How to properly make a signup view with django
我使用 Django 创建了一个注册视图,但它不起作用,它存储在数据库中,但我无法使用该视图存储的数据登录,而我可以使用我使用 manage.py createsuperuser 创建的用户登录这里是我的注册视图
def signup(request):
if request.method == 'POST':
user = User.objects.create(
username=request.POST['username'],
password=request.POST['password'],
email=request.POST['email'],
first_name=request.POST['first_name'],
last_name=request.POST['last_name'],
)
user.save()
return HttpResponseRedirect(reverse('posts'))
else:
signupform = SignUpForm()
return render(request, 'users/signup.html', {'form': signupform})
这是我的注册表单
class SignUpForm(forms.Form):
username = forms.CharField(max_length=30, required=True)
password = forms.CharField(widget=forms.PasswordInput(), required=True)
email = forms.EmailField(required=True)
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
我只需要知道究竟出了什么问题以及如何准确修复它,或者我需要学习什么才能正确执行此任务。
您的代码中有一些事情没有正确完成。 但主要问题是您在保存密码之前没有 hash 密码。
from django.contrib.auth.hashers import make_password,
def signup(request):
if request.method == 'POST':
user = User.objects.create(
username=request.POST['username'],
password=make_password(request.POST['password']),
email=request.POST['email'],
first_name=request.POST['first_name'],
last_name=request.POST['last_name'],
)
return HttpResponseRedirect(reverse('posts'))
else:
signupform = SignUpForm()
return render(request, 'users/signup.html', {'form': signupform})
这段代码解决了你的问题。 但是如果你想做得更正确,你应该在使用表单保存之前验证数据并保存表单,而不是在视图中创建用户。 您可以在文档中阅读它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.