0

我不知道为什么它不让我在 Box 上创建文件。我试图改变周围的设置,但我仍然找不到解决方案。这是我的 django 视图文件中的代码:

#from django.shortcuts import render
from django.http import HttpResponse
from rauth import OAuth2Service
import json

# Create your views here.
def access_box(request):
    CLIENT_ID = 'xxx'
    CLIENT_SECRET = 'xxx'
    box_storage = OAuth2Service(
                            name='Box',
                            client_id=CLIENT_ID,
                            client_secret=CLIENT_SECRET,
                            authorize_url='https://www.box.com/api/oauth2/authorize',
                            access_token_url='https://www.box.com/api/oauth2/token',
                            base_url='https://www.box.com/'
                            )
    redirect_uri = 'http://127.0.0.1:8000/access-box/'

    params = {          
          'redirect_uri': redirect_uri,
          'response_type': 'code',         
          }
    url = box_storage.get_authorize_url(**params)

    if request.GET:        
        if request.GET.get('code'):
            code = request.GET.get('code')   
            data = {'code': code,
                    'grant_type': 'authorization_code',
                    'redirect_uri': redirect_uri,
                    }     

            payload = {
                       'name': 'testfolder',
                       'id': '0',
                       }
            session = box_storage.get_auth_session(data=data, decoder=json.loads)
            r = session.post('https://api.box.com/2.0/folders', params=payload)
            print(r.url)
            print(r.json())
            #r = r.json()
            #html = "<html><body>request available! authentication code: {0}<p>{1}</p></body></html>".format(code, r)
            html = "<html><body>request available! authentication code: {0}</body></html>".format(code)    
            return HttpResponse(html)
        else:
            return HttpResponse("zilch!")
    else:
        html = "<html><body></h1>Allow rushdGYM access to Box.com</h1><p><a href='{0}'>Allow now</a></body></html>".format(url)    
        return HttpResponse(html)

这是我在尝试创建文件夹@Box 时收到的回复。

{u'status': 400, u'code': u'bad_request', u'request_id': u'2143252gdf3', u'context_info': {u'errors': [{u'reason': u'missing_parameter', u'message': u"'parent' is required", u'name': u'parent'}, {u'reason': u'missing_parameter', u'message': u"'name' is required", u'name': u'name'}]}, u'help_url': u'http://developers.box.com/docs/#errors', u'message': u'Bad Request', u'type': u'error'}

有什么指导方针可以引导我朝着正确的方向前进吗?

4

2 回答 2

3

首先,查看您发布的错误消息;它清楚地说明了错误是什么:

[
    {u'reason': u'missing_parameter', u'message': u"'parent' is required", u'name': u'parent'}, 
    {u'reason': u'missing_parameter', u'message': u"'name' is required", u'name': u'name'}
]

所以,你必须在你的要求中提供parentname


其次,请注意 Box API 期望有效负载是 JSON 编码并出现在正文中。

到目前为止,您将其作为请求 (GET) 参数发送,使用params参数 to session.post,您应该改用data参数。

可能还想将您的Content-Type标题设置为application/json.

于 2014-01-19T11:26:30.130 回答
0

谢谢 Thomas O。我按照你的建议使用了数据,然后将我的有效负载编码为JSON,这很有效!

我只需要改变这个:

r = session.post('https://api.box.com/2.0/folders', data=json.dumps(payload))   
于 2014-01-19T20:02:03.253 回答