假设你有一个网络应用程序,让我们说一个Django应用程序。
您需要从位于另一个远程网站上的javascript按钮检索数据。
喜欢这个cne在 Consulte sus Datos Registro Electoral 部分,您会看到有一个按钮可以搜索给定的数字。
附加了此功能:
<form name="formulario_rep" method="post" action="javascript:BuscaRE_CE(document.formulario_rep.nacionalidad.value, document.formulario_rep.cedula.value)">
<table class="consulta_re" cellpadding="0" cellspacing="0">
<tbody><tr>
<td colspan="2" align="center" class="titulo_consulta_re">Consulte sus Datos</td>
</tr>
<tr>
<td colspan="2" align="center" class="subtitulo_consulta_re">Registro Electoral</td>
</tr>
<tr>
<td width="20" align="right">
<select name="nacionalidad" class="formulario">
<option value="V">V</option>
<option value="E">E</option>
</select>
</td>
<td width="32" align="left">
<input name="cedula" type="text" class="formulario" maxlength="8" size="8" value="Cédula" onfocus="javascript:clear_textbox2();" onblur="javascript:Validar_Numero(document.formulario_rep.cedula);">
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Buscar" class="boton">
</td>
</tr>
<tr><td height="8"></td></tr>
</tbody></table>
</form>
但是,我需要从Django模板加载它,假设我的模板中有另一个表单,当一个人在我的字段上放一个数字时,我需要从我的应用程序执行相同的请求,到远程表单,看看数字是否有效,有没有办法做到这一点?
修改
我有这个代码验证来自其他网站的数据:
def validate_vat(government_id, is_company):
if government_id[0] == 'J' or government_id[0] == 'V':
# Check on SENIATs page
# TODO: What happens if this site is offline??
url = 'http://contribuyente.seniat.gob.ve/getContribuyente/getrif?rif='
s = requests.get(url + government_id).text
if s.startswith('450'):
raise ValidationError(_('ERROR: ' + s))
elif is_company:
raise ValidationError(_('Companies must provide VAT Numbers'))
else:
raise ValidationError(_("RIFs should start with either a "
"'J' or a 'V'"))
return True
如果您转到this address并输入例如V147452787,那么网址将为new url
你看到那里显示的数据,我从django调用这个并且没有问题验证该字段,现在,我需要做同样的事情,但是使用来自cne网站的那个按钮。
我找到了这个网址:
Cne's empty url如果您添加this
等数据然后你会看到一些信息,这就是我正在寻找的......
答案 0 :(得分:1)
您必须更改验证功能。在第一个示例中,为了验证是否有结果,您在响应开头使用了字符串'450'来表示错误匹配。对于新网站,有更多的东西被发回给你,所以这只是测试差异的问题。
字符串'no se encuentra inscrita'的存在表示查找失败。示例代码如下。您可以将此摘录保存为文件,并在进行更改并集成到代码之前从控制台运行。
from __future__ import print_function
import requests
def validate(nationality, id):
baseurl = 'http://www.cne.gob.ve/web/registro_electoral/ce.php'
query_params = '?nacionalidad=%s&cedula=%s' % (nationality, id)
url = baseurl + query_params
print(url + ': ', end='')
if nationality == 'V' or nationality == 'E':
s = requests.get(url).text
if 'no se encuentra inscrita' not in s:
return True
return False
print(validate('V', '13253891'))
print(validate('V', '132538911'))
print(validate('V', 'jhiw300'))
print(validate('E', '13253891'))
print(validate('E', '132538911'))
print(validate('E', 'jhiw300'))
print(validate('X', '13253891'))
print(validate('X', '132538911'))
print(validate('X', 'jhiw300'))