Зачем использовать дополнительный слэш (/) в конце урлов 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()
.