Python 在注册/创建帐户期间,如果models.py中没有“retyppassword”字段,如何比较password和retypepassword?
models.py:Python 在注册/创建帐户期间,如果models.py中没有“retyppassword”字段,如何比较password和retypepassword?,python,django,forms,templates,passwords,Python,Django,Forms,Templates,Passwords,models.py: class Users(models.Model): username = models.CharField(max_length=255) slug = models.CharField(max_length=255, default='0') password = models.CharField(max_length=300) passwordrepeat = models.CharField('Repeat Password', ma
class Users(models.Model):
username = models.CharField(max_length=255)
slug = models.CharField(max_length=255, default='0')
password = models.CharField(max_length=300)
passwordrepeat = models.CharField('Repeat Password', max_length=300)
password_token = models.CharField(max_length=300, default='0')
email = models.CharField(max_length=255)
email_verified = models.BooleanField(default=False)
email_token = models.CharField(max_length=255)
email_token_expiry = models.DateTimeField(auto_now_add=True)
tos = models.BooleanField(default=False)
active = models.BooleanField(default=False)
last_login = models.DateTimeField(auto_now_add=True)
last_action = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)
role = models.CharField(max_length=255, default='0')
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.username
class UsersModelForm(forms.ModelForm):
class Meta:
model = Users
fields = ('username', 'password', 'passwordrepeat', 'email')
widgets = {
'password' : PasswordInput(),
'passwordrepeat' : PasswordInput(),
}
views.py:
def register(request):
flag = True
possible = '0123456789abcdefghijklmnopqrstuvwxyz'
token = ''
length = 10
i = 0
current_datetime = datetime.datetime.now()
user = UsersModelForm()
if request.method == 'POST':
userf = UsersModelForm(request.POST)
username = userf.data['username']
password = userf.data['password']
passwordrepeat = userf.data['passwordrepeat']
email = userf.data['email']
if password != passwordrepeat:
flag = False
passVariable = {'user':user, 'flag': False}
return render_to_response('register.html', passVariable, context_instance=RequestContext(request))
elif password == passwordrepeat:
while i<10:
temp = random.choice(possible)
token = token + temp
i=i+1
userf.email_token = token
userf.email_token_expiry = current_datetime + timedelta(1)
userf.save()
return HttpResponseRedirect('/')
else:
return render_to_response('register.html', {"user": user, 'flag': True}, context_instance=RequestContext(request))
在模板中:
<div id="id_div_register">
<form action="/register" method="POST">{% csrf_token %}
{{ user.as_p }}
<input type=submit value="Submit" />
</form>
</div>
由于models.py中的字段,此表单会创建一个文本框“repeatpassword”。我不想在mysql表字段/列中有字段“repeatpassword”。但我需要比较模板中的“密码”和“重复密码”。我怎么做
我需要模板中的“password”和“repeatpassword”来比较这两个,但我不需要blog_users mysql表中的列/字段“repeatpassword”。我怎么做?是否可以执行此操作。从模型中删除passwordrepeat。 将UsersModelForm扩展为passwordrepeat输入。
检查UsersModelForm中的密码匹配自定义验证是否有效方法您需要在表单上创建一个新字段,该字段将被清除以检查密码匹配,然后您可以在视图中删除密码检查并替换为。如下所示:
class UsersModelForm(forms.ModelForm):
passwordrepeat = forms.PasswordInput()
class Meta:
model = Users
def clean(self):
cleaned_data = self.cleaned_data
password = cleaned_data.get("password")
passwordrepeat = cleaned_data.get("passwordrepeat")
if password != passwordrepeat:
raise forms.ValidationError("Passwords must match.")
return cleaned_data
你决不能这样做
您正在数据库中以明文形式存储用户密码。你不能这样做
Django有一个完整的内置身份验证框架,它负责正确存储密码所需的所有安全性,包括哈希。使用它。它并不复杂,事实上比自己滚动要容易得多
摆脱你的不安全版本,使用Django的。无法理解你在说什么,发布完整的代码将有助于理解。你能发布models.py的代码吗?为什么不使用Django的用户身份验证机制:并首先扩展models.user by UserProfile?models.py将是相同的,但删除passwordrepeat=models.CharField'Repeat Password',max_length=300字段。使用这些身份验证在我看来很复杂。models.py中的小部件在哪里?你能发布完整的models.py和views.py来轻松理解你想说的话吗?return cleaned_数据的缩进可以吗?还是在def cleanelf之外?我什么时候调用clean方法?我需要先注册/创建帐户,然后进行身份验证。该注释与我的答案有什么关系?不要创建用于存储密码的不安全系统。使用Django's。如果你需要在上面设置一个注册机制,可以使用类似的东西。那些django注册或django认证在我看来很复杂。这就是我需要自己动手的原因。我相信当你告诉你的客户他们被黑客攻击时,他们会很高兴,因为你更喜欢把自己的系统组装在一起,而不是花时间阅读有关如何正确操作的文档。为什么其他人会进行黑客攻击?如果我在保存之前对密码进行哈希运算,那么其他人是否能够破解它?。