Skip to content

Commit

Permalink
Deployed 68a37df with MkDocs version: 1.6.1
Browse files Browse the repository at this point in the history
  • Loading branch information
dunossauro committed Oct 7, 2024
1 parent 2316549 commit 9352ba4
Show file tree
Hide file tree
Showing 7 changed files with 71 additions and 70 deletions.
38 changes: 19 additions & 19 deletions 01/index.html

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions 04/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2276,10 +2276,10 @@ <h3 id="criando-uma-fixture-para-interacoes-com-o-banco-de-dados">Criando uma Fi
<p><code>table_registry.metadata.create_all(engine)</code>: cria todas as tabelas no banco de dados de teste antes de cada teste que usa a fixture <code>session</code>.</p>
</li>
<li>
<p><code>Session(engine)</code>: cria uma sessão <code>Session</code> para que os testes possam se comunicar com o banco de dados. Por conta do <code>yield</code> a sessão é sempre renovada após cada teste.</p>
<p><code>Session(engine)</code>: cria uma sessão <code>Session</code> para que os testes possam se comunicar com o banco de dadosvia <code>engine</code>.</p>
</li>
<li>
<p><code>yield Session()</code>: fornece uma instância de Session que será injetada em cada teste que solicita a fixture <code>session</code>. Essa sessão será usada para interagir com o banco de dados de teste.</p>
<p><code>yield session</code>: fornece uma instância de Session que será injetada em cada teste que solicita a fixture <code>session</code>. Essa sessão será usada para interagir com o banco de dados de teste.</p>
</li>
<li>
<p><code>table_registry.metadata.drop_all(engine)</code>: após cada teste que usa a fixture <code>session</code>, todas as tabelas do banco de dados de teste são eliminadas, garantindo que cada teste seja executado contra um banco de dados limpo.</p>
Expand Down Expand Up @@ -2365,7 +2365,7 @@ <h2 id="eventos-do-orm">Eventos do ORM</h2>
A[Hook - before_insert] --&gt; B[insert]
end</code></pre>
<p>Um <em>hook</em> é basicamente uma função python que registramos como um evento no sqlalchemy. Nesse caso, como queremos um evento de insert, devemos fornecer o modelo que queremos que seja atrelado ao evento:</p>
<div class="language-py highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Código de exemplo</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1">1</a></span>
<div class="language-python highlight"><table class="highlighttable"><tr><th colspan="2" class="filename"><span class="filename">Código de exemplo</span></th></tr><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"><a href="#__codelineno-10-1">1</a></span>
<span class="normal"><a href="#__codelineno-10-2">2</a></span>
<span class="normal"><a href="#__codelineno-10-3">3</a></span>
<span class="normal"><a href="#__codelineno-10-4">4</a></span>
Expand Down Expand Up @@ -2921,7 +2921,7 @@ <h2 id="conclusao">Conclusão</h2>
<span class="md-icon" title="Última atualização">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">5 de outubro de 2024</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">6 de outubro de 2024</span>
</span>


Expand Down
9 changes: 5 additions & 4 deletions 07/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -1968,6 +1968,7 @@
<li>Deixando em <code>fast_zero/security.py</code> somente as validações de senha</li>
<li>Remover constantes usados em código (<code>SECRET_KEY</code>, <code>ALGORITHM</code> e <code>ACCESS_TOKEN_EXPIRE_MINUTES</code>) usando a classe Settings do arquivo <code>fast_zero/settings.py</code> que já temos e movendo para variáveis de ambiente no arquivo <code>.env</code></li>
<li>Criar routers específicos para rotas que tratam das funcionalidades de usuários e para as rotas de autenticação</li>
<li>Criação de um modelo pydantic para querys</li>
</ul>
<details class="tip">
<summary>Caso prefira ver a aula em vídeo</summary>
Expand Down Expand Up @@ -2677,7 +2678,7 @@ <h2 id="refinando-a-definicao-de-rotas-com-annotated">Refinando a Definição de
<h2 id="parametros-de-query-via-pydantic">Parâmetros de query via Pydantic</h2>
<p>Agora que conhecemos o tipo <code>Annotated</code>, podemos introduzir um novo conceito para as querystrings. No endpoint de listagem, estamos passando parâmetros específicos na URL para paginar a quantidade de objetos.</p>
<p>Com <code>skip</code> e <code>offset</code>. Reduzindo a quantidade de objetos na resposta:</p>
<div class="language-py highlight"><span class="filename">fast_zero/routers/users.py</span><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="nd">@app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">UserList</span><span class="p">)</span>
<div class="language-python highlight"><span class="filename">fast_zero/routers/users.py</span><pre><span></span><code><span id="__span-18-1"><a id="__codelineno-18-1" name="__codelineno-18-1" href="#__codelineno-18-1"></a><span class="nd">@app</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'/'</span><span class="p">,</span> <span class="n">response_model</span><span class="o">=</span><span class="n">UserList</span><span class="p">)</span>
</span><span id="__span-18-2"><a id="__codelineno-18-2" name="__codelineno-18-2" href="#__codelineno-18-2"></a><span class="k">def</span> <span class="nf">read_users</span><span class="p">(</span>
</span><span id="__span-18-3"><a id="__codelineno-18-3" name="__codelineno-18-3" href="#__codelineno-18-3"></a><span class="hll"> <span class="n">skip</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span><span class="p">,</span> <span class="n">session</span><span class="p">:</span> <span class="n">Session</span> <span class="o">=</span> <span class="n">Depends</span><span class="p">(</span><span class="n">get_session</span><span class="p">)</span>
</span></span><span id="__span-18-4"><a id="__codelineno-18-4" name="__codelineno-18-4" href="#__codelineno-18-4"></a><span class="p">):</span>
Expand All @@ -2686,15 +2687,15 @@ <h2 id="parametros-de-query-via-pydantic">Parâmetros de query via Pydantic</h2>
</span></code></pre></div>
<p>Embora isso não seja efetivamente um problema, parâmetros de <code>offset</code> e <code>limit</code> são bastante genéricos e podem ser usados em qualquer endpoint que precisar de paginação.</p>
<p>Uma boa pratica de organização é seria um modelo do pydantic especializado em filtros, como:</p>
<div class="language-py highlight"><span class="filename">fast_zero/schemas.py</span><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="k">class</span> <span class="nc">FilterPage</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
<div class="language-python highlight"><span class="filename">fast_zero/schemas.py</span><pre><span></span><code><span id="__span-19-1"><a id="__codelineno-19-1" name="__codelineno-19-1" href="#__codelineno-19-1"></a><span class="k">class</span> <span class="nc">FilterPage</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
</span><span id="__span-19-2"><a id="__codelineno-19-2" name="__codelineno-19-2" href="#__codelineno-19-2"></a> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
</span><span id="__span-19-3"><a id="__codelineno-19-3" name="__codelineno-19-3" href="#__codelineno-19-3"></a> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">100</span>
</span></code></pre></div>
<p>Dessa forma, qualquer endpoint que precisar paginar resultados podem se beneficiar desse modelo.</p>
<h3 id="implementacao-de-querystrings-via-pydantic">Implementação de querystrings via Pydantic</h3>
<p>Uma das formas de remover a declaração de todos os parâmetros explicitamente da query no endpoint é usar nosso modelo com o objeto <code>Query</code> do FastAPI.</p>
<p>Dessa forma podemos anotar o modelo do pydantic junto o objeto <code>Query</code>. Fazendo com que ele se torne um filtro:</p>
<div class="language-py highlight"><span class="filename">fast_zero/routers/users.py</span><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="hll"><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">APIRouter</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Query</span>
<div class="language-python highlight"><span class="filename">fast_zero/routers/users.py</span><pre><span></span><code><span id="__span-20-1"><a id="__codelineno-20-1" name="__codelineno-20-1" href="#__codelineno-20-1"></a><span class="hll"><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">APIRouter</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Query</span>
</span></span><span id="__span-20-2"><a id="__codelineno-20-2" name="__codelineno-20-2" href="#__codelineno-20-2"></a>
</span><span id="__span-20-3"><a id="__codelineno-20-3" name="__codelineno-20-3" href="#__codelineno-20-3"></a><span class="c1"># ...</span>
</span><span id="__span-20-4"><a id="__codelineno-20-4" name="__codelineno-20-4" href="#__codelineno-20-4"></a>
Expand Down Expand Up @@ -2981,7 +2982,7 @@ <h2 id="conclusao">Conclusão</h2>
<span class="md-icon" title="Última atualização">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">3 de outubro de 2024</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">7 de outubro de 2024</span>
</span>


Expand Down
4 changes: 2 additions & 2 deletions 09/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2287,7 +2287,7 @@ <h2 id="endpoint-de-listagem">Endpoint de listagem</h2>
<p>A combinação de diferentes parâmetros de query não só torna o endpoint mais flexível, mas também permite que os usuários obtenham os dados de que precisam de maneira mais rápida e conveniente. Isso contribui para uma melhor experiência do usuário e otimiza a interação com o banco de dados.</p>
<h3 id="o-modelo-da-query">O modelo da query</h3>
<p>Como agora temos vários parâmetros de query como <code>title</code>, <code>description</code> e <code>state</code>, podemos criar um modelo como esse:</p>
<div class="language-py highlight"><span class="filename">fast_zero/schemas.py</span><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="k">class</span> <span class="nc">FilterTodo</span><span class="p">(</span><span class="n">FilterPage</span><span class="p">):</span>
<div class="language-python highlight"><span class="filename">fast_zero/schemas.py</span><pre><span></span><code><span id="__span-13-1"><a id="__codelineno-13-1" name="__codelineno-13-1" href="#__codelineno-13-1"></a><span class="k">class</span> <span class="nc">FilterTodo</span><span class="p">(</span><span class="n">FilterPage</span><span class="p">):</span>
</span><span id="__span-13-2"><a id="__codelineno-13-2" name="__codelineno-13-2" href="#__codelineno-13-2"></a> <span class="n">title</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-13-3"><a id="__codelineno-13-3" name="__codelineno-13-3" href="#__codelineno-13-3"></a> <span class="n">description</span><span class="p">:</span> <span class="nb">str</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
</span><span id="__span-13-4"><a id="__codelineno-13-4" name="__codelineno-13-4" href="#__codelineno-13-4"></a> <span class="n">state</span><span class="p">:</span> <span class="n">TodoState</span> <span class="o">|</span> <span class="kc">None</span> <span class="o">=</span> <span class="kc">None</span>
Expand Down Expand Up @@ -2830,7 +2830,7 @@ <h2 id="conclusao">Conclusão</h2>
<span class="md-icon" title="Última atualização">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1zM12.5 7v5.2l4 2.4-1 1L11 13V7zM11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2z"/></svg>
</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">5 de outubro de 2024</span>
<span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">7 de outubro de 2024</span>
</span>


Expand Down
2 changes: 1 addition & 1 deletion search/search_index.json

Large diffs are not rendered by default.

Loading

0 comments on commit 9352ba4

Please sign in to comment.