1659432540
Durante mucho tiempo, JavaScript ha sido el lenguaje dominante en el desarrollo de interfaz de usuario debido a su capacidad para ejecutarse de forma nativa en el navegador e interactuar con HTML y CSS a través de la API DOM. Con la llegada de WebAssembly, las cosas comenzaron a cambiar lentamente. Lenguajes como Go, Rust, C, C++ y muchos otros ahora pueden ejecutarse en el navegador a velocidades casi nativas, y Python no se ha quedado atrás.
Con la introducción de PyScript, los desarrolladores de interfaz ahora pueden crear interfaces enriquecidas con Python. Además, también pueden aprovechar el ecosistema de Python, que tiene módulos científicos útiles como NumPy , Matplotlib y muchos más.
Para aprovechar al máximo este tutorial, necesitará:
PyScript es un marco web de código abierto que le permite crear aplicaciones web frontend utilizando Python. Con PyScript, puede incrustar el código de Python en HTML o vincularlo a un archivo de Python y el código se ejecutará en el navegador, sin ejecutar Python en el backend.
PyScript fue creado por Anaconda y se anunció públicamente el 30 de abril en PyCon US 2022. En el momento de escribir este artículo, PyScript se encuentra en un estado alfa y se está desarrollando activamente, por lo que se esperan cambios importantes y características más nuevas ya que no ha sido lanzado establemente todavía.
PyScript se basa en Pyodide , que traslada CPython a WebAssembly. WebAssembly es un formato binario de bajo nivel que le permite escribir programas en otros idiomas, que luego se ejecutan en el navegador. Con CPython en WebAssembly, podemos instalar y ejecutar paquetes de Python en el navegador, mientras que PyScript abstrae la mayoría de las operaciones de Pyodide, lo que le permite concentrarse en crear aplicaciones frontend con Python en el navegador.
Antes de comenzar a usar PyScript, creemos el directorio donde residirá nuestro código.
Para hacer eso, abra su terminal y cree el directorio del proyecto usando el mkdir
comando en la ubicación que elija:
mkdir pyscript_demo
A continuación, acceda al directorio que acaba de crear con el cd
comando:
cd pyscript_demo
A menudo, los desarrolladores frontend usan herramientas de formato automático como Prettier en sus editores de texto para formatear el código al guardarlo. Si bien esto funciona bien para HTML, CSS y JavaScript, esto puede causar problemas en el código de Python porque Python es estricto con la sangría.
Actualmente, las herramientas de formato automático como Prettier no reconocen la sintaxis de PyScript, que tiene solo dos meses de antigüedad al momento de escribir este artículo. Estas herramientas dan formato automáticamente al código Python como JavaScript, lo que rompe la sangría del código. Para remediar esto, deshabilitaremos el formato automático para este directorio por ahora.
Suponiendo que está utilizando VSCode, podemos deshabilitar el formato automático de la siguiente manera.
En el directorio de su proyecto, cree un .vscode
directorio y navegue hasta el directorio con el siguiente comando.
mkdir .vscode && cd .vscode
A continuación, cree un settings.json
archivo y agregue los siguientes contenidos:
{
"editor.formatOnSave": false
}
Con eso, la función de formato automático al guardar para este directorio se ha deshabilitado en VSCode y ahora estamos listos para comenzar a usar PyScript.
Ahora que nuestro directorio está configurado para PyScript, primero agregaremos enlaces a los activos de PyScript que comprenden un archivo CSS y un archivo JavaScript en la <head>
sección de una página HTML.
Una vez que se han agregado los activos, puede usar PyScript en un archivo HTML de dos maneras:
<py-script>
etiqueta en un archivo HTML. La <py-script>
etiqueta se puede agregar en la etiqueta <head>
o <body>
dependiendo de su tarea en cuestión.py
la extensión, al que luego puede hacer referencia en la <py-script>
etiqueta usando el src
atributoLa forma más fácil y rápida de comenzar a usar PyScript es incrustar el código de Python en el archivo HTML. ¡Vamos a hacer eso!
Abra su editor de texto preferido, cree el hello-world.html
archivo y agregue los siguientes contenidos:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Hello World!</title>
<!-- linking to PyScript assets -->
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<!-- Put Python code inside the the <py-script> tag -->
<py-script>print("Hello World!")</py-script>
</body>
</html>
En la <head>
sección, vinculamos al pyscript.css
archivo, que contiene estilos para los componentes visuales de PyScript, REPL, el cargador de PyScript, etc. Después de eso, vinculamos al pyscript.js
archivo, que configura las funciones necesarias para usar PyScript, como crear etiquetas como <py-script>
donde puedes escribir tu código Python.
En la <body>
etiqueta, inserta el código de Python en la <py-script>
etiqueta. Mantenemos las cosas simples por ahora, así que solo imprimimos Hello World
para el usuario.
Asegúrese de guardar su archivo en la raíz del directorio de su proyecto y abra el hello-world.html
archivo en Chrome. Tardará un par de segundos en cargarse y, una vez que se haya cargado la página, se verá similar a esto:
Si bien funciona poner el código de Python en la <py-script>
etiqueta, un enfoque mucho mejor y más escalable es agregar el código en un archivo externo y hacer referencia a él en el archivo HTML a medida que crea más páginas HTML o sus scripts se hacen más grandes.
Las siguientes son algunas de las razones por las que debería considerar usar código PyScript en un archivo externo:
Para usar PyScript externamente, crearemos un index.html
archivo, un archivo de Python que termine con .py
la extensión que contiene nuestro código de Python, y finalmente haremos referencia al archivo de Python en el index.html
archivo.
index.html
archivoCree un index.html
archivo y enlace a los activos de PyScript:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Greetings!</title>
<!-- linking to PyScript assets -->
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
</body>
</html>
El archivo no está haciendo mucho; solo estamos vinculando a los recursos de PyScript. Para hacerlo más útil, crearemos un main.py
archivo donde residirá nuestro código Python.
main.py
archivoVamos a crear una función de Python que imprima un mensaje de saludo.
En su editor de texto, cree el main.py
archivo y agregue el código a continuación:
def greetings(name):
print(f'Hi, {name}')
greetings('John Doe')
La greetings()
función toma un name
parámetro e imprime un mensaje de saludo con el nombre almacenado en el name
parámetro. Cuando llamamos a la greetings()
función con John Doe
como argumento, imprime hi, John Doe
.
main.py
archivo en el archivo HTMLAhora que ha creado el código de Python, hará referencia al main.py
archivo en el index.html
archivo.
Abra index.html
y agregue la línea dentro de la <body>
etiqueta:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Greetings!</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
// add the following line
<py-script src="./main.py"></py-script>
</body>
</html>
La <py-script>
etiqueta tiene una src
etiqueta que acepta la ruta del archivo del archivo de Python.
index.html
archivo en el navegadorAhora que todo está en su lugar, abriremos el index.html
en el navegador.
Sin embargo, los navegadores se negarán a cargar y ejecutar el archivo Python externo debido al error de la política de uso compartido de recursos de origen cruzado (CORS) . Para solucionar esto, necesitaremos utilizar un servidor. ¡Qué bueno que Python viene con un servidor web que podemos usar! El servidor no necesita ser creado por Python, puede usar un servidor en vivo o cualquier servidor de su elección.
Para crear un servidor, abra la terminal en el directorio raíz de su proyecto y ejecute el siguiente comando:
python -m http.server
A continuación, abra Chrome y visite http://0.0.0.0:8000/
. El servidor cargará automáticamente el index.html
archivo y verá lo siguiente:
Para el resto de este tutorial, haremos referencia a un archivo de Python externo, lo que requerirá que usemos un servidor para evitar errores de CORS y, a veces, incrustaremos el código de Python en HTML por razones de brevedad.
PyScript viene con un Read-Eval-Print Loop (REPL), que puede usar para experimentar y probar el código de Python.
Para usar el REPL, agregue la <py-repl>
etiqueta en la <body>
etiqueta en su index.html
archivo:
<!DOCTYPE html>
...
<body>
<py-script src="./main.py"></py-script>
// add the following tag
<py-repl></py-repl>
</body>
</html>
Con el servidor aún en ejecución, visite http://0.0.0.0:8000/
. Verá una nueva sección donde puede ingresar el código de Python.
Puede importar módulos, evaluar expresiones, crear funciones y hacer muchas cosas más. Para ver a qué se evalúa una expresión, debe hacer clic en el ícono verde Reproducir .
La siguiente imagen muestra algunas de las operaciones que puede realizar:
Ahora que sabemos cómo usar un REPL, a continuación aprenderemos cómo crear y usar módulos en PyScript.
En esta sección, crearemos un módulo Python personalizado y lo usaremos en nuestro código. También usaremos módulos de la biblioteca estándar de Python, así como módulos de terceros.
Para usar módulos, introduciremos una nueva etiqueta, <py-env>
que nos permite hacer referencia a módulos o rutas de archivos de módulos.
Vamos a crear un módulo local que contenga dos funciones.
Cree un mathslib.py
archivo en el directorio de su proyecto y agregue el siguiente código:
def add(num1, num2):
return num1 + num2
def subtract(num1, num2):
return num1 - num2
Aquí creamos dos funciones que realizan operaciones de suma y resta.
A continuación, cree un modules.html
archivo y agregue los siguientes contenidos:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>local modules</title>
<!-- linking to PyScript assets -->
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<py-env>
- paths:
- mathslib.py
</py-env>
<py-script>
from mathslib import subtract
print(subtract(8, 4))
<py-script>
</body>
</html>
En la <body>
etiqueta, usamos la <py-env>
etiqueta, que acepta una lista YAML que tiene paths
como clave. es la mathslib.py
ruta del archivo del módulo personalizado en relación con el modules.html
archivo. Una vez que se especifica la ruta al módulo personalizado, PyScript importará el módulo en el archivo.
Con el módulo cargado, en la <py-script>
etiqueta, importamos la subtract()
función desde mathslib.py
e invocamos la función con los argumentos 8
y 4
.
Con el servidor funcionando, visita http://0.0.0.0:8000/modules.html
y verás una página similar a esta:
PyScript, con la ayuda de Pyodide, brinda acceso a una gran cantidad de módulos disponibles en la biblioteca estándar de Python que están listos para que los use, con la excepción de los siguientes:
Visite la documentación de Pyodide para ver una lista completa. Además, tome nota de los módulos que están incluidos pero que no funcionan, como los módulos de multiprocesamiento, subprocesamiento y sockets.
Los módulos de la biblioteca estándar están disponibles en el espacio de nombres de PyScript de forma predeterminada; solo necesita importarlos para usarlos en el archivo.
Todavía en el modules.html
archivo, modifique el código de Python en la <py-script>
etiqueta para generar un número aleatorio usando el random
módulo:
from mathslib import subtract
import random
print(subtract(8, 4))
print("random number generated: ")
print(random.randint(1, 12))
Ahora visite la http://0.0.0.0:8000/modules.html
página y verá un número aleatorio generado cada vez que actualice la página:
Además de usar módulos de Python incorporados, también puede usar bibliotecas de terceros incluidas en Pyodide, como:
Para obtener una lista completa de los paquetes de terceros admitidos, visite la documentación de Pyodide o esté atento al repositorio de Pyodide GitHub .
Para agregar un paquete de terceros, cree un nuevo archivo HTML third-party.html
y agregue el siguiente código:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>local modules</title>
<!-- linking to PyScript assets -->
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<!-- thirdparty dependencies added here -->
<py-env>
- numpy
- matplotlib
</py-env>
<py-script>
import numpy as np
import matplotlib.pyplot as plt
arr = np.array([1, 2, 3, 4, 5])
plt.plot(arr)
plt
<py-script>
</body>
</html>
En la <py-env>
etiqueta, agregamos una lista de paquetes de terceros que queremos usar en nuestro proyecto, que son los paquetes NumPy y Matplotlib. Luego, en la <py-script>
etiqueta, importamos NumPy como np
y Matplotlib como plt
. Después de esto, llamamos al array
método de NumPy, que crea una matriz que luego se almacena en la arr
variable. Después de eso, llamamos al plot
método de Matplotlib con la matriz arr
como argumento para trazar un gráfico.
Asegúrese de que su archivo esté guardado y visite la http://0.0.0.0:8000/third-party.html
página. Debería ver un gráfico similar al siguiente:
Ahora que comprende cómo usar módulos integrados personalizados y paquetes de terceros, aprenderemos cómo acceder y manipular elementos HTML en la siguiente sección.
En esta sección, aprenderemos cómo seleccionar un elemento HTML usando una ID o una clase CSS, modificar un elemento, adjuntar eventos a un elemento y crear nuevos elementos usando PyScript.
Element
clasePyScript se envía con la Element
clase, lo que le permite seleccionar un elemento HTML usando su ID.
Para ver cómo funciona, cree un elements.html
archivo e inserte los siguientes contenidos:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Element class</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<ul id="navigation">
<li class="home">home</li>
<li class="about">about</li>
<li class="services">services</li>
<li class="contact">contact</li></ul>
</div>
<div id="output"></div>
<py-script src="./access-elements.py"></py-script>
</body>
</html>
En la <body>
etiqueta, tenemos un <ul>
elemento con una ID de navigation
. Usaremos el ID para seleccionar este elemento usando la Element
clase. La instancia seleccionada nos dará métodos que podemos usar para seleccionar los descendientes y manipularlos.
Otra etiqueta que usaremos es <div>
con una ID de output
. Modificaremos su innerHTML
para escribir un nuevo valor. Finalmente, después de la <div>
etiqueta, vinculamos al access-elements.py
archivo que contendrá nuestro código Python. Todavía no existe, así que sigamos adelante y creémoslo.
Una vez que haya creado el access-elements.py
archivo, agréguele el siguiente código:
ul_element = Element("navigation")
first_element = ul_element.select('.home').add_class('first')
second_element = ul_element.select('.about').remove_class('about')
div_element = Element("output")
div_element.write("Value set from PyScript")
En el código anterior, usamos la Element
clase para acceder al <ul>
elemento usando la navigation
ID.
Cuando se selecciona un elemento usando la Element
clase, puede aprovechar algunos de los siguientes métodos:
write()
: establece el innerHTML
valorselect()
: utiliza un selector CSS para encontrar elementos descendientesadd_class()
: Agrega una o más clases a un elementoremove_class()
: Elimina una o más clases de un elementoEn la segunda línea, usamos el select()
método para seleccionar el primer elemento secundario del <ul>
elemento usando su nombre de clase, home
. Después de seleccionar el elemento secundario, llamamos al add_class()
método para agregar una nueva clase first
al <li>
elemento.
En la tercera línea, accedemos al segundo elemento secundario por su nombre de clase about
, y luego eliminamos su clase about
usando el remove_class()
método.
A continuación, llamamos a la Element
clase con el ID output
, que proporciona una referencia al <div>
elemento que reside después del ul
elemento en el elements.html
archivo. Finalmente, llamamos al write()
método con la cadena Value set from PyScript
. El método establecerá el valor del <div>
elemento innerHTML
en el argumento de cadena.
Con el servidor aún activo, visite http://0.0.0.0:8000/elements.html
e inspeccione el <ul>
elemento. Verá que el primer <li>
elemento ahora tiene una clase adicional ( first
), el segundo elemento no tiene clase y el div
elemento ahora tiene el texto que configuramos en Python.
Ahora podemos seleccionar elementos HTML y hacer algunas manipulaciones básicas. En esta sección, adjuntaremos un evento de clic a un elemento y haremos que el código de Python se ejecute cuando se haya hecho clic en el elemento.
Cree un events.html
archivo y escriba el código a continuación:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Adding Events</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<button id="click-btn" class="bg-blue-500 text-white" pys-onClick="handle_click">Click</button>
<div id="output"></div>
<py-script src="./event-handlers.py"></py-script>
</body>
</html>
En la <body>
etiqueta, tenemos un <button>
con un class
atributo que contiene algunas clases que forman parte del pyscript.css
archivo. La <button>
etiqueta también tiene un pys-onclick
atributo, que adjunta un click
evento al botón. El pys-onclick
atributo acepta el nombre de la función handle_click
, que será la función que se ejecutará cuando se haga clic en el botón.
A continuación, tenemos el div
elemento con un ID de output
. Modificaremos el elemento innerHTML
con la handle_click
función que definamos.
Finalmente, vinculamos al event-handlers.py
archivo, que contendrá la función del controlador de eventos.
Definamos el event-handlers.py
y agreguemos lo siguiente:
def handle_click(e):
pyscript.write("output", "you clicked the button")
La handle_click
función tiene un parámetro, e
que es un objeto de evento que se pasa automáticamente a la función cuando hace clic en el botón. Dentro de la función, invocamos el write()
método de PyScript, que toma dos argumentos: el ID del elemento output
y el valor que queremos escribir, en nuestro caso, you clicked the button
.
Asegúrese de que su servidor esté funcionando:
python -m http.server
Luego visite la URL http://0.0.0.0:8000/events.html
en Chrome. Cuando se cargue la página, haga clic en el botón y aparecerá un mensaje que dice "ha hecho clic en el botón":
PyScript viene con un js
módulo que le da acceso a métodos de JavaScript, como querySelector()
, createElement()
, appendChild()
, etc., para acceder y manipular elementos HTML. Con estos, podrá mezclar JavaScript y Python para hacer una manipulación genial del DOM. Aquí hay un ejemplo:
import js
print(js.window.innerHeight)
nav = js.document.createElement("div")
js.document.body.prepend(nav)
js.console.log("nav element created")
Como puede ver, estamos mezclando métodos de código de Python print()
junto con JavaScript window
o document
propiedades.
En esta sección, nos centraremos principalmente en los document
métodos y, convenientemente, PyScript lo pone a disposición en el alcance de Python automáticamente. Ni siquiera necesitaremos importar el js
módulo para usar los document
métodos.
Cree un dom.html
archivo y agregue el siguiente código:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Mixing JavaScript and Python</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<ul id="navigation">
</ul>
<py-script src="./js-dom.py"></py-script>
</body>
</html>
En la <body>
etiqueta, solo tenemos un <ul>
elemento vacío con una ID de navigation
. A continuación, hacemos referencia al js-dom.py
que contendrá nuestro código Python.
Cree el js-dom.py
archivo y agregue los siguientes contenidos:
nav_parent = document.querySelector('#navigation')
nav_texts = ["home", "about", "services", "contact"]
for text in nav_texts:
nav_item = document.createElement("li")
nav_item.textContent = text
nav_item.className = "nav_element"
nav_parent.appendChild(nav_item)
En la primera línea, llamamos al querySelector()
método del document
módulo con #navigation
como argumento. El método encontrará y devolverá un elemento con una ID de navigation
, que es el <ul>
elemento en el dom.html
archivo.
En la segunda línea, creamos una lista de texto de navegación y la almacenamos en la nav_texts
variable. Después de eso, iteramos sobre la nav_texts
lista. En cada iteración, invocamos el createElement()
método con una cadena li
para crear un <li>
elemento.
Después de esto, agregamos texto al <li>
elemento usando la textContent
propiedad y agregamos un nombre nav_element
de clase al <li>
elemento usando la className
propiedad. Finalmente, agregamos el <li>
elemento al <ul>
elemento llamando al appendChild()
con el nav_item
elemento como argumento.
Asegúrese de que su archivo esté guardado y que el servidor aún se esté ejecutando. Visite http://0.0.0.0:8000/dom.html
y verá una página similar a la siguiente:
Si profundiza más e inspecciona los elementos, verá que los <li>
elementos se han creado con el nombre de clase nav_element
, que configuramos en Python:
Ahora podemos acceder y manipular el DOM usando la Element
clase, adjuntar eventos a elementos y usar JavaScript para consultar y modificar el DOM. A continuación, buscaremos datos de una API usando PyScript.
En esta sección, usaremos PyScript para enviar una GET
solicitud a una API para recuperar datos. La API que usaremos es la API de datos aleatorios . Crearemos un botón con un evento de clic que ejecuta una función que llama a la API cada vez que se hace clic en el botón.
Cree un fetch_data.html
archivo en su directorio y agregue los siguientes contenidos:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Fetch data from API</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<button id="get-name" class="bg-green-600 text-white" pys-onClick="get_random_name">Generate Random Name</button>
<div id="output"></div>
<py-script src="./fetch.py"></py-script>
</body>
</html>
El código debe ser familiar en este punto. La parte más importante es la <button>
etiqueta, que tiene el pys-onClick
atributo que acepta la get_random_name()
función. La función residirá en el fetch.py
archivo vinculado en la parte inferior. Sigamos adelante y creemos el archivo.
En su editor de texto, cree un nuevo archivo llamado fetch.py
con los siguientes contenidos:
from pyodide.http import pyfetch
import asyncio
async def get_random_name(e):
response = await pyfetch(url="https://random-data-api.com/api/name/random_name", method="GET")
data = await response.json()
first_name = data.get('first_name')
middle_name = data.get('middle_name')
last_name = data.get('last_name')
output = f"Random name: {first_name} {middle_name} {last_name}"
pyscript.write('output', output)
En la primera línea, importamos el pyfetch()
método del pyodide.http
módulo, lo que nos permite realizar solicitudes de red asíncronas. En la segunda línea, importamos el asyncio
módulo, que es parte de la biblioteca estándar de Python y proporciona las palabras clave async
y await
que son útiles para crear funciones asíncronas.
A continuación, definimos una función asíncrona get_random_name()
prefijándola con la async
palabra clave del asyncio
módulo. Dentro de la función, invocamos el pyfetch()
método que acepta dos argumentos:
URL
: El punto final de la APImethod
: Especifique el método HTTP que desea utilizar, que es el GET
método aquí.Cuando pyfetch()
se ejecuta, devuelve un objeto, que luego se almacena en la response
variable. En la línea que sigue, llamamos json()
al response
objeto para analizar el JSON y devolver un diccionario de Python, que luego se almacena en la data
variable.
En las próximas líneas, extrae el primer nombre, el segundo nombre y el apellido del data
dict y los almacena en sus respectivas variables. Finalmente, concatenamos los nombres usando las cadenas f de Python e invocamos el pyscript.write()
método para escribir los datos en el <div>
elemento con una ID de output
.
Asegúrese de que su servidor esté funcionando y visite la http://0.0.0.0:8000/fetch_data.html
página. Una vez que se carga la página, haga clic en el Generate Random Name
botón. Verá que se genera un nuevo nombre cada vez que se hace clic en el botón:
localStorage
En esta sección, utilizaremos el almacenamiento local para guardar y recuperar datos. El almacenamiento local es un objeto en el navegador web que puede almacenar datos sin fecha de vencimiento. Python puede usar el almacenamiento local importándolo desde el js
módulo.
Para usar el almacenamiento local, crearemos un área de texto que permita a los usuarios escribir comentarios. Si quieren guardar el comentario, harán clic en un save
botón que ejecutará una función que guarda los datos en el almacenamiento local. Cada vez que se visita la página, los datos se recuperarán del almacenamiento local y el área de texto se configurará para los datos.
Cree un storage.html
archivo y agregue los siguientes contenidos:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Store data in local storage</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<textarea id="comment" class="block border"></textarea>
<button id="save" class="bg-green-600 text-white"
pys-onClick="save_comment">Save</button>
<py-script src="./local-storage.py"></py-script>
</body>
</html>
En la <body>
etiqueta, creamos una <textarea>
etiqueta con un ID comment
. Usaremos esta ID para obtener una referencia del elemento del área de texto en Python. A continuación, tenemos un botón que tiene save
como ID y un evento de clic que invocará la función save_comment
, que aún no hemos definido. Finalmente, hacemos referencia al local-storage.py
, que contendrá nuestro código de Python. Vamos a crear el archivo ahora.
Crea local-storage.py
y agrega lo siguiente:
from js import localStorage
def save_comment(e):
text = Element("comment").value
localStorage.setItem("comment", text)
if localStorage.getItem("comment"):
text_area = Element("comment")
text_area.write(localStorage.getItem("comment"))
Primero, importamos el localStorage
objeto del js
módulo. A continuación, definimos la save_comment()
función, que toma e
como parámetro. Dentro de la función, invocamos la Element
clase con el ID comment
para obtener una referencia del área de texto. Una vez que el método encuentra el área de texto, usamos la value
propiedad para obtener el contenido del área de texto y almacenar el valor en la text
variable. En la siguiente línea, invocamos el setItem()
método del localStorage
objeto para guardar el texto del comentario en el localStorage
objeto debajo de la comment
clave.
Ahora, la save_comment()
función solo se ejecutará cuando se haga clic en el save
botón. Sin embargo, procediendo fuera de la save_comment()
función, las líneas que siguen a la función se ejecutarán solo durante la carga de la página.
Cuando la página se carga por primera vez, usamos la if
declaración para verificar si el localStorage
objeto tiene datos debajo de la comment
clave. Si es verdadero, hacemos referencia al área de texto usando la Element
clase y almacenamos su instancia en la text_area
variable. A continuación, invocamos el write()
método de la text_area
instancia para actualizar el contenido del área de texto con los datos del almacenamiento local.
Asegúrese de que su servidor esté funcionando y visite http://0.0.0.0:8000/storage.html
. Ingrese cualquier texto que desee y haga clic en el botón Guardar .
A continuación, actualice la URL y verá que el área de texto contiene el texto que guardó en la visita inicial.
Con eso, ahora sabe cómo aprovechar localStorage
el uso de PyScript. A continuación, leeremos un archivo en el sistema de archivos usando PyScript.
En esta sección, usaremos PyScript para leer datos de un archivo de texto sin formato en el sistema de archivos local y agregar su contenido al DOM.
Primero, creemos un archivo que contenga los datos que queremos leer. En el directorio de su proyecto principal, ejecute el siguiente comando para crear y moverse a un nuevo directorio:
mkdir data && cd data
A continuación, cree un names.txt
archivo y agregue los siguientes contenidos, que son nombres de marcos web de Python:
Django
Flask
FastAPI
web2p
Guarde el archivo y vuelva a la raíz del directorio de su proyecto:
cd ..
Con el archivo creado, crea un file-system.html
archivo en tu editor de texto con lo siguiente:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Read data from file system</title>
<link rel="stylesheet" href="https://pyscript.net/alpha/pyscript.css" />
<script defer src="https://pyscript.net/alpha/pyscript.js"></script>
</head>
<body>
<py-env>
- paths:
- /data/names.txt
</py-env>
<ul id="frameworks">
</ul>
<py-script src="./read-file.py"></py-script>
</body>
</html>
En la <py-env>
etiqueta, especificamos la ruta al names.txt
, que es relativa a la file-system.html
ruta. A continuación, creamos una <ul>
etiqueta vacía con una frameworks
identificación. Finalmente, hacemos referencia al read-file.py
, que definiremos pronto.
Crear un read-file.py
con los siguientes contenidos:
ul_element = document.querySelector("#frameworks")
with open("names.txt") as f:
for line in f:
li_element = document.createElement("li")
li_element.innerText = line
ul_element.appendChild(li_element)
En la primera línea, invocamos el querySelector()
método con un selector de ID #frameworks
, que obtiene una referencia del <ul>
elemento. En la segunda línea, llamamos al open()
método con el nombre del archivo names.txt
y almacenamos el objeto del archivo como f
.
Dentro de la with
declaración, iteramos sobre cada línea almacenada en el objeto de archivo f
. Durante cada iteración, creamos un <li>
elemento utilizando el método document
del objeto createElement()
. A continuación, establecemos el <li>
contenido del texto en el valor de la line
variable usando la innerText
propiedad de la li_element
instancia. Finalmente, agregamos el <li>
elemento al <ul>
elemento llamando a the appendChild()
con the li_element
como argumento.
Vuelva a iniciar el servidor (si lo detuvo antes):
python -m http.server
Visite la http://0.0.0.0:8000/file-system.html
URL y verá que el contenido del archivo de texto sin formato se muestra en la página:
Si inspecciona los elementos, verá que hay cuatro <li>
elementos que se agregaron al <ul>
elemento.
Con eso, ahora puede leer archivos en el sistema de archivos. Puede usar el mismo enfoque para leer archivos CSV y muchos otros formatos de archivo.
En este tutorial, aprendimos a usar PyScript REPL, crear módulos personalizados, usar módulos de la biblioteca estándar de Python e importar módulos de terceros. También aprendimos cómo acceder y manipular elementos usando PyScript, realizar solicitudes de API, usar localStorage
y leer un archivo de texto sin formato del sistema de archivos.
Para explorar más PyScript, visite la página de inicio de PyScript . Además, consulte la página de documentación de Pyodide para obtener más información sobre las posibilidades que habilita en el navegador.
Fuente: https://blog.logrocket.com/pyscript-run-python-browser/
1626775355
No programming language is pretty much as diverse as Python. It enables building cutting edge applications effortlessly. Developers are as yet investigating the full capability of end-to-end Python development services in various areas.
By areas, we mean FinTech, HealthTech, InsureTech, Cybersecurity, and that's just the beginning. These are New Economy areas, and Python has the ability to serve every one of them. The vast majority of them require massive computational abilities. Python's code is dynamic and powerful - equipped for taking care of the heavy traffic and substantial algorithmic capacities.
Programming advancement is multidimensional today. Endeavor programming requires an intelligent application with AI and ML capacities. Shopper based applications require information examination to convey a superior client experience. Netflix, Trello, and Amazon are genuine instances of such applications. Python assists with building them effortlessly.
Python can do such numerous things that developers can't discover enough reasons to admire it. Python application development isn't restricted to web and enterprise applications. It is exceptionally adaptable and superb for a wide range of uses.
Robust frameworks
Python is known for its tools and frameworks. There's a structure for everything. Django is helpful for building web applications, venture applications, logical applications, and mathematical processing. Flask is another web improvement framework with no conditions.
Web2Py, CherryPy, and Falcon offer incredible capabilities to customize Python development services. A large portion of them are open-source frameworks that allow quick turn of events.
Simple to read and compose
Python has an improved sentence structure - one that is like the English language. New engineers for Python can undoubtedly understand where they stand in the development process. The simplicity of composing allows quick application building.
The motivation behind building Python, as said by its maker Guido Van Rossum, was to empower even beginner engineers to comprehend the programming language. The simple coding likewise permits developers to roll out speedy improvements without getting confused by pointless subtleties.
Utilized by the best
Alright - Python isn't simply one more programming language. It should have something, which is the reason the business giants use it. Furthermore, that too for different purposes. Developers at Google use Python to assemble framework organization systems, parallel information pusher, code audit, testing and QA, and substantially more. Netflix utilizes Python web development services for its recommendation algorithm and media player.
Massive community support
Python has a steadily developing community that offers enormous help. From amateurs to specialists, there's everybody. There are a lot of instructional exercises, documentation, and guides accessible for Python web development solutions.
Today, numerous universities start with Python, adding to the quantity of individuals in the community. Frequently, Python designers team up on various tasks and help each other with algorithmic, utilitarian, and application critical thinking.
Progressive applications
Python is the greatest supporter of data science, Machine Learning, and Artificial Intelligence at any enterprise software development company. Its utilization cases in cutting edge applications are the most compelling motivation for its prosperity. Python is the second most well known tool after R for data analytics.
The simplicity of getting sorted out, overseeing, and visualizing information through unique libraries makes it ideal for data based applications. TensorFlow for neural networks and OpenCV for computer vision are two of Python's most well known use cases for Machine learning applications.
Thinking about the advances in programming and innovation, Python is a YES for an assorted scope of utilizations. Game development, web application development services, GUI advancement, ML and AI improvement, Enterprise and customer applications - every one of them uses Python to its full potential.
The disadvantages of Python web improvement arrangements are regularly disregarded by developers and organizations because of the advantages it gives. They focus on quality over speed and performance over blunders. That is the reason it's a good idea to utilize Python for building the applications of the future.
#python development services #python development company #python app development #python development #python in web development #python software development
1602968400
Python is awesome, it’s one of the easiest languages with simple and intuitive syntax but wait, have you ever thought that there might ways to write your python code simpler?
In this tutorial, you’re going to learn a variety of Python tricks that you can use to write your Python code in a more readable and efficient way like a pro.
Swapping value in Python
Instead of creating a temporary variable to hold the value of the one while swapping, you can do this instead
>>> FirstName = "kalebu"
>>> LastName = "Jordan"
>>> FirstName, LastName = LastName, FirstName
>>> print(FirstName, LastName)
('Jordan', 'kalebu')
#python #python-programming #python3 #python-tutorials #learn-python #python-tips #python-skills #python-development
1602666000
Today you’re going to learn how to use Python programming in a way that can ultimately save a lot of space on your drive by removing all the duplicates.
In many situations you may find yourself having duplicates files on your disk and but when it comes to tracking and checking them manually it can tedious.
Heres a solution
Instead of tracking throughout your disk to see if there is a duplicate, you can automate the process using coding, by writing a program to recursively track through the disk and remove all the found duplicates and that’s what this article is about.
But How do we do it?
If we were to read the whole file and then compare it to the rest of the files recursively through the given directory it will take a very long time, then how do we do it?
The answer is hashing, with hashing can generate a given string of letters and numbers which act as the identity of a given file and if we find any other file with the same identity we gonna delete it.
There’s a variety of hashing algorithms out there such as
#python-programming #python-tutorials #learn-python #python-project #python3 #python #python-skills #python-tips
1597751700
Magic Methods are the special methods which gives us the ability to access built in syntactical features such as ‘<’, ‘>’, ‘==’, ‘+’ etc…
You must have worked with such methods without knowing them to be as magic methods. Magic methods can be identified with their names which start with __ and ends with __ like init, call, str etc. These methods are also called Dunder Methods, because of their name starting and ending with Double Underscore (Dunder).
Now there are a number of such special methods, which you might have come across too, in Python. We will just be taking an example of a few of them to understand how they work and how we can use them.
class AnyClass:
def __init__():
print("Init called on its own")
obj = AnyClass()
The first example is _init, _and as the name suggests, it is used for initializing objects. Init method is called on its own, ie. whenever an object is created for the class, the init method is called on its own.
The output of the above code will be given below. Note how we did not call the init method and it got invoked as we created an object for class AnyClass.
Init called on its own
Let’s move to some other example, add gives us the ability to access the built in syntax feature of the character +. Let’s see how,
class AnyClass:
def __init__(self, var):
self.some_var = var
def __add__(self, other_obj):
print("Calling the add method")
return self.some_var + other_obj.some_var
obj1 = AnyClass(5)
obj2 = AnyClass(6)
obj1 + obj2
#python3 #python #python-programming #python-web-development #python-tutorials #python-top-story #python-tips #learn-python
1593156510
At the end of 2019, Python is one of the fastest-growing programming languages. More than 10% of developers have opted for Python development.
In the programming world, Data types play an important role. Each Variable is stored in different data types and responsible for various functions. Python had two different objects, and They are mutable and immutable objects.
Table of Contents hide
III Built-in data types in Python
The Size and declared value and its sequence of the object can able to be modified called mutable objects.
Mutable Data Types are list, dict, set, byte array
The Size and declared value and its sequence of the object can able to be modified.
Immutable data types are int, float, complex, String, tuples, bytes, and frozen sets.
id() and type() is used to know the Identity and data type of the object
a**=25+**85j
type**(a)**
output**:<class’complex’>**
b**={1:10,2:“Pinky”****}**
id**(b)**
output**:**238989244168
a**=str(“Hello python world”)****#str**
b**=int(18)****#int**
c**=float(20482.5)****#float**
d**=complex(5+85j)****#complex**
e**=list((“python”,“fast”,“growing”,“in”,2018))****#list**
f**=tuple((“python”,“easy”,“learning”))****#tuple**
g**=range(10)****#range**
h**=dict(name=“Vidu”,age=36)****#dict**
i**=set((“python”,“fast”,“growing”,“in”,2018))****#set**
j**=frozenset((“python”,“fast”,“growing”,“in”,2018))****#frozenset**
k**=bool(18)****#bool**
l**=bytes(8)****#bytes**
m**=bytearray(8)****#bytearray**
n**=memoryview(bytes(18))****#memoryview**
Numbers are stored in numeric Types. when a number is assigned to a variable, Python creates Number objects.
#signed interger
age**=**18
print**(age)**
Output**:**18
Python supports 3 types of numeric data.
int (signed integers like 20, 2, 225, etc.)
float (float is used to store floating-point numbers like 9.8, 3.1444, 89.52, etc.)
complex (complex numbers like 8.94j, 4.0 + 7.3j, etc.)
A complex number contains an ordered pair, i.e., a + ib where a and b denote the real and imaginary parts respectively).
The string can be represented as the sequence of characters in the quotation marks. In python, to define strings we can use single, double, or triple quotes.
# String Handling
‘Hello Python’
#single (') Quoted String
“Hello Python”
# Double (") Quoted String
“”“Hello Python”“”
‘’‘Hello Python’‘’
# triple (‘’') (“”") Quoted String
In python, string handling is a straightforward task, and python provides various built-in functions and operators for representing strings.
The operator “+” is used to concatenate strings and “*” is used to repeat the string.
“Hello”+“python”
output**:****‘Hello python’**
"python "*****2
'Output : Python python ’
#python web development #data types in python #list of all python data types #python data types #python datatypes #python types #python variable type