"micro" framework...?

https://slides.com/superdiana/flask-pt

$whoami

Diana Rodríguez 

Google Developer Expert:

- Web Technologies            - Google Maps Platform

- Google Cloud Platform    - Firebase

Auth0 Ambassador 

Microsoft MVP: Developer Technologies 

Python Developer Advocate @ Vonage

 

🚀  https://superdi.dev

🐦  @cotufa82

 

Uma pessoa que aprende algo novo todos os dias !!

$whoami-NOT

  • Framework Agnostic

  • Weapon of Choice

  • Zero Wars/Mobs/Cults

  • Exemplos "óbvios"

🛁🧼

Flask

"Flask e um microframework de Python  que é baseado em Werkzeug, Jinja 2 e boas intenções. Através do Flask, podemos criar aplicaçoes Web e Restful com Python de uma maneira extremamente simple ".

"Microframework"

Pros!

  • Curva de aprendizagem
  • "production ready"
  • Boa gestão de rotas
  • Sessions!
  • Extensible ✅
  • Excelente documentação

Cons

  • Ninguno
  • Complexo para aplicaçoes muito grandes
  • Comunidade
  • Sem admin
  • Sem login o auth
  • Sem ORM
  • Migrações podem ser complicadas

Full
Stack
Flask!?

Rapidinho!

Contexto...

### layout.hmtl

<!DOCTYPE html>
    <html lang="en">
    <head>
    <link rel="stylesheet" href="{{ url_for('static', filename='css/materialize.min.css') }}">
    <link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
    {% block head %}{% endblock %}
    </head>
    <body>
    <header class="container-fluid">
    <nav class="teal">
        <div class="container">
        <div class="row">
        <div class="col">
        <a href="#" class="brand-logo"><i class="material-icons logo">record_voice_over</i> Scout = Nexmo + Nightscout</a>
        </div>
        </div>
        </div>
    </nav>
    </header>
    <main class="container">
        {% block content %}{% endblock %}
    </main>
    <footer class="page-footer teal">
    <div class="footer-copyright"> 
        <div class="container">
        Made By <a class="brown-text text-lighten-3">CodeON</a>
        </div>
    </div>
    </footer>
    <script language="javascript" src="{{ url_for('static', filename='js/materialize.min.js') }}"></script>
    {% block script %}{% endblock %}
    </body>
    </html>
### login.html

{% extends "layout.html" %}
  {% block head %}
  <script src="https://apis.google.com/js/platform.js" async defer></script>
  <meta name="google-signin-client_id" content="{{ client_id }}">
  {% endblock %}
  {% block content %}
  <div id="user" class="guest">Welcome guest, You need to authenticate</div>
  <div class="row">
      <div class="col s6 offset-s3">
      <div class="card blue-grey darken-1">
          <div class="card-content white-text">
          <span class="card-title">Login To Enter Scout</span>
      <p>This application is going to allow you configure some alerts to your Phone, a Favorite Phone or 5 contact Phones. If you use a nightscout device and you have your api available for external queries. You can use this server and when the glucose level is to low and to high you will receive a call to indicates the glucose level. If you not Answer the call then an sms is sent to your favorite number and other 5 contact numbers.</p>
      <div class="g-signin2" data-onsuccess="onSignIn"></div>
          </div>
      </div>
      </div>
  </div>
  <script language="javascript">
  function onSignIn(googleUser) {
      var profile = googleUser.getBasicProfile();
      if(profile.getId()!==null && profile.getId()!==undefined){
      var xhr = new XMLHttpRequest();
      xhr.open('POST', '{{ site_url|safe }}/login');
      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      xhr.onload = function() {
      console.log('Signed in as: ' + xhr.responseText);
      //Authenticated so redirect to index
      window.location = "{{ site_url|safe }}/";
      };
      xhr.send('idtoken=' + googleUser.getAuthResponse().id_token + "&username=" + profile.getName() + "&email=" + profile.getEmail());
      }
  }
  </script>
### app.py

@app.route('/login',methods=["POST"])
def login():
    try:
        token = request.form.get("idtoken")
        client_id = os.getenv("GOOGLE_CLIENT_ID")
        infoid = id_token.verify_oauth2_token(token, google.auth.transport.requests.Request(), client_id)
        if infoid['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
            raise ValueError('Wrong issuer.')
        userid = infoid['sub']
        #Here is a good place to create the session
        session["user"] = {"userid": userid, "username": request.form.get("username"), "email": request.form.get("email")}
        return userid
    except ValueError:
        return "Error"
        pass

Assim... 🤔

  • Flask é apenas para pequenos projetos?
  • Por que chamamos micro framework?
  • Você pode fazer tudo o que o Django faz?
  • Em quais casos devo usar o Flask em vez do Django?

Em conclusão...

  • Excelente opção se você está iniciando o desenvolvimento com Python, e se não ... também 😜
  • Não se limita ao desenvolvimento de aplicações simples.
  • Coloque e decole à vontade e de acordo com necessidades específicas!
  • Depois de dominar o Flask, mudar para Django será muito fácil ...
  • ... Ou talvez, não seja necessário!

Micro framework?

PRAISE YOURSELF

Resources

MUITO OBRIGADA!!

@cotufa82

https://superdi.dev

Flask: Quão "micro" framework?

By Super Diana

Flask: Quão "micro" framework?

  • 780