[英]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.