Python Django URLField ErrorDetail“;请输入有效的URL";
我目前正在为一个客户端开发一个webApp。我从未使用过URLField,因为我总是在JS中使用自己的URL验证程序,但这次我想使用它。问题是,当我测试应用程序时,我传递的url如下: 测试.pyPython Django URLField ErrorDetail“;请输入有效的URL";,python,django,django-rest-framework,Python,Django,Django Rest Framework,我目前正在为一个客户端开发一个webApp。我从未使用过URLField,因为我总是在JS中使用自己的URL验证程序,但这次我想使用它。问题是,当我测试应用程序时,我传递的url如下: 测试.py class Mision(models.Model): img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.j
class Mision(models.Model):
img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.jpg")
usuario = models.ForeignKey(Usuario, related_name="mision", default=None, blank=False, on_delete=models.SET_DEFAULT)
fecha = models.DateTimeField(auto_now_add=True)
titulo = models.CharField(max_length=200, null=False, blank=False)
subtitulo = models.CharField(max_length=200, blank=True)
url = models.URLField(max_length=200, blank=True)
class MisionSerializer(serializers.ModelSerializer):
class Meta:
model = Mision
fields = '__all__'
@api_view(["POST"])
def misionCreate(request):
serializer = MisionSerializer(data=request.data)
data = {}
if serializer.is_valid():
if request.user.is_superuser:
serializer.save()
mision = Mision.objects.get(id = serializer.data["id"])
data["success"] = "Mision Creada con exito!"
data["status"] = 200
data["mision"] = serializer.data
return Response(data, status=status.HTTP_200_OK)
elif not request.user.is_superuser:
data["error"] = "El usuario no es superuser."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = "El usuario no tiene tokens."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = serializer.errors
data["status"] = 422
return Response(data, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
url=”https://www.youtube.com/watch?v=9P1HtbpGSCk"
数据={…,“img”:img,“url”:url}
response=client\u superuser.post(url、数据、格式=“多部分”)
此错误排列为:
{'error': {'url': [ErrorDetail(string='Please enter a valid URL.', code='invalid')]}, 'status': 422}
我也尝试了不同的网址,但没有改变。
阅读其他问题,比如,我意识到本地测试可能是一个问题,这就是我正在做的
url=models.URLField(验证是否存在=False)
或者,换句话说,我怎样才能关闭URL验证程序呢?也许有一个没有验证程序的URL字段是愚蠢的,但我不明白Django文档如何正确地禁用一些验证程序
型号.py
class Mision(models.Model):
img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.jpg")
usuario = models.ForeignKey(Usuario, related_name="mision", default=None, blank=False, on_delete=models.SET_DEFAULT)
fecha = models.DateTimeField(auto_now_add=True)
titulo = models.CharField(max_length=200, null=False, blank=False)
subtitulo = models.CharField(max_length=200, blank=True)
url = models.URLField(max_length=200, blank=True)
class MisionSerializer(serializers.ModelSerializer):
class Meta:
model = Mision
fields = '__all__'
@api_view(["POST"])
def misionCreate(request):
serializer = MisionSerializer(data=request.data)
data = {}
if serializer.is_valid():
if request.user.is_superuser:
serializer.save()
mision = Mision.objects.get(id = serializer.data["id"])
data["success"] = "Mision Creada con exito!"
data["status"] = 200
data["mision"] = serializer.data
return Response(data, status=status.HTTP_200_OK)
elif not request.user.is_superuser:
data["error"] = "El usuario no es superuser."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = "El usuario no tiene tokens."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = serializer.errors
data["status"] = 422
return Response(data, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
序列化程序.py
class Mision(models.Model):
img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.jpg")
usuario = models.ForeignKey(Usuario, related_name="mision", default=None, blank=False, on_delete=models.SET_DEFAULT)
fecha = models.DateTimeField(auto_now_add=True)
titulo = models.CharField(max_length=200, null=False, blank=False)
subtitulo = models.CharField(max_length=200, blank=True)
url = models.URLField(max_length=200, blank=True)
class MisionSerializer(serializers.ModelSerializer):
class Meta:
model = Mision
fields = '__all__'
@api_view(["POST"])
def misionCreate(request):
serializer = MisionSerializer(data=request.data)
data = {}
if serializer.is_valid():
if request.user.is_superuser:
serializer.save()
mision = Mision.objects.get(id = serializer.data["id"])
data["success"] = "Mision Creada con exito!"
data["status"] = 200
data["mision"] = serializer.data
return Response(data, status=status.HTTP_200_OK)
elif not request.user.is_superuser:
data["error"] = "El usuario no es superuser."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = "El usuario no tiene tokens."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = serializer.errors
data["status"] = 422
return Response(data, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
视图.py
class Mision(models.Model):
img = models.ImageField(upload_to="misiones", storage=OverwriteStorage(), default="noticias/tanque_arma3.jpg")
usuario = models.ForeignKey(Usuario, related_name="mision", default=None, blank=False, on_delete=models.SET_DEFAULT)
fecha = models.DateTimeField(auto_now_add=True)
titulo = models.CharField(max_length=200, null=False, blank=False)
subtitulo = models.CharField(max_length=200, blank=True)
url = models.URLField(max_length=200, blank=True)
class MisionSerializer(serializers.ModelSerializer):
class Meta:
model = Mision
fields = '__all__'
@api_view(["POST"])
def misionCreate(request):
serializer = MisionSerializer(data=request.data)
data = {}
if serializer.is_valid():
if request.user.is_superuser:
serializer.save()
mision = Mision.objects.get(id = serializer.data["id"])
data["success"] = "Mision Creada con exito!"
data["status"] = 200
data["mision"] = serializer.data
return Response(data, status=status.HTTP_200_OK)
elif not request.user.is_superuser:
data["error"] = "El usuario no es superuser."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = "El usuario no tiene tokens."
data["status"] = 401
return Response(data, status=status.HTTP_401_UNAUTHORIZED)
else:
data["error"] = serializer.errors
data["status"] = 422
return Response(data, status=status.HTTP_422_UNPROCESSABLE_ENTITY)
感谢@AbdulAzizBarkat,这让我意识到我使用了两个名为“url”的变量,所以我只需将这些变量更改为两个不同的名称,现在就可以工作了 错误:
url = reverse('api:mision-create')
url= "https://www.youtube.com/watch?v=9P1HtbpGSCk"
data = {'usuario': usuario.pk, "titulo":"test", "subtitulo":"test", "img": img, "url":url}
response = client_superuser.post(url, data,format="multipart")
已解决:
url = reverse('api:mision-create')
url_field= "https://www.youtube.com/watch?v=9P1HtbpGSCk"
data = {'usuario': usuario.pk, "titulo":"test", "subtitulo":"test", "img": img, "url":url_field}
response = client_superuser.post(url, data,format="multipart")
您可以共享您的模型、序列化程序、视图等吗?可以@WillemVanOnsem@MatiasCoco顺便问一下,你确定你发布到了正确的url吗
client\u superuser.post(url,data,format=“multipart”)
就在这一行上面(至少如您所示),您已经编写了url=”https://www.youtube.com/watch?v=9P1HtbpGSCk“
所以你可能真的想把数据发布到youtube上……哈哈哈,你是对的,我从来没有意识到我使用了两个同名变量,谢谢@AbdulAzizBarkat!