'str'对象没有'get'属性。

15

我正在Django中进行Braintree集成。 我已经按照这个指南进行操作:

但是,我遇到了错误'str' object has no attribute 'get'

Views.py

from django.shortcuts import render, render_to_response
from django.http.response import HttpResponse
import braintree
braintree.Configuration.configure(braintree.Environment.Sandbox,
                              "privatekey here",
                              "merchant key here",
                              "public key here")

def form(request):
    return render_to_response('braintree.html')

def create_transaction(request):
    if request.method == 'POST':
        print request.POST.get("number")       
        result = braintree.Transaction.sale({
         "amount": "1000.00",
         "credit_card": {
        "number": request.POST.get("number"),
        "cvv": request.POST.get("cvv"),
        "expiration_month": request.POST.get("month"),
        "expiration_year": request.POST.get("year")
    },
    "options": {
        "submit_for_settlement": True
    }
})

        if result.is_success:
            return "<h1>Success! Transaction ID: {0}</h1>".format(result.transaction.id)
        else:            
            return "<h1>Error: {0}</h1>".format(result.message)
    else:      
        return HttpResponse('no post')

例外情况是

Environment:


Request Method: POST
Request URL: http://lcoalhost/create_transaction

Django Version: 1.6.2
Python Version: 2.7.5
Installed Applications:
 ('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in   get_response 201.response = middleware_method(request, response)
File "/usr/local/lib/python2.7/dist-packages/django/middleware/clickjacking.py" in process_response 30.  if response.get('X-Frame-Options', None) is not None:

Exception Type: AttributeError at /create_transaction
Exception Value: 'str' object has no attribute 'get'

1
异常的完整回溯是什么?在Django错误视图中,点击链接以获取回溯的文本视图。 - Martijn Pieters
http://dpaste.com/1750746/ - user2224250
我在 Braintree 工作。如果以下答案无法解决您的问题,您可以随时联系我们的支持团队寻求更多帮助。 - agf
@agf:如果可能的话,你能否给我发送比官方网站更好的文档? - user2224250
@user2224250 在这种情况下,问题似乎是由Django和Flask之间的差异引起的(我们在指南中使用Flask)-- 在Flask中,您可以从视图返回字符串;在Django中,您需要返回“HTTPResponse”对象。如果您有更多问题,我们的支持团队(可通过我其他评论中的URL联系)应该能够提供帮助。 - agf
2个回答

31

您在POST块内直接返回字符串,需要将其包装在HttpResponse中。


3
我不理解你的评论。你的编辑没有显示将那些返回的字符串包装在HttpResponse中。 - Daniel Roseman

-3
打开 Django 中间件的 clickjacking.py 文件并更改以下代码。
first import in what way you have to give response 
like in my case I have to return httpredirect so i import 
from django.http import HttpResponseRedirect
if isinstance(response, str):
        response = HttpResponseRedirect(response)
add this code into process_response of clickjacking.py

这是错误的建议。 - boatcoder
这不是一个好的解决方案,更新框架可能会导致项目失败。 - Ruby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接