Diario de Python | #10. Color Choice: Los colores

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

Los modelos están armados, por lo cual trabajar ahora con el admin iba a ser mucho más sencillo. El primer paso era crear una serie de colores y luego simular unos votos.

Armé el Verde, Rojo y Azul:

Luego definí los votos, siendo cada uno único por usuario:

Acto seguido, me di cuenta de que algo se me pasó por alto: el modelo de color no tiene ningun valor hexadecimal. Por lo tanto, si armo un color “Negro”, sin definir “#000” no hay forma de colorearlo en pantalla.

Migración de Color

En principio definí el campo con un default en blanco (#FFF), porque sino los registros creados previamente no iban a tener un valor asignado. Otra opción era definir el campo como null, pero eso no tendría sentido dado que cada color debía tener obligatoriamente un nombre y un valor hexadecimal:

<span>hexa</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>7</span><span>,</span> <span>default</span><span>=</span><span>"#FFF"</span><span>)</span>
<span>hexa</span> <span>=</span> <span>models</span><span>.</span><span>CharField</span><span>(</span><span>max_length</span><span>=</span><span>7</span><span>,</span> <span>default</span><span>=</span><span>"#FFF"</span><span>)</span>
hexa = models.CharField(max_length=7, default="#FFF")

Enter fullscreen mode Exit fullscreen mode

Por otro lado, en admin.py definí una clase para armar las columnas que quería visualizar tomando los campos de name y hexa.

<span>class</span> <span>ColorAdmin</span><span>(</span><span>admin</span><span>.</span><span>ModelAdmin</span><span>):</span>
<span>list_display</span> <span>=</span> <span>(</span><span>'name'</span><span>,</span> <span>'hexa'</span><span>)</span>
<span>admin</span><span>.</span><span>site</span><span>.</span><span>register</span><span>(</span><span>Vote</span><span>)</span>
<span>admin</span><span>.</span><span>site</span><span>.</span><span>register</span><span>(</span><span>Color</span><span>,</span> <span>ColorAdmin</span><span>)</span>
<span>class</span> <span>ColorAdmin</span><span>(</span><span>admin</span><span>.</span><span>ModelAdmin</span><span>):</span>
    <span>list_display</span> <span>=</span> <span>(</span><span>'name'</span><span>,</span> <span>'hexa'</span><span>)</span>


<span>admin</span><span>.</span><span>site</span><span>.</span><span>register</span><span>(</span><span>Vote</span><span>)</span>
<span>admin</span><span>.</span><span>site</span><span>.</span><span>register</span><span>(</span><span>Color</span><span>,</span> <span>ColorAdmin</span><span>)</span>
class ColorAdmin(admin.ModelAdmin): list_display = ('name', 'hexa') admin.site.register(Vote) admin.site.register(Color, ColorAdmin)

Enter fullscreen mode Exit fullscreen mode

Dando como resultado:

Definir los valores hexa

Podría abrir Photoshop, Paint o algún editor online de colores, elegir uno y copiarme el valor hexadecimal. Pero me daba pereza, así que decidí hacer algo que me llevaría más trabajo: implementar una librería de colores.

Así descubrí a django-colorfield. Luego de instalarla con pip, modifiqué mi modelo:

<span>from</span> <span>colorfield.fields</span> <span>import</span> <span>ColorField</span>
<span>(...)</span>
<span>hexa</span> <span>=</span> <span>ColorField</span><span>(</span><span>max_length</span><span>=</span><span>7</span><span>,</span> <span>default</span><span>=</span><span>"#FFF"</span><span>)</span>
<span>from</span> <span>colorfield.fields</span> <span>import</span> <span>ColorField</span>

<span>(...)</span>

<span>hexa</span> <span>=</span> <span>ColorField</span><span>(</span><span>max_length</span><span>=</span><span>7</span><span>,</span> <span>default</span><span>=</span><span>"#FFF"</span><span>)</span>
from colorfield.fields import ColorField (...) hexa = ColorField(max_length=7, default="#FFF")

Enter fullscreen mode Exit fullscreen mode

Ahora, por ejemplo si quiero crear un color nuevo, tengo esta belleza en django-admin:

Ahora puedo definir todos los colores que quiero sin salirme del administrador.

En el próximo episodio…

Con los colores definidos, ya podemos votar uno. El problema es que la API nos deja emitir votos a cualquier usuario, y eso es una brecha de seguridad enorme.

En el próximo episodio de esta apasionante historia, veremos cómo me meto en las entrañas del módulo de autenticación y tokens para generar sesiones con DRF.

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 | #10. Color Choice: Los colores

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
I try to give up the dream just a dream.
努力了才叫梦想
评论 抢沙发

请登录后发表评论

    暂无评论内容