0

我正在尝试对确定 URL 是否可用作对象的一级 url 路径的问题进行排序。例如:如果之前没有 username_1 存在,则 www.myapp.com/username_1 将可用。

我找到的一个解决方案是这个,但解决方案不正确。验证部分:

def clean_username(self):
        username = super(NewRegistrationForm, self).clean_username()
        try:    resolve(urlparse('/' + username + '/')[2])
        except Resolver404, e:
            return username

        raise ValidationError(_(u'This username does not create '
                                u'a valid URL.  Please choose '
                                u'another'))

总是会引发错误。似乎需要一种方法来检查 URL 是否返回 404。我可以使用urllib但是我想知道这个问题是否有更好的解决方案?

非常感谢。

4

1 回答 1

1

在这种情况下不需要涉及 url(如果我理解你在做什么正确的话)。

只需使用类似的东西(假设 Django 1.5 或更高版本):

from django.contrib import auth

def clean_username(username):
    url = urlresolvers.reverse('your_view_name', kwargs=dict(username=username))
    match = urlresolvers.resolve(url)
    if match.view_name != 'your_view_name':
        raise ValidationError(_(
            u'This username does not create a valid URL.  Please choose another'))

    if auth.get_user_model().objects.filter(username__iexact=username):
        raise ValidationError(_(u'There is already a user with this username'))

    return username
于 2013-10-02T11:33:45.767 回答