From 9d95127f127bb8825f0b4013f99b4b1b1b1d578d Mon Sep 17 00:00:00 2001 From: dunossauro Date: Thu, 9 Jan 2025 19:07:20 -0300 Subject: [PATCH] Melhorias de legibilidade em tags nas aulas 02 e 03 --- aulas/02.md | 10 +++++----- aulas/03.md | 6 +++++- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/aulas/02.md b/aulas/02.md index 0c20b552..1636e288 100644 --- a/aulas/02.md +++ b/aulas/02.md @@ -232,7 +232,7 @@ def read_root(): return {'message': 'Olá Mundo!'} ``` -Quando realizamos a requisição via navegador, o verbo padrão é o GET. Por isso, obtemos na tela a mensagem `{'message': 'Olá Mundo!'}`. +Quando realizamos a requisição via navegador, o verbo padrão é o GET. Por isso, obtemos na tela a mensagem `#!python {'message': 'Olá Mundo!'}`. ![Captura de tela do navegador acessando "http://127.0.0.1"](assets/02/nagevador_com_localhost.png){: .center .shadow } @@ -312,7 +312,7 @@ Assim, podemos ir ao terceiro pilar do desenvolvimento web que são os conteúdo #### HTML !!! example "Sobre o código apresentado nesse tópico!" - Todo o código apresentado neste tópico é apenas um exemplo básico do uso de HTML com FastAPI e não será utilizado no curso. No entanto, é extremamente importante mencionar este tópico. + Todo o código apresentado neste tópico é apenas um exemplo básico do uso de HTML com FastAPI e não será utilizado no curso. No entanto, é extremamente importante mencionar este tópico. **Para uma visão um pouco mais aprofundada, temos um [tópico no apêndice B](/apendices/b_proximos_passos/#templates){:target="_blank"} focado em html + css.** Embora este tópico abranja apenas HTML puro, o FastAPI pode utilizar [Jinja](https://jinja.palletsprojects.com/){:target="_blank"} como sistema de templates para uma aplicação mais eficiente. @@ -322,9 +322,9 @@ Assim, podemos ir ao terceiro pilar do desenvolvimento web que são os conteúdo A documentação do FastAPI também oferece um tópico focado em [Templates](https://fastapi.tiangolo.com/pt/advanced/templates/){:target="_blank"}. -O terceiro pilar fundamental da web é o HTML, sigla para *Hypertext Markup Language*. Trata-se da linguagem de marcação padrão usada para criar e estruturar páginas na internet. Quando acessamos um site, o que vemos em nossos navegadores é o resultado da interpretação do HTML. Esta linguagem utiliza uma série de 'tags' – como ``, ``, ``, `

`, `

` e outras – para definir a estrutura e o conteúdo de uma página web. +O terceiro pilar fundamental da web é o HTML, sigla para *Hypertext Markup Language*. Trata-se da linguagem de marcação padrão usada para criar e estruturar páginas na internet. Quando acessamos um site, o que vemos em nossos navegadores é o resultado da interpretação do HTML. Esta linguagem utiliza uma série de 'tags' – como `#!html `, `#!html `, `#!html `, `#!html

`, `#!html

` e outras – para definir a estrutura e o conteúdo de uma página web. -A beleza do HTML reside em sua simplicidade e eficácia. Mais do que uma linguagem, é uma forma de organizar e apresentar informações na web. Cada tag tem um propósito específico: `

` a `

` são usadas para títulos e subtítulos; `

` para parágrafos; `` para links; enquanto `

` e `` auxiliam na organização e estilo do conteúdo. Juntas, essas tags formam a espinha dorsal de quase todas as páginas da internet. +A beleza do HTML reside em sua simplicidade e eficácia. Mais do que uma linguagem, é uma forma de organizar e apresentar informações na web. Cada tag tem um propósito específico: `#!html

` a `#!html

` são usadas para títulos e subtítulos; `#!html

` para parágrafos; `#!html ` para links; enquanto `#!html

` e `#!html ` auxiliam na organização e estilo do conteúdo. Juntas, essas tags formam a espinha dorsal de quase todas as páginas da internet. Se nosso objetivo fosse apresentar um HTML simples, poderíamos usar a classe de resposta `HTMLResponse`: @@ -565,7 +565,7 @@ Com essa abordagem, ao iniciar o servidor (`task run`) e acessar a Swagger UI em ![Captura de tele do Swagger UI mostrando o json schema de "Message" que definimos no FastAPI](assets/02/captura_de_tela_do_swagger_mostrando_o_schema_de_message.png){: .center .shadow } -Além disso, na seção de `Responses`, temos um exemplo claro da saída esperada do endpoint: `{"message": "string"}`. Isso ilustra como a API irá responder, especificando que o campo obrigatório `"message"` será retornado com um valor do tipo `"string"`. +Além disso, na seção de `Responses`, temos um exemplo claro da saída esperada do endpoint: `#!python {"message": "string"}`. Isso ilustra como a API irá responder, especificando que o campo obrigatório `"message"` será retornado com um valor do tipo `"string"`. ## Exercício diff --git a/aulas/03.md b/aulas/03.md index bb97b62c..ab7ad2a7 100644 --- a/aulas/03.md +++ b/aulas/03.md @@ -484,6 +484,7 @@ Nosso teste da rota GET tem que verificar se a recuperação dos usuários está Com as rotas POST e GET implementadas, agora podemos criar e recuperar usuários. Implementaremos a próxima operação CRUD: Update. + !!! warning "Coisas que devemos considerar sobre este e os próximos testes" Note que para que esse teste seja executado com sucesso o teste do endpoint de `POST` tem que ser executado antes. Isso é problemático no mundo dos testes. Pois cada teste deve estar isolado e não depender da execução de nada externo a ele. @@ -491,13 +492,16 @@ Com as rotas POST e GET implementadas, agora podemos criar e recuperar usuários O mecanismo que fará com que os testes não interfiram em outros e sejam independentes será introduzido na [aula 05](05.md/#testando-o-endpoint-post-users-com-pytest-e-fixtures). + ## Implementando a Rota PUT A rota PUT é usada para atualizar as informações de um usuário existente. No contexto do CRUD, o verbo HTTP PUT está associado à operação "Update". Se a solicitação for bem-sucedida, a rota deve retornar o status HTTP 200 (OK). No entanto, se o usuário solicitado não for encontrado, deveríamos retornar o status HTTP 404 (Não Encontrado). Uma característica importante do verbo PUT é que ele é direcionado a um recurso em específico. Nesse caso, estamos direcionando a alteração a um `user` em específico na base de dados. O identificador de `user` é o campo `id` que estamos usando nos modelos do Pydantic. Nesse caso, nosso endpoint deve receber o identificador de quem será alterado. -Para fazer essa identificação do recurso na [URL](02.md/#url){:target="_blank"} usamos a seguinte combinação `/caminho/recurso`. Mas, como o recurso é dinâmico, ele deve ser enviado pelo cliente. Fazendo com que o valor tenha que ser uma variável. Dentro do FastAPI, as variáveis de recursos são descritas dentro de {}, como `{user_id}`. Fazendo com que o caminho completo do nosso endpoint seja `#!python '/users/{user_id}'`. Da seguinte forma: +Para fazer essa identificação do recurso na [URL](02.md/#url){:target="_blank"} usamos a seguinte combinação `/caminho/recurso`. Mas, como o recurso é dinâmico, ele deve ser enviado pelo cliente. Fazendo com que o valor tenha que ser uma variável. + +Dentro do FastAPI, as variáveis de recursos são descritas dentro de {}, como `{user_id}`. Fazendo com que o caminho completo do nosso endpoint seja `#!python '/users/{user_id}'`. Da seguinte forma: ```python title="fast_zero/app.py" hl_lines="5 6" --8<-- "aulas/codigos/03/fast_zero/app.py:69:83"