我一直在尝试保存用户密码的散列版本,但它不起作用。
表单.py:
class up_form(forms.ModelForm):
class Meta:
model = Users
fields =['email', 'password', 'username', 'status']
views.py:
from myapp.forms import up_form
from django.contrib.auth.hashers import make_password
def register(request):
if request.method == 'POST':
sign_up = up_form(request.POST or None)
if sign_up.is_valid():
sign_up.password = make_password(sign_up.cleaned_data['password'])
sign_up = sign_up.save(commit = False)
sign_up.status = 1
sign_up.save()
但是我的密码
仍然以纯文本形式保存。我该如何解决这个问题?
最佳答案
您需要切换语句的顺序,因为您已将对象命名为与表单本身相同的名称。
if request.method == 'POST':
sign_up = up_form(request.POST)
if sign_up.is_valid():
sign_up = sign_up.save(commit = False)
sign_up.password = make_password(sign_up.cleaned_data['password'])
我希望您也从该方法返回响应,并在 POST 请求后适本地重定向用户。
考虑这个版本:
def register(request):
form = up_form(request.POST or None)
if form.is_valid():
sign_up = form.save(commit=False)
sign_up.password = make_password(form.cleaned_data['password'])
sign_up.status = 1
sign_up.save()
return redirect('/thank-you/')
return render(request, 'sign_up_form.html', {'form': form})
关于python - 以 Django 形式保存用户密码的散列版本不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26112779/