我是Django新手。
我想限制用户使用特定域名(例如@ gmail.com)注册我的Django网站,但是如何在我的注册表单中自定义EmailField呢?
仅供参考,这是我的代码。
forms.py
class RegistrationForm(ModelForm):
username = forms.CharField(label=(u'User Name'))
email = forms.EmailField(label = (u'Email Adress'))
class Meta:
model = UserProfile
exclude = ('user',)
register.html
{% extends "base.html" %}
{% block content %}
<form action = "" method ="post">
{% csrf_token%}
{% if form.errors %} <p>Please correct the following fields</p> {% endif %}
<div class ="register_div">
{% if form.username.errors %}<p class="error">{{ form.username.errors }}</p>{% endif %}
<p><label for="username"{% if form.username.errors %} class="error"{% endif %}>Username:</label></p>
<p>{{ form.username }}</p>
</div>
<div class ="register_div">
{% if form.email.errors %}<p class = "error">{{ form.email.errors }}</p>{% endif %}
<p><label for ="email"{% if form.email.errors %} class="error"{% endif %}>Email:<label><p>
<p>{{ form.email }}</p>
</div>
<p><input type="submit" alt="register" /></p>
</form>
{% endblock %}
答案 0 :(得分:3)
您可以为表单编写自己的清理函数:
class RegistrationForm(ModelForm):
username = forms.CharField(label=(u'User Name'))
email = forms.EmailField(label = (u'Email Adress'))
def clean_email(self):
data = self.cleaned_data['email']
if "@gmail.com" not in data: # any check you need
raise forms.ValidationError("Must be a gmail address")
return data
class Meta:
model = UserProfile
exclude = ('user',)
更多信息:https://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-a-specific-field-attribute
答案 1 :(得分:1)
您可以通过HTML5输入标记属性(模式)实现相同的目标。比如你的域名是foo.com,那么代码将是:
<input id="email" type="email" pattern="[a-z.]*[@]\bfoo.com" required>
您还可以使用DOM元素的setCustomValidity更改错误消息。
document.getElementById('email').setCustomValidity("Please use an @foo.com email address.");