Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Flask: Es muss ja nicht immer Django sein

Flask: Es muss ja nicht immer Django sein

Wann immer die Rede von Python und Web Frameworks ist, dann kommt man um Django nicht mehr herum. Django hat sich in den letzten Jahren als ein sehr ernst zu nehmender Konkurrent unter den Web Frameworks, nicht nur für Python etabliert. Aber es gibt Aufgaben, die einfacher, schneller und effizienter mit Flask zu lösen sind.

Ernesto Rico Schmidt

April 05, 2014
Tweet

More Decks by Ernesto Rico Schmidt

Other Decks in Programming

Transcript

  1. Wie alles begann Aprilscherz 2010 http://denied.immersedcode.org/ Eine base-64 encodierte zip-Datei

    (Jinja2 und Werkzeug) Screencast: Blog in f¨ unf Minuten Marketing beats Quality – Armin Ronacher
  2. Flask heute Armin Ronacher Python 2.6/2.7 und Python 3.3/3.4 http://flask.pocoo.org/

    Version 0.10.1, 14. Juni 2013 2k Zeilen Code 4k Zeilen Tests ¨ uber 40 extensions 306 Seiten Dokumentation 2k Forks auf GitHub https://github.com/mitsuhiko/flask
  3. Eine Flask-Applikation # hello.py from flask import Flask app =

    Flask(__name__) @app.route(’/’) def hello_world(): return ’Hello World!’ if __name__ == ’__main__’: app.run()
  4. Routing Mit Variablen @app.route(’/user/<username>’) def show_user_profile(username): return ’User %s’ %

    username @app.route(’/post/<int:post_id>’) def show_post(post_id): return ’Post %d’ % post_id
  5. HTTP Methoden from flask import request @app.route(’/login’, methods=[’GET’, ’POST’]) def

    login(): if request.method == ’POST’: do_the_login() else: show_the_login_form() ’GET’, ’HEAD’, ’POST’, ’PUT’, ’DELETE’ und ’OPTIONS’
  6. Templates # hello.py from flask import Flask, render_template app =

    Flask(__name__) @app.route(’/hello/’) @app.route(’/hello/<name>’) def hello(name=None): return render_template(’hello.html’, name=name) if __name__ == ’__main__’: app.run()
  7. Templates <!-- templates/hello.html --> <!doctype html> <title>Hello from Flask</title> {%

    if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello World!</h1> {% endif %}
  8. Request-Objekt from flask import request @app.route(’/login’, methods=[’POST’, ’GET’]) def login():

    error = None if request.method == ’POST’: if valid_login(request.form[’username’], request.form[’password’]): return log_the_user_in(request.form[’username’]) else: error = ’Invalid username/password’ return render_template(’login.html’, error=error)
  9. Cookies # lesen from flask import request @app.route(’/’) def index():

    username = request.cookies.get(’username’) # speichern from flask import make_response @app.route(’/’) def index(): response = make_response(render_template(...)) response.set_cookie(’username’, ’the username’) return response
  10. Redirects und Fehler from flask import abort, redirect, url_for @app.route(’/’)

    def index(): return redirect(url_for(’login’)) @app.route(’/login’) def login(): abort(401) this_is_never_executed()
  11. JSON # json.py from flask import json from datetime import

    datetime @app.route(’/_get_current_user’) def get_current_user(): return json.jsonify(username=g.user.username, email=g.user.email, id=g.user.id, now=datetime.now())
  12. Weiterf¨ uhrende Links und B¨ ucher Armin Ronacher’s Thoughts and

    Writings: http://lucumr.pocoo.org/ HTTP Request & Response Service: http://httpbin.org/ Source: https://github.com/kennethreitz/httpbin Flask: http://flask.pocoo.org/ The Flask Mega-Tutorial: http://blog.miguelgrinberg.com/post/ the-flask-mega-tutorial-part-i-hello-world Flask Web Development Buch: http://flaskbook.com/