Следующий пример взят из весеннего учебного пособия:
@RequestMapping(method = RequestMethod.POST)
ResponseEntity<?> add(@PathVariable String userId, @RequestBody Bookmark input) {
this.validateUser(userId);
return this.accountRepository
.findByUsername(userId)
.map(account -> {
Bookmark result = bookmarkRepository.save(new Bookmark(account,
input.uri, input.description));
URI location = ServletUriComponentsBuilder
.fromCurrentRequest().path("/{id}")
.buildAndExpand(result.getId()).toUri();
return ResponseEntity.created(location).build();
})
.orElse(ResponseEntity.noContent().build());
}
Обратите внимание, что следующее вычислит путь контекста (URI), чтобы вы избежали дублирования кода и сделали ваше приложение более переносимым:
ServletUriComponentsBuilder
.fromCurrentRequest().path("/{id}")
Этому вопросу уже полвека, поэтому, обновляя свой вопрос, я должен пояснить, что я, по крайней мере, киваю в прошлое, где некоторые функции могли не существовать.
Самый простой способ узнать обрабатывать ярлыки в формах в наши дни - это просто использовать django.models.SlugField
. Он проверит себя для вас и будет означать, что это поле является индексом.
Если вы не используете это в модели, вы все равно можете подключить тот же валидатор, который использует SlugField:
from django.core.validators import validate_slug
slug = forms.CharField(..., validators=[validate_slug])
Если вы просто хотите сделать закулисной проверки или написания собственного валидатора, вы можете использовать аналогичную технику, чтобы получить определение действительного слага, данное Django. Это просто скомпилированное регулярное выражение, которое validate_slug выше использует:
from django.core.validators import slug_re
if slug_re.match(...):
...
Я не могу представить, что оно изменится, но, заблокировав себя идеей Django о слаге, вы '