Rod*_*ogo 7 django django-models
请问有人请说明为什么这个URL http://www.nacolmeia.com.br/do/Home/oferta/EnER不会被从URLField的Django生成的表单中接受?
:)
谢谢
您是否在尝试验证它的同一台服务器上托管该网站? docs
请注意,当您使用单线程开发服务器时,验证由同一服务器提供服务的URL将挂起.对于多线程服务器,这应该不是问题.
它看起来不像它在表单级别的失败验证
>>> from django import forms
>>> f = forms.URLField()
>>> f.clean('http://www.nacolmeia.com.br/do/Home/oferta/EnER')
u'http://www.nacolmeia.com.br/do/Home/oferta/EnER'
>>> f.clean('sadfas')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/dev/.virtualenvs/thepidb/lib/python2.7/site-packages/django/forms/fields.py", line 171, in clean
self.run_validators(value)
File "/home/dev/.virtualenvs/thepidb/lib/python2.7/site-packages/django/forms/fields.py", line 160, in run_validators
raise ValidationError(errors)
ValidationError: [u'Enter a valid URL.']
>>>
Run Code Online (Sandbox Code Playgroud)
如果您不需要在models.py中验证网站没有返回404
url = models.URLField(verify_exists=False)
Run Code Online (Sandbox Code Playgroud)
编辑:
在django源代码中进行了一些挖掘here并且有些东西搞乱后,我仍然不确定为什么带有caps的URL导致重定向循环.
>>> from django.core.validators import URLValidator
>>> u = URLValidator(verify_exists=True)
>>> u.__call__('http://www.nacolmeia.com.br/do/Home/oferta/EnER')
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/dev/.virtualenvs/thepidb/lib/python2.7/site-packages/django/core/validators.py", line 105, in __call__
raise broken_error
ValidationError: [u'This URL appears to be a broken link.']
>>> u.__call__('http://www.nacolmeia.com.br/do/home/oferta/ener')
>>>
Run Code Online (Sandbox Code Playgroud)
引发的实际异常是HTTPError:
File "/usr/lib/python2.7/urllib2.py", line 606, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.7/urllib2.py", line 398, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 511, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 430, in error
result = self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 370, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 606, in http_error_302
return self.parent.open(new, timeout=req.timeout)
File "/usr/lib/python2.7/urllib2.py", line 398, in open
response = meth(req, response)
File "/usr/lib/python2.7/urllib2.py", line 511, in http_response
'http', request, response, code, msg, hdrs)
File "/usr/lib/python2.7/urllib2.py", line 430, in error
result = self._call_chain(*args)
File "/usr/lib/python2.7/urllib2.py", line 370, in _call_chain
result = func(*args)
File "/usr/lib/python2.7/urllib2.py", line 596, in http_error_302
self.inf_msg + msg, headers, fp)
HTTPError: HTTP Error 302: The HTTP server returned a redirect error that would lead to an infinite loop.
The last 30x error message was:
Found
>>>
Run Code Online (Sandbox Code Playgroud)
好像它与cookies有关,但我无法提供一个好的解释,我会把它留给其他人.
如果您不想关闭验证但不关心URL的大小写,则可能有效的解决方法是覆盖表单的clean_field方法.
def clean_your_url_field(self):
return self.cleaned_data['your_url_field'].lower()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10045 次 |
| 最近记录: |