Dropbox Python SDK support for 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: /
.
.. versionadded:: 0.3
Where to place account info, Dropbox client and Dropbox session instances. In
0.2 and lower all this info stored in flask_dropbox.Dropbox
instance, which
isn't thread safe, but from 0.3 all these values stored to flask.g
. If you
need custom storage you can override this setting with object or string which
would be imported.
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.register_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, redirect, request 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.
- Flask 0.10 support
- Store account info, Dropbox client and session in thread-safe
flask.g
storage instead offlask_dropbox.Dropbox
instance - Introduce
DROPBOX_CACHE_STORAGE
setting
- Add
init_app
method toDropbox
extension class. - Do not send
dropbox
instance for initialization ofDropboxBlueprint
class. - Use
current_app.extensions['dropbox']
statement in views for getting initializedDropbox
instance.
- Add
register_blueprint
shortcut to initializeDropboxBlueprint
with default values in one line. - Move
Dropbox
class fromflask.ext.dropbox.utils
toflask.ext.dropbox.extension
module. But mainly, it wouldn't affected to your code if you usedfrom flask.ext.dropbox import Dropbox
statements.
- Add
dropbox
library as install requirement insetup.py
. - Update project short description.
- Fix handling templates while installing via setup.py
- Add support of Dropbox SDK 1.4.1
- Check that access token is the instance of
oauth.OAuthToken
class if it exists in session.
- Initial release.