#django #django-forms #protocols #mailto
#django #django-forms #протоколы #mailto
Вопрос:
Я использую подкласс Django URLField для выполнения некоторой проверки по выбранным URL-адресам. Я добавил mailto в качестве одного из поддерживаемых URLValidator default_validators:
class MyURLField(forms.URLField):
default_validators = [
validators.URLValidator(
schemes=['http', 'https', 'ftp', 'ftps', 'mailto']
)
]
class MyForm(forms.Form):
url = MyURLField(required=True)
form = MyForm({'url': 'mailto:test@example.com'})
if not form.is_valid():
raise Exception()
clean_url = form.cleaned_data['url']
print(clean_url) # this prints 'mailto://test@example.com'
По-прежнему ли действителен mailto
URL-адрес с двумя дополнительными косыми чертами протокола?
mailto:test@example.com
в сравнении mailto://test@example.com
(что создает Django)
Комментарии:
1. Он будет нацелен на отправку почты на
//test@example.com
в качестве адреса электронной почты, поэтому с двумя косыми чертами перед адресом электронной почты.2. Черт возьми, поэтому я должен добавить какой-то rstrip (‘//’). Хорошо, спасибо за вашу помощь!
Ответ №1:
В Django есть EmailField
поэтому, если вы хотите хранить адреса электронной почты или даже использовать их в формах, используйте эти поля, потому что вы получаете встроенную проверку и вам не нужно ничего взламывать, как вам придется при вашем подходе.
В ваших моделях вы бы сделали;
class MyModel(models.Model):
email = models.EmailField(
verbose_name=_('Email'),
max_length=255,
unique=True,
db_index=True
)
В ваших формах это очень похоже;
class MyForm(forms.ModelForm):
email = forms.EmailField(
label=_("Email")
)
И затем это становится mailto
URL-адресом, когда вы выводите его в шаблоне и т. Д;
<a href="mailto:{{ object.email }}">
{{ object.email }}
</a>