Diario de Python | #7. Color Choice: armando las rutas

Dario de Python (18 Part Series)

1 Diario de Python | #1. Bajada a tierra
2 Diario de Python | #2. Mi propio plan Full Stack
14 more parts…
3 Diario de Python | #3. Pycharm, el mejor IDE para Python
4 Diario de Python | #4. Probando FastAPI para desarrollar APIs
5 Diario de Python | #5. Proyecto: Color Choice
6 Diario de Python | #6. Primeros pasos con Color Choice
7 Diario de Python | #7. Color Choice: armando las rutas
8 Diario de Python | #8. Issuu PDF Downloader
9 Diario de Python | #9. Color Choice: Volantazo
10 Diario de Python | #10. Color Choice: Los colores
11 Diario de Python | #11. Color Choice: Flujo de la API
12 Diario de Python | #12. Color Choice: Autenticación por Token
13 Diario de Python | #13. Color Choice: emitir votos
14 Diario de Python | #14. Color Choice: día productivo
15 Diario de Python | #15. Combinando Django y React
16 Diario de Python | #16. Patrón Builder
17 Diario de Python | #17. un paseo por Flake8
18 Diario de Python | #18. Un curso de Automatizar cosas aburridas

Ahora que terminé la parte de definir los modelos y la BD, voy a armar los endpoints correspondientes para cada entidad.

Pero antes de continuar, decidí cambiar un poco la arquitectura de las clases para separarlas por sección.

Nueva Arquitectura

Las carpetas quedaron de la siguiente manera:

- color
-- color_model.py: la clase Color que estaba en models.py
- vote
-- vote_model.py: la clase Vote que estaba en models.py
- color
-- color_model.py: la clase Color que estaba en models.py
- vote
-- vote_model.py: la clase Vote que estaba en models.py
- color -- color_model.py: la clase Color que estaba en models.py - vote -- vote_model.py: la clase Vote que estaba en models.py

Enter fullscreen mode Exit fullscreen mode

Por supuesto, en create_db.py tuve que modificar los imports:

<span>import</span> <span>color</span>
<span>import</span> <span>vote</span>
<span>import</span> <span>color</span>
<span>import</span> <span>vote</span>
import color import vote

Enter fullscreen mode Exit fullscreen mode

Se que esto puede parecer rebuscado si lo comparamos con la solución anterior, pero con el tiempo, a medida que creemos nuevos componentes, notarán que es una buena decisión.

Rutas

En principio voy a crear dos archivos de rutas (color_routes.py y vote_routes.py) los cuales contendrán un simple “hello” y se enlazarán a nuestras rutas en main:

<span>from</span> <span>color.color_routes</span> <span>import</span> <span>color_router</span>
<span>from</span> <span>vote.vote_routes</span> <span>import</span> <span>vote_router</span>
<span>app</span><span>.</span><span>include_router</span><span>(</span><span>color_router</span><span>)</span>
<span>app</span><span>.</span><span>include_router</span><span>(</span><span>vote_router</span><span>)</span>
<span>from</span> <span>color.color_routes</span> <span>import</span> <span>color_router</span>
<span>from</span> <span>vote.vote_routes</span> <span>import</span> <span>vote_router</span>

<span>app</span><span>.</span><span>include_router</span><span>(</span><span>color_router</span><span>)</span>
<span>app</span><span>.</span><span>include_router</span><span>(</span><span>vote_router</span><span>)</span>
from color.color_routes import color_router from vote.vote_routes import vote_router app.include_router(color_router) app.include_router(vote_router)

Enter fullscreen mode Exit fullscreen mode

El import llama a “color.color_routes” porque existe un color_routes.py dentro de la carpeta color, la cual también contiene color_model.py. ¿Empiezan a notar la importancia de tener el código separado por entidades?

Ahora bien, dentro de color_routes.py estoy importando a color_router, el cual es mi objeto enrutador que compartiré con app. Veamos que tengo dentro:

<span>from</span> <span>fastapi</span> <span>import</span> <span>APIRouter</span><span>,</span> <span>status</span>
<span>color_router</span> <span>=</span> <span>APIRouter</span><span>(</span>
<span>prefix</span><span>=</span><span>'/color'</span><span>,</span>
<span>tags</span><span>=</span><span>[</span><span>'color'</span><span>]</span>
<span>)</span>
<span>@</span><span>color_router</span><span>.</span><span>get</span><span>(</span><span>'/'</span><span>,</span> <span>status_code</span><span>=</span><span>status</span><span>.</span><span>HTTP_200_OK</span><span>)</span>
<span>async</span> <span>def</span> <span>home</span><span>():</span>
<span>return</span> <span>"hello api color!"</span>
<span>from</span> <span>fastapi</span> <span>import</span> <span>APIRouter</span><span>,</span> <span>status</span>

<span>color_router</span> <span>=</span> <span>APIRouter</span><span>(</span>
    <span>prefix</span><span>=</span><span>'/color'</span><span>,</span>
    <span>tags</span><span>=</span><span>[</span><span>'color'</span><span>]</span>
<span>)</span>


<span>@</span><span>color_router</span><span>.</span><span>get</span><span>(</span><span>'/'</span><span>,</span> <span>status_code</span><span>=</span><span>status</span><span>.</span><span>HTTP_200_OK</span><span>)</span>
<span>async</span> <span>def</span> <span>home</span><span>():</span>
    <span>return</span> <span>"hello api color!"</span>
from fastapi import APIRouter, status color_router = APIRouter( prefix='/color', tags=['color'] ) @color_router.get('/', status_code=status.HTTP_200_OK) async def home(): return "hello api color!"

Enter fullscreen mode Exit fullscreen mode

El atributo “prefix” será el encargado de darnos una url del estilo “http://127.0.0.1:8000/color” y sobre los tags, veremos posteriormente la utilidad de este atributo.

Como ven, también cambia el get que antes era “app”, porque nuestro enrutador ahora es color_router.

Por cierto, el “@” implica que se trata de un Decorator (o decorador), una funcionalidad de Python que permite generar código adicional en tiempo de ejecución. Más adelante los estudiaremos en detalle.

Ahora que ya tenemos implementado nuestros enrutadores, podemos probarlos corriendo el servidor y llamando a “http://127.0.0.1:8000/color” o “http://127.0.0.1:8000/vote“, dado que hicimos lo mismo en los dos. Esto dará como respuesta un “hello api color!” o “hello api vote!” según la ruta que utilicemos.

Conclusiones

Ahora que tenemos las rutas preparadas, lo siguiente será generar los endpoints correspondientes para cada entidad; los cuales harán consultas a nuestra base de datos mediante un objeto Session. Ya lo veremos en la próxima entrega.

Dario de Python (18 Part Series)

1 Diario de Python | #1. Bajada a tierra
2 Diario de Python | #2. Mi propio plan Full Stack
14 more parts…
3 Diario de Python | #3. Pycharm, el mejor IDE para Python
4 Diario de Python | #4. Probando FastAPI para desarrollar APIs
5 Diario de Python | #5. Proyecto: Color Choice
6 Diario de Python | #6. Primeros pasos con Color Choice
7 Diario de Python | #7. Color Choice: armando las rutas
8 Diario de Python | #8. Issuu PDF Downloader
9 Diario de Python | #9. Color Choice: Volantazo
10 Diario de Python | #10. Color Choice: Los colores
11 Diario de Python | #11. Color Choice: Flujo de la API
12 Diario de Python | #12. Color Choice: Autenticación por Token
13 Diario de Python | #13. Color Choice: emitir votos
14 Diario de Python | #14. Color Choice: día productivo
15 Diario de Python | #15. Combinando Django y React
16 Diario de Python | #16. Patrón Builder
17 Diario de Python | #17. un paseo por Flake8
18 Diario de Python | #18. Un curso de Automatizar cosas aburridas

原文链接:Diario de Python | #7. Color Choice: armando las rutas

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
Sometimes a winner is just a dreamer that never gives up.
有时候,成功者只是坚持梦想不放弃的人
评论 抢沙发

请登录后发表评论

    暂无评论内容