Flask-Dropbox
Dropbox Python SDK support for Flask applications.
Requirements
- Python 2.6 or 2.7
- Flask 0.8 or higher
- Dropbox Python SDK 1.4 or higher
Installation
$ pip install Flask-Dropbox
License
Flask-Dropbox
is licensed under the BSD License.
Configuration
SECRET_KEY
REQUIRED. As token would be stored in Flask's session instance, you need to configure secret key for your application.
DROPBOX_KEY
REQUIRED. App key from Dropbox developer site.
DROPBOX_SECRET
REQUIRED. Secret key from Dropbox developer site.
DROPBOX_ACCESS_TYPE
REQUIRED. Should be 'dropbox'
or 'app_folder'
as configured for
your app.
DROPBOX_CALLBACK_URL
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.
DROPBOX_CALLBACK_TEMPLATE
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.
DROPBOX_LOGIN_REDIRECT
Page to redirect to after user successfully logged in with Dropbox account. By
default: /
.
DROPBOX_LOGOUT_REDIRECT
Page to redirect to after user logged out from authenticated Dropbox session.
By default: /
.
DROPBOX_CACHE_STORAGE
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.
Usage
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>'
Bugs, feature requests?
If you found some bug in Flask-Dropbox
library, please, add new issue to
the project's GitHub issues.
ChangeLog
0.3
- 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
0.2
- 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.
0.1.5
- 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.
0.1.4
- Add
dropbox
library as install requirement insetup.py
. - Update project short description.
0.1.3
- Fix handling templates while installing via setup.py
0.1.2
- Add support of Dropbox SDK 1.4.1
0.1.1
- Check that access token is the instance of
oauth.OAuthToken
class if it exists in session.
0.1
- Initial release.