EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.656
Tiene un minuto para contarle sobre Django :v

Django (gdh/ˈdʒæŋɡoʊ/jang-goh) es un framework de aplicaciones web gratuito y de código abierto (open source) escrito en Python. Un framework web es un conjunto de componentes que te ayudan a desarrollar sitios web más fácil y rápidamente.

Nota del traductor a chileno: Es un marco de trabajo para hacer pagina web mas rápido, ergo mucho ya viene listo, y la idea es no volver a repetir código

Asumo que ya instalaron Django. No me voy a detener en esto pero si tienen dudas las guias de digitalocean siempre me sirvieron.

Lo primero es tratar de entender el modelo MVC o MVT que si bien tienen diferencias en la practica es casi lo mismo a ojos de un niuwbie como yo.

mvc.jpg

teniendo claro esto, que lo dudo :v, por favor descarguense el editor que uds prefieran, Atom, Sublime, Notepad++ , PyCharm , Visual Studio Code.

Personalmente les recomiendo los ultimos 2. Pycharm es de pago, pero si uds tienen correo de alguna institución de educación les pasan licencia y se debe renovar todos los años. :itsfree

Si no, aplicar VS Code es mi segunda alternativa. Con estos addons o plugins instalados.

upload_2019-7-30_9-47-43.png


Con django instalado, vscode instalado y configurado, podemos empezar a meter manos en el código.

1) Crear proyecto. Esto lo pueden hacer desde cmd, consola, etc
PHP:
python django-admin startproject "NOMBRE_DEL_PROYECTO"
Lo anterior sin las comillas. (la palabra python puede o no ir, depende del SO algunos lo solicitan otros no) Y este es el resultado.
La estructura o esqueleto standar de una aplicación Django.

HkTFjRe.png


2) Luego creamos las APPS, o algo así como los módulos. En este caso vamos a crear dos módulos llamados, LIBROS Y AUTORES.

En consola, y ya dentro de la carpeta C9, escribimos

PHP:
python manage.py startapp LIBROS
python manage.py startapp AUTORES

Y la estructura queda así:

EQ1DLJv.png


1MmvJsq.png



Ahora lo importante:

¿Miremos la pagina?

En la consola tipear:

PHP:
python manage.py runserver

Vayan a su navegador favorito ( moderno ) y visiten el link:

127.0.0.1:8000

434rVD9.png


Creo que son esto ya tenemos algo funcionando para no aburrirnos :hotdog
 
Última modificación:

EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.656
Link a :idolo Github, por mientras

https://github.com/landersoft/C9.git

Como esta cosa responde al modelo-vista-controlador, los 3 archivos claves en cada modulo, son: -models.py, el modelo para los amigos,
views.py, las vista. Mucho de lo que pasa en el "backstage" ocurre acá.
urls.py es el controlador, es como un paco que dirige el transito que a la vez te dice como llegar a la dirección que buscas.

Dicho lo anterior:

Vamos de definir un modelo, que en la practica es una clase con sus atributos, esta clase a su vez va a ser una tabla en la base de datos, pero eso lo vamos a ver un poco mas adelante.

Editamos AUTORES/models.py

PHP:
class Autor(models.Model):
    rut = models.IntegerField()
    nombre = models.CharField(max_length=50)

    def __str__(self):
        return (self.nombre)

una simple clase con rut y nombre. Si se fijan no he definido si hay alguna clave primaria. En estos casos cuando migramos (proximo paso) django crea un campo por defecto ID que es autoincremental y ademas PK.

En python un DEF es la definición de una función. En este caso significa que cuando se llame a un objeto de tipo Autor, nos va a retornar el nombre por defecto.

¿Recuerdan que les dije que django entregaba muchas cosas hechas, para hacer todo mas rápido?
Si? Que bueno. Les cuento que django incluye por defecto un panel de control y para ingresar a el hay que crear el superusuario pero para esto hay que crear las tablas en la base de datos, django por defecto nos provee SQLite, puede ser otra, Mysql, Postgre, etc, por el momento nos vale la que trae.
Así que...

PHP:
python manage.py makemigrations

El comando anterior "prepara" la sentencia sql para luego ser ejecutada con:

PHP:
python manage.py migrate

Ahora si podemos crear al super usuario:

PHP:
python manage.py createsuperuser

Y seguimos los pasos que nos indica.

Luego volvemos a correr el servidor con:

PHP:
python manage.py runserver


Ahora si navegamos a :

127.0.0.1/admin vemos un login para ingresar al panel de administración.

b5Re6fO.png


Y el panel propiamente tal.

VNZaexf.png


Ok, pero y donde carajos tenemos a los autores? :circulos

Ok, hay que hacer algo mas, registrar el modulo o app en los settings para que nuestra aplicación la reconozca

hJJWzrM.png


y modificar el AUTORES/admin.py

PHP:
from .models import Autor


admin.site.register(Autor)

Y listo! Tenemos el modelo en el panel de admin y podemos agregar , borrar , actualizar autores.

*Nota del autor, recuerden hacer un PYTHON MANAGE.PY MAKEMIGRATIONS Y LUEGO PYTHON MANAGE.PY MIGRATE

qff4rut.png




jhLQS25.png
 
Última modificación:
Upvote 0

NIN

Opteron Fanboy
Se incorporó
5 Septiembre 2005
Mensajes
1.447
Estimado,

Entiendo que con Python puedes desarrollar paginas web. Además puedes controlar las GPIO de una Raspberry.

Consulta, Es posible enviar instrucciones a las GPIO desde una pagina web?? Tienes algun material que me pueda orientar en este propósito??

Saludos.
 
Upvote 0

EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.656
Estimado,

Entiendo que con Python puedes desarrollar paginas web. Además puedes controlar las GPIO de una Raspberry.

Consulta, Es posible enviar instrucciones a las GPIO desde una pagina web?? Tienes algun material que me pueda orientar en este propósito??

Saludos.

No, no tengo info porque nunca lo ví de esa forma. Pero tengo una RPI y lo voy a intentar mas adelante. Creo saber mas o menos por donde buscar.

EDIT:

En la vista (views.py) hay que retornar algo así, por ejemplo

PHP:
return subprocess.run(['python', 'path_to_script//prog17.py', post_from_form], shell=False, timeout=1800)
 
Última modificación:
Upvote 0

NIN

Opteron Fanboy
Se incorporó
5 Septiembre 2005
Mensajes
1.447
con eso llamas una función auxiliar? en ese caso sería posible armar una pagina web, escribir una rutina para cada GPIO y luego asignarla a un botón interactivo por ejemplo.

Pregunto esto porque tengo una RPI con una interface board con relés a 5V y lo que quiero es activar cada relé desde un portal de administración.

PHP:
import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BCM)

# GPIO | Relay
#--------------
# 26 01
# 19 02
# 13 03
# 06 04
# 12 05
# 16 06
# 20 07
# 21 08

# initiate list with pin gpio pin numbers

gpioList = [26, 19, 13, 06, 12, 16, 20, 21]

for i in gpioList:
GPIO.setup(i, GPIO.OUT)
GPIo_Output(i, GPIO.HIGH)

# Sleep time variables

sleepTimeShort = 0.2
sleepTimeLong = 0.1

# MAIN LOOP =====
# ===============

try:
while True:
for i in gpioList:
GPIo_Output(i, GPIO.LOW)
time.sleep(sleepTimeShort);
GPIo_Output(i, GPIO.HIGH)
time.sleep(sleepTimeLong);


# End program cleanly with keyboard
except KeyboardInterrupt:
print " Quit"

# Reset GPIO settings

GPIO.cleanup()
#!/usr/bin/python

Por lo que entiendo en este script de prueba, incluyes las GPIO a la rutina y luego asignas valores low o high, 0 o 1. Supongo que esas funciones low o high puedes incluirlas en rutinas como un botón, un temporizador o como respuesta a un valor de un sensor.
 
Última modificación:
Upvote 0

unreal4u

I solve problems.
Miembro del Equipo
ADMIN
Se incorporó
2 Octubre 2005
Mensajes
13.601
Estimado,

Entiendo que con Python puedes desarrollar paginas web. Además puedes controlar las GPIO de una Raspberry.

Consulta, Es posible enviar instrucciones a las GPIO desde una pagina web?? Tienes algun material que me pueda orientar en este propósito??

Saludos.

Sí, es posible, en mi caso lo hice con PHP, pero tanto en Python como en cualquier otro lenguaje debe ser muy similar.

Ejemplo 1: El más simple: controlo el estado de un sensor magnético y dependiendo de ese estado abro o cierro el relay. La idea es que al abrir la puerta, la luz se prenda automáticamente. Al cerrarse la puerta, la luz se apaga:
https://github.com/unreal4u/rpi3-magnetic-switch

Ejemplo 2: 3 microservicios en uno, el primero lee el estado de un botón. El segundo queda escuchando en un tópico en un broker de MQTT para ver si prender o apagar la luz. El tercero es el que opera el relay y ejecuta la acción.

https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadButtonSensor.php
https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadMQTTBroker.php
https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadStateFile.php

La idea es mantener siempre las funciones lo más separadas posibles: en el caso de GPIO necesito tener acceso como root, así que por lo mismo prefiero trabajar lo más posible con usuarios limitados y sólo para el programa que ejecuta la acción de accionar el relay lo ejecuto como root.

Saludos.

Para no ensuciar este tema, mejor crea uno nuevo :)
 
  • Like
Reactions: NIN
Upvote 0

NIN

Opteron Fanboy
Se incorporó
5 Septiembre 2005
Mensajes
1.447
Sí, es posible, en mi caso lo hice con PHP, pero tanto en Python como en cualquier otro lenguaje debe ser muy similar.

Ejemplo 1: El más simple: controlo el estado de un sensor magnético y dependiendo de ese estado abro o cierro el relay. La idea es que al abrir la puerta, la luz se prenda automáticamente. Al cerrarse la puerta, la luz se apaga:
https://github.com/unreal4u/rpi3-magnetic-switch

Ejemplo 2: 3 microservicios en uno, el primero lee el estado de un botón. El segundo queda escuchando en un tópico en un broker de MQTT para ver si prender o apagar la luz. El tercero es el que opera el relay y ejecuta la acción.

https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadButtonSensor.php
https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadMQTTBroker.php
https://github.com/unreal4u/rpi3-playroom-light/blob/master/app/ReadStateFile.php

La idea es mantener siempre las funciones lo más separadas posibles: en el caso de GPIO necesito tener acceso como root, así que por lo mismo prefiero trabajar lo más posible con usuarios limitados y sólo para el programa que ejecuta la acción de accionar el relay lo ejecuto como root.

Saludos.

Para no ensuciar este tema, mejor crea uno nuevo :)

Muchas gracias!! Tremendo aporte para IoT.

Dejé el contenido en spoiler para mantener el orden.
 
Upvote 0

naarf

aaaasí no mas
Se incorporó
15 Diciembre 2011
Mensajes
691
Estimado,

Entiendo que con Python puedes desarrollar paginas web. Además puedes controlar las GPIO de una Raspberry.

Consulta, Es posible enviar instrucciones a las GPIO desde una pagina web?? Tienes algun material que me pueda orientar en este propósito??

Saludos.

Tambien lo hice, siguiendo este manual, en ese tiempo agregue no-ip al tener movistar, y encendia luces de la casa por la web.

https://www.instructables.com/id/Raspberry-Pi-With-4-Relay-Module-for-Home-Automati/
 
Upvote 0

EITSAEB

Team Peacemaker Hater
Se incorporó
10 Septiembre 2006
Mensajes
4.656
No caché que habías actualizado el primer post. Aplico pozo java :risas

Es el segundo. Y acabo de actualizar la guía. Ya tenemos CRUD piñiñento :zippynana

Se estan siguiendo esta ordinaria guía basica, y encuentran errores, por favor indicar , soy mas disperso que la chucha, y quizá se me olvidó algo como en todo lo que hago :slowpoke
 
Upvote 0
Subir