Python Django Views.py验证电话号码

Python Django Views.py验证电话号码,python,django,validation,Python,Django,Validation,我希望使用django phonenumber字段或其他方法,但严格来说,如果用户没有以+12125552368格式提供有效的国际电话号码,则views.py能够验证或显示错误消息,作为示例 此表单不使用models.py或forms.py,如果可能,我希望将所有内容都保存在views.py中。另外,出于安全考虑,人们不想使用JavaScript,并且出于禁用原因 Html: Views.py: 如何做到这一点 (下面是一个后续问题:)django phonenumbers使用python

我希望使用django phonenumber字段或其他方法,但严格来说,如果用户没有以+12125552368格式提供有效的国际电话号码,则views.py能够验证或显示错误消息,作为示例

此表单不使用models.py或forms.py,如果可能,我希望将所有内容都保存在views.py中。另外,出于安全考虑,人们不想使用JavaScript,并且出于禁用原因

Html:

Views.py:

如何做到这一点


(下面是一个后续问题:)

django phonenumbers
使用
python phonenumbers
。由于您希望跳过表单并直接在视图中工作,因此可以完全跳过Django包;使用Python包。根据文档,这里有一个示例:

>>导入电话号码
>>>x=电话号码。解析(“+442083661177”,无)
>>>打印(x)
国家代码:44国家编号:2083661177前导零:假
>>>类型(x)
>>>y=电话号码。解析(“020 8366 1177”,“GB”)
>>>打印(y)
国家代码:44国家编号:2083661177前导零:假
>>>x==y
真的
>>>z=电话号码。将(“00 1 650 253 2222”,“GB”)解析为从GB拨出的号码,而不是GB号码
>>>打印(z)
国家代码:1国家编号:650253222前导零:假

下面是代码中它的大致情况:

首先,安装
phonenumbers
pip安装phonenumbers


{%csrf_令牌%}
...
电话:
{%如果未验证\电话号码%}
{%else%}
{{已验证的电话号码}
{%endif%}
...
#views.py
导入电话号码
def PaymentView(请求):
...
如果request.method==“POST”:
...
phonenum_input=request.post.get('phone')
尝试:
phonenum=phonenumbers.parse(phonenum\u输入)
除phonenumbers.PhoneNumberRutils.NumberParseException外:
信息.警告(
请求,“电话号码无效。”
)
上下文={
“publishKey”:publishKey,
“选定的_成员资格”:选定的_成员资格,
“修正”:“正确”,
“客户秘密”:支付意图。客户秘密,
“STRIPE\u PUBLIC\u KEY”:settings.STRIPE\u publishible\u KEY,
“subscription\u id”:stripe\u subscription.id
}
返回渲染(请求“memberships/3d secure checkout.html”,上下文)
否则:#我们现在假设该数字有效。
update({'valid\u phone\u number':phonenum})
...
返回呈现(请求“memberships/memberships\u payment.html”,上下文)

(对于你和其他阅读本文的人来说,出于上面突出显示的原因,使用Django表单库确实会更好。请阅读Django团队的文章。也许你,meknajirta,可以利用我的代码片段来完成这项工作,然后继续遵循bruno desthuilliers的建议。发布一个后续问题,我们很乐意回答他。)lp.)

你为什么不想使用表单?它会让你的表单处理和视图变得更加清晰。实际上,没有什么理由不使用django表单。而且,一定要将这个可怕的东西拆分成可读、可管理、可测试的函数,并学会做适当的异常处理——这是一个简单的例外条款,包含两个复杂的每个电话都有数百个失败原因,然后假设失败的唯一原因是“付款已被拒绝”是你能做的最糟糕的事情。@Lain Shelvington和bruno-好的,我明白你的观点。如果你坚持,你能帮我把代码转换成使用forms.py吗?如果不能,你能帮我写代码使用django phonenumbers使用python phonenumbers使用下面给出的示例,但使用我的代码实现它吗?我遇到了问题@bruno desthuilliers我正在尝试做表单。py现在我想我做了所有的事情,但是字段没有显示在网页上。我能得到一些帮助吗?@bruno desthuilliers更新我让字段显示在网页上,但是现在表单没有提交,验证错误也没有显示在网页上。但是,是的,正如cOmnents,使用Django的表单会更容易,除非你有其他限制。谢谢你向我展示。我只是不知道如何用我的代码实现它。你能告诉我如何实现吗?我找到了这个,但我如何将它与模板中的id连接起来?@meknajirta:我更新了答案,包含了你的代码可能的草图。T他发布你的链接也有很好的例子。在你有了模板后跟随他们,查看上面的设置。哇,谢谢你这么详细的回复!我使用你的方法非常接近。不过唯一的一件事是,在网站的完全不同部分而不是表单上付款后,会显示电话号码错误消息它本身-它不会阻止付款。我如何才能在表单上显示错误消息?作为对您其他内容的响应,听起来像是一个计划。我正在尝试执行forms.py,但我遇到了问题。表单字段没有显示在网页上。我可以在这方面以及上面的views.py中获得一些帮助吗我们真的很接近吗?