Зачем использовать дополнительный слэш (/) в конце урлов Django?

Я пытаюсь создать REST API с помощью Django. В настоящее время я реализую файл urls.py. В большом количестве различных примеров я видел, что они добавляют / в конце url. Например:

urlpatterns = [
    path('login/', obtain_auth_token, name='api_token_auth'),
]

Я пытаюсь понять, как это сделать. Конечно, для POST-запроса login, который возвращает токен (заданное имя пользователя и пароль), вы хотите получить доступ к <domain>/api/login, а не <domain>/api/login/. В настоящее время я решил эту проблему следующим образом:

urlpatterns = [
    re_path(r'login$', obtain_auth_token, name='api_token_auth'),
]

Ор:

urlpatterns = [
    path('login', obtain_auth_token, name='api_token_auth'),
]

Но что это за соглашение? Почему во многих примерах в конце добавляется дополнительная строка /? Когда вы хотите его добавить?

Django's CommonMiddleware пытается нормализовать URL, так что каждый URL существует только один раз, а не в версии, заканчивающейся слэшем и без него. Таким образом, пользователю не нужно заботиться о том, добавлять слеш или нет, а для поисковых систем это большой выигрыш, так как они не видят один и тот же контент с разными URL. Вы можете настроить это поведение либо с помощью параметра APPEND_SLASH, либо с помощью декоратора no_append_slash().

Вернуться на верх