diff --git a/flask/app.py b/flask/app.py index 1d2e356c..a837c030 100644 --- a/flask/app.py +++ b/flask/app.py @@ -949,6 +949,9 @@ class Flask(_PackageBoundObject): # a tuple of only `GET` as default. if methods is None: methods = getattr(view_func, 'methods', None) or ('GET',) + if isinstance(methods, string_types): + raise TypeError('Allowed methods have to be iterables of strings, ' + 'for example: @app.route(..., methods=["POST"])') methods = set(methods) # Methods that should always be added diff --git a/flask/testsuite/basic.py b/flask/testsuite/basic.py index d95a4c37..71a1f832 100644 --- a/flask/testsuite/basic.py +++ b/flask/testsuite/basic.py @@ -85,6 +85,13 @@ class BasicFunctionalityTestCase(FlaskTestCase): self.assert_equal(rv.status_code, 405) self.assert_equal(sorted(rv.allow), ['GET', 'HEAD', 'OPTIONS', 'POST']) + def test_disallow_string_for_allowed_methods(self): + app = flask.Flask(__name__) + with self.assert_raises(TypeError): + @app.route('/', methods='GET POST') + def index(): + return "Hey" + def test_url_mapping(self): app = flask.Flask(__name__) def index():