无法从django中的外部API检索HTTP Post数据

时间:2015-05-23 23:23:27

标签: python django django-views

我收到错误:' str'对象没有属性'方法' 。请参阅下面的代码:

@csrf_exempt
def completepayment(request):
    varerr =''
    plist = []

    if request.method == 'POST':
        try:
            nid = request.POST['txnref']

        except MultiValueDictKeyError:
            varerr ="Woops! Operation failed due to server error. Please try again later."
            return render(request, 'uportal/main.html', {'varerr':varerr})
        # Fetching member details
        trym = Transactions.objects.get(TransRef=nid)
        amount = trym.Amount

        famt = int(amount * 100)        

        product_id = 48
        salt = '4E6047F9E7FDA5638D29FD'
        hash_object = hashlib.sha512(str(product_id)+str(nid)+str(famt))
        hashed = hash_object.hexdigest()
        url = 'https://bestng.com/api/v1/gettransaction.json?productid=pdid&transactionreference=nid&amount=famt'
        raw = urllib.urlopen(url)
        js = raw.readlines()
        #js_object = simplejson.loads(js)
        res = simplejson.dumps(js)
        for item in res:
            rcode = item[0]
            #rdesc = item[1]
            #preff = item[2]

            thisresp = completepayment(rcode)
            plist.append(thisresp)

    else:
        varerr ="Woops! Operation failed due to server error. Please try again later."

    return render(request, 'uportal/main.html', {'plist':plist, 'varerr':varerr, 'completepayment':'completepayment'})

总之,我试图接受并使用来自外部API的HTTP POST值。当我检查元素但DJANGO没有检索时,值显示。请帮忙。

这是我的urls.py

from django.conf.urls import patterns, url
from views import *
from django.views.generic import RedirectView
urlpatterns = patterns('myproject.prelude.views',
# Home:
url(r'^$', 'home', name='home'),

#login
url(r'^login/$', 'login', name='login'),
url(r'^welcome/$', 'welcome', name='welcome'),

# Registration Portal
# Registration Portal
url(r'^uportal/$', 'uportal', name='uportal'),
url(r'^uportal/ugreg/find/$', 'findmember', name='findmember'),
url(r'^uportal/ugreg/search/$', 'searchmember', name='searchmember'),
url(r'^uportal/ugreg/$', 'ugreg', name='ugreg'),
url(r'^uportal/ugreg/initiate-payment/$', 'initiatepayment', name='initiatepayment'),
url(r'^uportal/ugreg/verifypayment/$', 'verifypayment', name='verifypayment'),
url(r'^uportal/ugreg/proceedpayment/$', RedirectView.as_view(url='https://bestng.com/pay'), name='remote_admin'),
url(r'^uportal/ugreg/completepayment/$', completepayment, name='completepayment'),

谢谢

1 个答案:

答案 0 :(得分:0)

看来你的问题是请求是一个str对象而不是一个请求对象。

请制作urls.py和views.py。

为了便于阅读,让我们重写以下部分:

url    = 'https://bestng.com/api/v1/gettransaction.json'
params = '?productid={product_id}&transactionreference={nid}&amount={famt}'
raw    = urllib.urlopen(url + params.format(**locals()))

甚至,就像这样:

url     = 'https://bestng.com/api/v1/gettransaction.json'
params  = '?productid={product_id}&transactionreference={nid}&amount={famt}'
request = url + params.format(**locals())
raw     = urllib.urlopen(request)

此外,try块不是我会使用的。相反,我会使用POST dict的get方法并返回一个标志值:

nid = request.POST.get('tnxref', False)

我无法重现您遇到的错误。使用略有不同的项目级urls.py(非常简化),'completepayment'视图对我来说很好。这是urls.py。

from django.conf.urls import patterns, url
from app.views import completepayment
# The app is simply called app in my example.


urlpatterns = patterns('',
    # I remove the prefix
    url(r'^uportal/ugreg/completepayment/$', completepayment, name='completepayment'),
)
# This last parenthesis might be missing in your code.