这可能是重复的,但是我尝试了很多解决方案,但没有一个对我有用。
views.py
class signup_view(View):
def get(self, request):
signup_form = SignUpForm()
return render(request, 'signup.html', {"forms": signup_form})
def post(self, request):
signup_form = SignUpForm(data=request.POST)
if signup_form.is_valid():
email = signup_form.cleaned_data.get('user_email')
password = signup_form.cleaned_data.get('user_pass')
print("Original password is: ", password)
hashed_password = make_password(password)
print("Hashed password is: ", hashed_password)
signup_form.inital['user_pass'] = hashed_password
signup_form.save()
request.session['username'] = email
return render(request, 'main_page.html')
else:
return render(request, 'signup.html', {"forms": signup_form})
我有这个django视图,我用发布请求中的信息填充了该视图,但是,我需要确保密码和密码确认(在表单中)都相同,以便进行操作,我可以这样做在clean()函数中,我将在下面发布。但是,我需要将散列密码保存在我的数据库中,而不是实际的密码上,并且我不知道在我已经确认它是有效的之后该如何更改表单的内容(不确定是否可以这样做)。
class SignUpForm(forms.ModelForm):
user_pass_check = forms.CharField(label="Password confirmation", widget=forms.PasswordInput())
class Meta:
model = AppUser
fields = ["user_email", "user_country", "user_pass"]
widgets = {"user_pass": forms.PasswordInput()}
def clean(self):
cleaned_data = super(SignUpForm, self).clean()
pass1 = cleaned_data.get('user_pass_check')
pass2 = cleaned_data.get('user_pass')
if pass1 != pass2:
raise forms.ValidationError("The two password fields must match.")
return cleaned_data
任何帮助都将是惊人的,花了好几个小时苦苦挣扎。 预先感谢!
答案 0 :(得分:2)
这不是方法。相反,通过保存commit = False来获取模型对象,然后在保存为真实对象之前在该对象上设置密码。
struct UserService: Codable {
let id: Int
let name: String?
let company: Company?
struct Company: Codable {
let name: String?
}
}
struct User {
let id: Int
let name: String?
let companyName: String?
init(from service: UserService) {
id = service.id
name = service.name
companyName = service.company?.name
}
}
但是,我希望您不要自己进行身份验证。即使您正确地对密码进行哈希处理,这也是绝对不能的事情。身份验证还涉及许多其他安全陷阱,并且Django已经对其进行了测试。不要这样使用内置的身份验证框架,并在需要时替换您自己的User对象。