我正在尝试对确定URL是否可用作对象的第一级url路径的问题进行排序。例如:如果以前没有username_1,则www.myapp.com/username_1可用。
我找到的一个解决方案是this,但解决方案不正确。验证部分:
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但是我想知道这个问题是否有更好的解决方案?
非常感谢。
答案 0 :(得分:1)
在这种情况下不需要涉及网址(如果我理解你正在做什么)。
只需使用类似的东西(假设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