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

65º Python Floripa | Frasko - Desenvolvendo seu...

Avatar for Geraldo Castro Geraldo Castro
August 27, 2022
24

65º Python Floripa | Frasko - Desenvolvendo seu próprio nano web framework

Links:
- apresentação no YouTube: https://youtu.be/b6Ow1eBy7RI?t=1252
- repositorio: https://bit.ly/exageraldo-na-pythonfloripa-65

Avatar for Geraldo Castro

Geraldo Castro

August 27, 2022

Transcript

  1. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 Frasko = ( # Versão "Se vira nos 30" Geraldo Castro - Python Floripa 27/agosto/2022 ‘Desenvolvendo seu próprio’ ‘nano web framework’ ) apresentação.py me.py
  2. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 apresentação.py me.py ‘Mossoró/RN → Florianópolis/SC’, geraldo_castro = [ ] ‘backend na maioria do tempo’, ‘diabético’, ‘vegetariano’, ‘amo camisas de evento’, ‘amo eventos’,
  3. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 me.py qrcode.png # https://bit.ly/exageraldo-na-pythonfloripa-65
  4. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 qrcode.png sumário.py 00: (razões and considerações and referências), conteúdo = { } 01: ((web app and web server) and wsgi), 02: (dependências), 03: (request and response), 04: ((rotas simples and rotas parametrizadas) or 404), 05: (class based decorators and rotas duplicadas),
  5. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 sumário.py prévia.py
  6. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 prévia.py razões_considerações_referências.py # conteúdo[00] ( razões and considerações and referências )
  7. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 razões_considerações_referências.py razões.py ‘por que criar meu próprio _____ ?’, por_que_criar_um_framework = [ ] ‘por razões de aprendizado/estudo’, # nosso caso ‘por precisar de algo muito específico’, ‘por que não?’,
  8. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 razões.py considerações.py ‘familiaridade com python’, considerações_iniciais = [ ] ‘conhecimento mínimo sobre web’, ‘já ter utilizado algum framework web’, ‘nano < micro’, # Frasko < Flask
  9. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 considerações.py referências.py ‘How to write a Python web framework (free/blog post version)’: { ‘autor’: ‘Jahongir Rahmonov’, ‘link’: link_um, }, referências = { … ‘How to write a Python web framework (paid/testdriven.io version)’: { ‘autor’: ‘Jahongir Rahmonov’, ‘link’: link_dois, },
  10. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 considerações.py referências.py ‘Let's build a web framework! PyCon 2017’: { ‘autor’: ‘Jacob Kaplan Moss’, ‘link’: link_tres, }, … … ‘Let’s Build A Web Server [Part 2]’: { ‘autor’: ‘Ruslan Spivak’, ‘link’: link_quatro, },
  11. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 considerações.py referências.py ‘WGSI Tutorial’: { ‘autor’: ‘Clodoaldo Pinto Neto’, ‘link’: link_cinco, }, … } ‘[EXTRA] Build Your Own X’: { ‘autor’: ‘comunidade/open source’, ‘link’: link_seis, },
  12. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 referencias.py server_app_wsgi.py # conteúdo[01] ( (web_server and web_app) and wsgi )
  13. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 server_app_wsgi.py server.py ‘espera pacientemente por uma requisição (Request)’, web_server = [ ] ‘recebe um request do cliente e envia para um "PythonApp"’, ‘espera pelo processamento da resposta (Response)’, ‘envia a resposta para o cliente de volta’, # exemplos: gunicorn, uwsgi
  14. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 server.py app.py ‘recebe a requisição enviada pelo web server’, web_app = [ ] ‘executa alguns comandos definido em regras definidas’, ‘monta a resposta e devolve para o web server’, # exemplos: flask, django, bottle
  15. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py wsgi.py ‘quem desenvolve o app não quer lidar com o server (vice versa)’, problema = [ ] ‘incompatibilidade entre web app e web server -> limitação’, ‘criar adaptadores entre o app e o server (mod_python - Apache)’,
  16. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py wsgi.py ‘Web Server Gateway Interface’, wsgi = [ … ‘não é um servidor, um módulo python, um framework, uma API ou qualquer tipo de software’, ‘é uma especificação de comunicação entre o servidor e a aplicação’, ‘ambos os lados devem aplicar as especificações’, ‘PEP 3333’, # link
  17. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 wsgi.py wsgi_um.png
  18. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 wsgi_um.png wsgi.py ‘server: deve chamar o objeto app com os parâmetros environ e start_response ("application(environ, start_response)")’, … ] ‘o body deve ser um interavel (Iterable)’, ‘server: deve chamar a função start_response com o status_code e headers_response ("start_response(status_code, headers_response)") antes de retornar o body para o server’,
  19. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 wsgi.py wsgi_dois.png
  20. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 wsgi_dois.png dependências.py # conteúdo[02] ( dependências )
  21. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 dependências.py requirements.txt # desenvolvimento webob # Request & Response wrapper parse # ajuda na parametrização das rotas # testar/rodar gunicorn
  22. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 requirements.txt request_response.py # conteúdo[03] ( request and response )
  23. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 request_response.py app.py
  24. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  25. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py environ.py
  26. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 environ.py app.py # melhorando nossa interface
  27. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  28. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py rotas_simples_parametrizadas.py # conteúdo[04] ( rotas simples and rotas parametrizadas )
  29. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 rotas_simples_parametrizadas.py app.py # rotas simples
  30. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  31. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py app.py # rotas definindo o verbo
  32. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  33. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py app.py # parametrizando as rotas
  34. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  35. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py class_decorators_rotas_duplicadas.py # conteúdo[05] ( class based decorators and rotas duplicadas )
  36. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 class_decorators_rotas_duplicadas.py app.py # decorando classes
  37. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 app.py frasko.py
  38. 1 2 3 4 5 6 7 8 9 10

    11 12 13 14 frasko.py obrigado_perguntas.py ( obrigado and perguntas ) Slide Template: Slidesgo.com # https://bit.ly/exageraldo-na-pythonfloripa-65