Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法从django中的外部API检索HTTP Post数据_Python_Django_Django Views - Fatal编程技术网

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

Python 无法从django中的外部API检索HTTP Post数据,python,django,django-views,Python,Django,Django Views,我收到错误:“str”对象没有属性“method”。请参见下面的我的代码: @csrf_exempt def completepayment(request): varerr ='' plist = [] if request.method == 'POST': try: nid = request.POST['txnref'] except MultiValueDictKeyError:

我收到错误:“str”对象没有属性“method”。请参见下面的我的代码:

@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接受并使用HTTPPOST值。值在我检查元素但DJANGO未检索时显示。请帮忙

这是我的URL.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'),

谢谢

您的问题似乎是请求是str对象而不是请求对象

请生成url.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)

我无法重现您所遇到的错误。使用稍微不同的项目级URL.py(非常简化),“completepayment”视图对我来说很好。这里是url.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.

您还可以在其他什么地方使用completepayment?url.py看起来像什么?您可以发布完整的回溯吗?您是否正在尝试将产品id传递到此处的URL?gettransaction.json?productid=pdidSir,以下是请求的完整跟踪:你好,Ben,谢谢你的时间,你的提示非常有用,但这实际上不是问题所在。错误发生在:nid=request.POST['txnref']。我无法从外部API读取post数据,更不用说在下面的答案中使用nid值了。非常感谢你抽出时间。请帮助我,这将是非常感谢。请提供url.py和views.py,以便读者可以进一步帮助。嗨,本,我已经这样做了。最初的帖子是my views.py,我现在刚刚添加了我的url.py。如果请求是字符串对象而不是请求对象,请说明如何使视图接受字符串对象。我正在尝试接受来自外部API的post请求。当我在浏览器中检查元素->网络->参数时,我可以看到发布的值。多亏了洛蒂,我无法在Python3.4上使用django 1.7重现错误。我使用了一个不同的url.py,因为我没有剩下的视图,但您所做的似乎是有意义的,我看不出它不起作用的原因。