从Django连接到API端点并返回数据

时间:2018-01-25 22:55:51

标签: python django django-forms

我有一个django表单,目前检查应用程序可以提供的区域中的邮政编码。我想将它与postcodes.io API端点集成,以检查实际的邮政编码是否有效。

端点如下:

api.postcodes.io/postcodes/:postcode/validate

这是我的表单代码:

from django import forms

class PostCodeForm (forms.Form):
    pcode = forms.CharField()

    def clean_pcode(self):
        permitted = {'gu15','GF34','FG34','BT25'}
        pcode = self.cleaned_data['pcode'].lower()
        if not pcode[:4] in (permitted):
            raise forms.ValidationError("Apologies, but does not currently deliver to you postcode.")
        return pcode

我在如何与Django的API端点集成方面遇到困难。任何帮助都非常感谢。

提前致谢。

1 个答案:

答案 0 :(得分:0)

你可以用很棒的python包requests来完成。

import requests

def clean_pcode(self):
    pcode = self.cleaned_data['pcode'].lower()
    url = 'https://api.postcodes.io/postcodes/{}/validate'.format(pcode)
    r = requests.get(url)
    is_correct = r.json()['result']
    if not is_correct:
        raise forms.ValidationError("Apologies, but does not currently deliver to you postcode.")
    return pcode

当然这是非常基本的,您还应该检查响应代码并处理错误。