Как решить конфликт между slug'ом пользователя и slug'ами служебными?

Здравствйте!

urlpatterns = [
    url(r'^register/$', UserSignup.as_view(), name='signup'),
    url(r'^login/$', UserLogin.as_view(), name='login'),
    url(r'^logout/$', UserLogout.as_view(), name='logout'),
    url(r'^edit/$', UserSettings.as_view(), name='settings'),
    url(r'^feedback/$', Feedback.as_view(), name='feedback'),
    url(r'^(?P<slug>[-_\w]+)/$', UserDetail.as_view(), name='user_detail'),
]


Если пользователь заполнит слуг, одним из служебных имен (например: feedback), то он больше не попадет на свой профиль!

Делать url(r'^user/(?P[-_\w]+)/$', UserDetail.as_view(), name='user_detail'), как-то не очень красиво.

Сделать дополнительную валидацию в форме, для проверки совпадения slug'га?

Что посоветуете? Спасибо!
  • Вопрос задан
  • 112 просмотров
Решения вопроса 2
zigen
@zigen
Была похожая ситуация. Проверяем поле slug пользователя на предмет совпадения с запрещенными именами в форме регистрации юзера:

class UserRegForm(AuthentificationForm):
...
    def clean_slug(self):
        slug = self.cleaned_data.get('slug')
        if slug in settings.PROHIBITED_NAMES:
            raise forms.ValidationError(u'Данное название уже было зарезервировано')
        return slug


В settings или в другом любом месте храним список запрещенных slug'oв(смотришь в свой урл паттерн):

PROHIBITED_NAMES = ('article', 'accounts', 'admin', 'ckeditor',....)
Ответ написан
Комментировать
sim3x
@sim3x
Делать url(r'^user/(?P[-_\w]+)/$', UserDetail.as_view(), name='user_detail'), как-то не очень красиво.
зато такое решение простое и не требует дополнительного кода
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы