URL-адрес mailto с косыми чертами все еще действителен?

#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>