Revision: 61043
Updated Code
at November 26, 2012 06:53 by denakitan
Updated Code
from flask import Flask, url_for, request, render_template, flash, redirect, abort, session, escape app = Flask(__name__) # setting the secret_key generate with: >>> import os; os.urandom(24) app.secret_key = '\x1eo\xc0\xd84\x8c\xfez\xbc\x0eQ\xc2\xb4we\xa8p\r\x13\\\x88\x97\x8e\xb9' # route() decorator is used to bind a function to a URL @app.route('/') def index(): return '<b>Index Page</b>' @app.route('/hello') def helloWorld(): return '<b>Hello World!</b>' # route() accepts URLs with variable parts @app.route('/hello/<user>') def helloUser(user): return '<b>Hello %s!</b>' % user # rules may also be specified using a converter. Converter types: # int accepts integers # float like int but for floating point values # path like the default but also accepts slashes @app.route('/hello/<user>/<int:greetingsCount>') def helloUserN(user, greetingsCount): greetingsCount = abs(greetingsCount) if greetingsCount > 3: app.logger.warning('Warning! The greetings count %d is above the limit (3).', greetingsCount) returnValue = '' while greetingsCount > 0: returnValue += '<b>Hello %s!</b><br />' % user greetingsCount -= 1; return returnValue # building URLs using the url_for() function. Unknows variables are appended to the URL as query parameters @app.route('/urls') def printUrls(): builtUrls = '' builtUrls += url_for('index') + '<br />' builtUrls += url_for('helloWorld') + '<br />' builtUrls += url_for('helloWorld', user='user') + '<br />' builtUrls += url_for('helloUser', user='user') + '<br />' builtUrls += url_for('helloUserN', user='user', greetingsCount='3') + '<br />' return builtUrls # example on how to access the request object # To access parameters submitted in the URL (?key=value) you can use the args attribute: # searchword = request.args.get('key', '') # by default, a route only answers to GET requests, but it can be changed, as below: @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': if isCredentialsValid(request.form['username'], request.form['password']): # escape() used here does escaping for you. Can be used when you are not using the template engine session['username'] = escape(request.form['username']) return redirect(url_for('ghibliIndex')) else: app.logger.error('Invalid username and/or password provided.') flash('Invalid username and/or password.', 'error') # the code below this is executed if the request method # was GET or the credentials were invalid return render_template('login.html') def isCredentialsValid(username, password): if username == 'user' and password == 'pass': return True return False @app.route('/logout') def logout(): # remove the username from the session if it's there session.pop('username', None) return redirect(url_for('ghibliIndex')) # example of how to deal with templates @app.route('/ghibli') @app.route('/ghibli/<name>') def ghibliIndex(name=None): return render_template('ghibli.html', name=name, ghibliLogoUrl=url_for('static', filename='ghibli.gif')) # example of how to deal with templates @app.route('/upload', methods=['GET', 'POST']) def upload(): if request.method == 'POST': f = request.files['filename']; # to save the file, the line below could be used # f.save('/var/www/uploads/uploaded_file.txt') # f.filename contains the name of the file on the client, before it was uploaded, # but it should not be trusted. If it is wanted to use it, pass it though the # secure_filename function # from werkzeug import secure_filename # f.save('/var/www/uploads/' + secure_filename(f.filename)) flash('Content of the uploaded file:', 'message') messages = [] lines = f.readlines() for line in lines: flash(line, 'message') # example of how to use the redirect() function to guide use to an endpoint return redirect(url_for('upload')) return render_template('upload.html') # useless route to illustrate the usage of abort() function @app.route('/forbidden') def forbidden(): abort(401) @app.errorhandler(404) def page_not_found(error): app.logger.debug('Reached page not found handler.') return render_template('page_not_found.html', makkuroUrl=url_for('static', filename='makkuro.jpg')), 404 # this function could be written using the make_response() function # resp = make_response(render_template('page_not_found.html', makkuroUrl=url_for('static', filename='makkuro.jpg')), 404) # resp.headers['X-Something'] = 'A value' # return resp if __name__ == '__main__': # app.run() # Enabling debug mode - NEVER USE IT IN PRODUCTION # Almost mandatory in development environments because, if enabled, the server will # reload itself on code changes app.run(debug=True) # or # app.debug = True # app.run() # Making the built-in server externally visible # It is disabled by default because in debugging mode a user of the application # can execute arbitrary Python code on the machine # Enable it if debug is disabled or users on the network can be trusted # app.run(host='0.0.0.0')
Revision: 61042
Updated Code
at November 24, 2012 08:16 by denakitan
Updated Code
from flask import Flask, url_for, request, render_template app = Flask(__name__) # route() decorator is used to bind a function to a URL @app.route('/') def index(): return '<b>Index Page</b>' @app.route('/hello') def helloWorld(): return '<b>Hello World!</b>' # route() accepts URLs with variable parts @app.route('/hello/<user>') def helloUser(user): return '<b>Hello %s!</b>' % user # rules may also be specified using a converter. Converter types: # int accepts integers # float like int but for floating point values # path like the default but also accepts slashes @app.route('/hello/<user>/<int:greetingsCount>') def helloUserN(user, greetingsCount): greetingsCount = abs(greetingsCount) returnValue = '' while greetingsCount > 0: returnValue += '<b>Hello %s!</b><br />' % user greetingsCount -= 1; return returnValue # building URLs using the url_for() function. Unknows variables are appended to the URL as query parameters @app.route('/urls') def printUrls(): builtUrls = '' builtUrls += url_for('index') + '<br />' builtUrls += url_for('helloWorld') + '<br />' builtUrls += url_for('helloWorld', user='user') + '<br />' builtUrls += url_for('helloUser', user='user') + '<br />' builtUrls += url_for('helloUserN', user='user', greetingsCount='3') + '<br />' return builtUrls # example on how to access the request object # To access parameters submitted in the URL (?key=value) you can use the args attribute: # searchword = request.args.get('key', '') # by default, a route only answers to GET requests, but it can be changed, as below: @app.route('/login', methods=['GET', 'POST']) def login(): error = None if request.method == 'POST': if isCredentialsValid(request.form['username'], request.form['password']): return 'Logged on.' else: error = 'Invalid username and/or password.' # the code below this is executed if the request method # was GET or the credentials were invalid return render_template('login.html', error=error) def isCredentialsValid(username, password): if username == 'user' and password == 'pass': return True return False # example of how to deal with templates @app.route('/ghibli') @app.route('/ghibli/<name>') def ghibliIndex(name=None): return render_template('ghibli.html', name=name, ghibliLogoUrl=url_for('static', filename='ghibli.gif')) if __name__ == '__main__': # app.run() # Enabling debug mode - NEVER USE IT IN PRODUCTION # Almost mandatory in development environments because, if enabled, the server will # reload itself on code changes app.run(debug=True) # or # app.debug = True # app.run() # Making the built-in server externally visible # It is disabled by default because in debugging mode a user of the application # can execute arbitrary Python code on the machine # Enable it if debug is disabled or users on the network can be trusted # app.run(host='0.0.0.0')
Revision: 61041
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at November 24, 2012 00:22 by denakitan
Initial Code
from flask import Flask, url_for, request, render_template app = Flask(__name__) # route() decorator is used to bind a function to a URL @app.route('/') def index(): return '<b>Index Page</b>' @app.route('/hello') def helloWorld(): return '<b>Hello World!</b>' # route() accepts URLs with variable parts @app.route('/hello/<user>') def helloUser(user): return '<b>Hello %s!</b>' % user # rules may also be specified using a converter. Converter types: # int accepts integers # float like int but for floating point values # path like the default but also accepts slashes @app.route('/hello/<user>/<int:greetingsCount>') def helloUserN(user, greetingsCount): greetingsCount = abs(greetingsCount) returnValue = '' while greetingsCount > 0: returnValue += '<b>Hello %s!</b><br />' % user greetingsCount -= 1; return returnValue # building URLs using the url_for() function. Unknows variables are appended to the URL as query parameters @app.route('/urls') def printUrls(): builtUrls = '' builtUrls += url_for('index') + '<br />' builtUrls += url_for('helloWorld') + '<br />' builtUrls += url_for('helloWorld', user='user') + '<br />' builtUrls += url_for('helloUser', user='user') + '<br />' builtUrls += url_for('helloUserN', user='user', greetingsCount='3') + '<br />' return builtUrls # by default, a route only answers to GET requests, but it can be changed, as below: @app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': return 'Executing the login...' else: return 'Showing the login form...' # example of how to deal with templates @app.route('/ghibli') @app.route('/ghibli/<name>') def ghibliIndex(name=None): return render_template('ghibli.html', name=name, ghibliLogoUrl=url_for('static', filename='ghibli.gif')) if __name__ == '__main__': app.run() # Enabling debug mode - NEVER USE IT IN PRODUCTION # Almost mandatory in development environments because, if enabled, the server will # reload itself on code changes # app.run(debug=True) # or # app.debug = True # app.run() # Making the built-in server externally visible # It is disabled by default because in debugging mode a user of the application # can execute arbitrary Python code on the machine # Enable it if debug is disabled or users on the network can be trusted # app.run(host='0.0.0.0')
Initial URL
http://flask.pocoo.org/docs/quickstart/
Initial Description
Snippet showing a simple Flask application to illustrate the topics covered in the "Quickstart".
Initial Title
Flask - The Basics
Initial Tags
python, web
Initial Language
Python