我不是Django的高级用户。我在网上看到过很多不同的方法,但都是针对修改过的模型,或者太复杂,我无法理解。
我正在重用我的MyRegistrationForm
中的UserCreationForm
class MyRegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ('username', 'email', 'password1', 'password2')
def save(self, commit=True):
user = super(MyRegistrationForm, self).save(commit=False)
user.email = self.cleaned_data['email']
user.set_password(self.cleaned_data["password1"])
if commit:
user.save()
return user
我很难理解或者想办法检查用户输入的用户名是否已经被使用。 所以我就用这个把我重定向到html,上面写着错误的用户名或密码不匹配:
def register_user(request):
if request.method == 'POST':
form = MyRegistrationForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/accounts/register_success')
else:
return render_to_response('invalid_reg.html')
args = {}
args.update(csrf(request))
args['form'] = MyRegistrationForm()
print args
return render_to_response('register.html', args)
这是我的注册模板(如果需要):
{% extends "base.html" %}
{% block content %}
<section>
<h2 style="text-align: center">Register</h2>
<form action="/accounts/register/" method="post">{% csrf_token %}
<ul>
{{form.as_ul}}
</ul>
<input type="submit" value="Register" onclick="validateForm()"/>
</form>
</section>
{% endblock %}
但在用户被重定向之前,我需要发出某种异常或类似的smth。也许当用户按下register时,他/她会得到一个错误/警告,说用户名已经被占用了?有可能吗?
您可以使用
clean_username
方法检查username
是否存在,并引发ValidationError如果是这种情况,您可以在注册表单中显示错误,而无需重定向到其他页面。
更新:
正如@Spacedman指出的,在检查表单逻辑上的用户名唯一性和DB级别的唯一性时,关于竞争条件的一个有效点是,尽管您不太可能获得这一点,如果您这样做的话,这里有相关的SO答案,可能值得一读:
How to avoid race condition with unique checks in Django
Race conditions in django
另一个更新
根据OP的评论,以下是对视图的另一个更改:
希望这有帮助。
您可以使用^{} :
相关问题 更多 >
编程相关推荐