Skip to content

Instantly share code, notes, and snippets.

@lavesan
Last active September 29, 2019 00:29
Show Gist options
  • Save lavesan/97ec3b177f41dcb6b130c256f73a76eb to your computer and use it in GitHub Desktop.
Save lavesan/97ec3b177f41dcb6b130c256f73a76eb to your computer and use it in GitHub Desktop.
Flask

Instalando

$ pip install flask

Rodando

  1. Setar o ambiente

$ export FLASK_APP=index.py $ flask db init

1.1. Escolher ambiente de prod ou dev

No windows uso o set ao invés de export

# Ambiente de dev (roda tipo nodemon)
$ export FLASK_ENV=development

# Ambiente de prod
$ export FLASK_ENV=production
  1. Executar

$ flask run

2.1. Executar publicamente (todos ips disponíveis verão)

$ flask run --host=0.0.0.0

Adicionando rotas

from flask import Flask, request, redirect, url_for
app = Flask(__name__)

@app.route('/')
def method_name():
   # Coletando os dados do body da request
   body = request.get_json()
   return 'Alguma coisa'
   
# path variable
@app.route('/user/<username>')
def profile(username):
    return '{}\'s profile'.format(escape(username))
    
# Métodos HTTP
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        return do_the_login()
    else:
        return show_the_login_form()
        
# Redirecionar para outra rota
@app.route('/redirecionar')
def index():
    return redirect(url_for('login'))
    

Resposta de acerto

from flask import make_response, render_template, jsonify, json
app = Flask(__name__)

# Em JSON com jsnoify (jeito mais certo)
@app.route('/json')
def returnJson():
   return jsonify(username=g.user.username,
                   email=g.user.email,
                   id=g.user.id)
                   
# Em JSON manualmente
@app.route('/manually')
def returnJsonManually():
    data = make_summary()
    response = app.response_class(
        response=json.dumps(data),
        status=200,
        mimetype='application/json'
    )
    return response
    
# Em JSON utilizando dictionary
@app.route("/dictionary")
def returnJsonWithDictionary():
    return {
        "username": "Nom do usuário",
        "theme": "Tema 1",
        "image": "https://www.google.com",
    }

# Em HTML
@app.route('/html')
def returnHtml():
    # Setando o corpo para uma página HTML
    response = make_response(render_template('index.html', foo=42))
    # Setando os headers
    response.headers['X-Parachutes'] = 'parachutes are cool'
    return response

Página de erro

from flask import abort, render_template

# Alterando a página de erro 404 (por padrão é uma página preto e branco)
@app.errorhandler(404)
def page_not_found(error):
    return render_template('page_not_found.html'), 404

# Retorna mensagem de erro
@app.route('/erro')
def rotaComErro():
    return abort(401)

Log

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

Coletando o HTML para retornar

from flask import render_template

@app.route('/hello/')
@app.route('/hello/<name>')
def hello(name=None):
    return render_template('hello.html', name=name)

Criando um template HTML

Utilizo o jinja2

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello, World!</h1>
{% endif %}

Testando as rotas

with app.test_request_context():
    print(url_for('index'))
    print(url_for('login'))
    print(url_for('login', next='/'))
    print(url_for('profile', username='John Doe'))

Criando um cookie

@app.route('/')
def index():
    resp = make_response(render_template(...))
    resp.set_cookie('username', 'the username')
    return resp

Coletando um cookie

@app.route('/')
def index():
    username = request.cookies.get('username')
    # use cookies.get(key) instead of cookies[key] to not get a
    # KeyError if the cookie is missing.
Storing cookies:

flask_sqlalchemy

pip install flask_sqlalchemy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment