Я пытаюсь создать шаблон регулярного выражения для lookup_value_regex
на django-rest-framework
API, который принимает URL, такие как:
/alice_test
/alice_test.json
/alice.test
/alice.test.json
/alice_test.so@gmail.com
/alice_test.so@gmail.com.json
PS: username
после /
можетсодержит _. @ - в любой точке.
и правильно определяет, когда использовать формат json для возврата ответа. В настоящее время я пытался изменить lookup_value_regex
в моем Viewset следующим образом.
class UserViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet):
lookup_field = 'username'
lookup_value_regex = r'(?<=/)[\w.@+-]+?(?=\.json|\.csv|\.xml|$)'
Эта реализация при тестировании с моими примерами путей, приведенными выше, возвращает следующие значения поиска
/alice_test # alice_test -- OK
/alice_test.json # alice_test.json -- NOT OK
/alice.test # alive.test -- OK
/alice.test.json # alice.test.json -- NOT OK
/alice_test.so@gmail.com # alice_test.so@gmail.com -- OK
/alice_test.so@gmail.com.json # alice_test.so@gmail.com.json -- NOT OK
Howзаставить lookup_value_regex
работать и правильно выбирать, когда он должен использовать формат ответа?
В конечном итоге я пытаюсь повторить функциональность регулярного выражения [^/.]+
, но в этом случае он должен принять.
и сможете различать имя пользователя и формат. Так, чтобы сгруппировать регулярное выражение следующим образом: (?P<username>[^/.]+)
, а затем добавить \.(?P<format>[a-z0-9]+)
к регулярному выражению, сделав его (?P<username>[^/.]+)\.(?P<format>[a-z0-9]+)
, правильно выберет username
и format
.