Add support of Dropbox API to the Flask applications.
- Python 2.6 or 2.7
- Flask 0.8 or higher
- Dropbox Python SDK 1.4 or higher
$ pip install Flask-Dropbox
Flask-Dropbox
is licensed under the BSD License.
REQUIRED. As token would be stored in Flask's session instance, you need to configure secret key for your application.
REQUIRED. App key from Dropbox developer site.
REQUIRED. Secret key from Dropbox developer site.
REQUIRED. Should be 'dropbox'
or 'app_folder'
as configured for your app.
By default, you don't need to provide this setting, cause Flask-Dropbox
will setup callback URL automaticly usign current host and type of request, but if you don't trust us, you could to rewrite this setting manually.
Template to be used for showing errors while trying to process oAuth callback from Dropbox API. By default: 'dropbox/callback.html'
.
Next boolean vars could be sent to the template:
error_oauth_token
- Dropbox API didn't return oAuth token.error_not_equal_tokens
- oAuth token from Dropbox API is not equal to request token stored in Flask session.error_response
- Dropbox API returnsErrorResponse
instance. Also actual exception aserror
var would be sent to the template too.
Page to redirect to after user successfully logged in with Dropbox account. By default: /
.
Page to redirect to after user logged out from authenticated Dropbox session. By default: /
.
app.py
:
from flask import Flask
from flask.ext.dropbox import Dropbox, DropboxBlueprint
import settings
app = Flask(__name__)
app.config.from_object(settings)
dropbox = Dropbox(app)
dropbox_blueprint = DropboxBlueprint(dropbox)
app.register_blueprint(dropbox_blueprint, url_prefix='/dropbox')
settings.py
:
SECRET_KEY = 'some-secret-key'
DROPBOX_KEY = 'dropbox-app-key'
DROPBOX_SECRET = 'dropbox-app-secret'
DROPBOX_ACCESS_TYPE = 'app_folder'
views.py
:
from flask import url_for
from werkzeug import secure_filename
from app import app, dropbox
@app.route('/')
def home():
return u'Click <a href="%s">here</a> to login with Dropbox.' % \
dropbox.login_url
@app.route('/success/<path:filename>')
def success(filename):
return u'File successfully uploaded as /%s' % filename
@app.route('/upload', methods=('GET', 'POST'))
def upload():
if not dropbox.is_authenticated:
return redirect(url_for('home'))
if request.method == 'POST':
file_obj = request.files['file']
if file_obj:
client = dropbox.client
filename = secure_filename(file.filename)
# Actual uploading process
result = client.put_file('/' + filename, file_obj.read())
path = result['path'].lstrip('/')
return redirect(url_for('success', filename=path))
return u'<form action="" method="post">' \
u'<input name="file" type="file">' \
u'<input type="submit" value="Upload">' \
u'</form>'
If you found some bug in Flask-Dropbox
library, please, add new issue to the project's GitHub issues.
- Check that access token is the instance of
oauth.OAuthToken
class if it exists in session.
- Initial release.