Frage

I don't know why it's not letting me create a file at Box. I tried to change the settings around, but I still can't find the solution. Here is the code inside my django's view file:

#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)

This is the response I received trying to create a folder @ 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'}

Any guidelines to steer me in the right direction?

War es hilfreich?

Lösung

First, look at the error message you posted; it clearly states what the errors are:

[
    {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'}
]

So, you'll have to supply parent and name in your request.


Second, note that the Box API expects the payload to be JSON encoded and present in the body.

As of now, you're sending it as a request (GET) parameter, using the params argument to session.post, you should use the data argument instead.

Might also want to set your Content-Type header to application/json.

Andere Tipps

Thanks Thomas O. I used data as you suggested, and then encoded my payload to JSON, and that worked!

I only had to change this:

r = session.post('https://api.box.com/2.0/folders', data=json.dumps(payload))   
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top