Python 无法从django中的外部API检索HTTP Post数据
我收到错误:“str”对象没有属性“method”。请参见下面的我的代码: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:
@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,因为我没有剩下的视图,但您所做的似乎是有意义的,我看不出它不起作用的原因。