Syntax error or access violation: 1071 Specified key was too long.Un error común al correr la migraciones

laravel error

Si recibes este error: Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `users_email_unique`(`email`)), aplica esta soluci

Dentro de App/Providers ir a AppServiceProvider y corregir la función boot

public function boot()
    {
        //
    }

Por

use Illuminate\Support\Facades\Schema; // añadir  facade Schema
public function boot()
    {
       // corrigiendo error …….
        Schema::defaultStringLength(191);
    }

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…..subir montañas hermana hombres…….

AttributeError: module urllib has no attribute urlopen 

error en python


Si alguna vez al trabajar con la librería urllib, te ha lanza AttributeError: module urllib has no attribute urlopen, te explico como se resuelve, más adelante.

El error en principio se debe a que el método urllib.urlopen() funciona con Python 2 y seguramente desarrollas sobre Python3.

Otros artículos sobre Python

La solución es importar urllib.request, que es donde podemos hallar urlopen en Python3.

Entonces al llamarla puedes hacer:

 urllib.request.urlopen(…)

Y hasta aquí.

Deseo sinceramente que esto sirva de ayuda a alguien.

Hay que sembrar un árbol, un ansia, un sueño, un hijo, porque la vida es eso , sembrar, sembrar, sembrar

Error _xsrf’ argument missing from post

python error

Si aparece el error _xsrf’ argument missing from post, mientras trabajas  con Jupyter Notebook , indicando que no se guarda el archivo, puedes probar una de estas soluciones.

Abre otro cuaderno, que no esté en ejecución, pero que exista, en el mismo kernel, y el problema desaparecerá.

Otros errores en Python

Ahora podrás volver a guardar los cuadernos que anteriormente mostraban el error _xsrf.

Una opción que puede funcionar si lo anterior no resuelve el problema es ir a la página de inicio de Jupyter y actualice el navegador.

En caso de hayas cerrado la página de inicio de Jupyter, puedes encontrar un enlace en la terminal desde la que iniciaste Jupyter notebook.

Espero modestamente, que este post sirva de ayuda  a alguien.

…. no recuerdo ya el lugar de donde vengo y pueda que no exista el sitio adonde voy..

J. Sabina.

Asignar valores por defecto a la relación belongsTo

laravel

Si tenemos en nuestra vista un producto que pertenece a una categoría, podemos asignar valores por defecto a la relación belongsTo, para acceder a el, haciendo algo asi:

{{ $producto->categoria->nombre }}

Pero si el producto es borrado, o no se le asigna categoría alguna, recibimos un error, del tipo “property of non-object”.

Mas sobre las relaciones Belongs to

Esto podríamos prevenirlo asi:

{{ $producto->categoria->nombre ?? '' }}

O podemos ir a la relación en Eloquent y darle valor por defecto

public function categoria()
{
    return $this->belongsTo('App\Categoria')->withDefault();
}

De ese modo la relación de la categoría(), retornara un valor vacio en el modelo Categoria, si el producto no la tuviera, entonces podemos añadir al modelo un valor por defecto, asi:

 public function categoria()
{
    return $this->belongsTo('App\Categoria')->withDefault(['nombre' => 'sin categoria]);
}

Y listo, esto es todo.

Algo más sobre relaciones en Laravel

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

Error unrecognized arguments: -f en Jupyter notebook

python error

El error unrecognized arguments: -f que aparece al usar Jupyter notebook, si estamos usando argparse(), puede tener una fácil solución.

 Si has utilizado la sentencia:

parser = parser.parse_args()

Esta puede ser la causante de tu error.

Ver otros errores en Python

Puedes resolverlo escribiendo en su lugar:

parser = parser.parse_args(args=[])

Y hasta aquí ,espero que sirva de ayuda, a alguien.

Muchas gracias

El que siempre soño, tiene derecho a ganar

I.Delgado

Crear el recurso de autenticación del sistema Auth:

laravel

Es sabido que crear el recurso de autenticación en nuestra nueva aplicación es uno sino el primer paso después de crear el  proyecto, aquí les dejo una pequeña explicación de los pasos que sigo para hacerlo, tanto en local como en produccion si trabajamos en un plesk, y no queremos hacer deployment local, sino directamente arriba

Local:

En laravel 5 seria

php artisan make:auth

En laravel 6 seria

composer require laravel/ui

Se creara automáticamente el  comando ui/auth, dentro de artisan, lo ejecutamos:

php artisan ui vue --auth

luego ejecutamos

npm install && npm run dev

PLESK:

En laravel 5 seria

cd httpdocs/nombre_proyecto && /opt/plesk/php/7.3/bin/php artisan make:auth

En laravel 6 seria

/opt/plesk/php/7.3/bin/php /usr/lib/plesk-9.0/composer.phar require laravel/ui

luego se creara automáticamente el  comando ui/auth, dentro de artisan, lo ejecutamos

cd httpdocs/nombre_proyecto && /opt/plesk/php/7.3/bin/php artisan ui vue --auth

nos pedirá ejecutar

npm install && npm run dev

Es posible que no este instalado el node en els ervidor por tanto el npm  no se encontrara disponible. Aquí puede verse como instalar en el plesk,  el soporte  para node.js https://www.plesk.com/blog/product-technology/node-js-plesk-onyx

Una vez hecho esto accedemos al nuestro dominio en el servidor y activamos node.js e instalamos npm.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…., si avanzo sígueme, si me detengo empújame, si retrocedo mátame…….

Uso de classmethod en Python

logo python

En este post  intentaré explicar de forma sencilla el uso de classmethod en Python y las ventajas que nos ofrece dentro de la programación orientada a objetos.

Classmethod es lo que se llama en Ptyhon un decorador.

Los decoradores en Python son funciones que nos permiten o facilitan determinadas acciones, alteran, modelan o decoran, de ahí su nombre como se comportan otras funciones cuando van precedidas por ellos.

Los decoradores se escriben colocando una arroba delante, por lo que en nuestro caso seria algo asi:

@classmethod

Este decorador permite llamar a una clase, aunque esta aun no haya sido convertida en un objeto.

Veamos un ejemplo sencillo:

class boxeador(object):
    def __init__(self):
        pass
    @classmethod #nos permite usar esta funcion sin que la clase haya sido atribuida a un objeto
    def esquina(cls, color):
        print("Has tenido suerte, tu esquina es de color {}".format(color))

def main():
    color = input('El color que deseas es:')
    boxeador.esquina(color) #llamado de la funcion

if __name__ == '__main__':
    main()

Como ven hemos podido llamar a esquina() sin que esta haya sido atribuida a un objeto especifico.

Otros posts sobre Python

 Si eliminamos el decorador recibiríamos este error:

TypeError                                 Traceback (most recent call last)
<ipython-input-19-6d278ca6f532> in <module>
     11 
     12 if __name__ == '__main__':
---> 13     main()

<ipython-input-19-6d278ca6f532> in main()
      8 def main():
      9     color = input('El color que deseas es:')
---> 10     boxeador.esquina(color) #llamado de la funcion
     11 
     12 if __name__ == '__main__':

TypeError: esquina() missing 1 required positional argument: 'color'

O sea nos da un error de tipo, indicando que falta un argumento de posición llamado color, que no hemos asignado a ningún objeto.

Y hasta aquí, y como siempre espero que sirva de ayuda a alguien.

Un saludo

…Y todo, como el diamante, antes de luz , fue carbón

J. Martí

Modificaciones en el modelo

laravel

Algunas de la cosas que nos reserva Laravel dentro de Eloquent, son las modificaciones en el modelo, que podemos hacer directamente sobre él para modificarlo.

Sabemos que un modelo tiene este formato

class User extends Model {
// la tabla enlazada
    protected $table = 'users';
// los campos que pueden ser llenados con el método create()
    
    protected $fillable = ['email', 'password']; 
    protected $dates = ['created_at', 'deleted_at']; 
// los campos protegidos 
    
protected $appends = ['field1', 'field2']; 
// valores adicionales que pueden ser retornados en un JSON
}

Ver más sobre Laravel

Pero podemos cambiar cosas por ejemplo

protected $primaryKey = 'uuid'; // cambiar el idf
public $incrementing = false; // que no sea autoincrementable 
protected $perPage = 25;//sobreescribir la paginación por defecto de 15 
const CREATED_AT = 'creado_en';
const UPDATED_AT = 'actualizado_en'; // sobre escribir los timestamp
public $timestamps = false; // no usar los timestamp

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

Colocar el logo junto al menú en Prestashop

logo prestashop

Si estas trabajando con Prestashop 1.6,  con la plantilla que trae por defecto y por necesidad de diseño necesitas colocar el logo junto al menú, aquí te doy una solución.

Debes saber que esta solución tendras que tocar el código, por lo que si no tienes experiencia programando, déjalo a alguien que sepa o ve con mucho cuidado.

En el archivo  header.tpl. que hallarás siguiendo la ruta :

 /themes/default-bootstrap/header.tpl 

y comenta el logo actual que está en las líneas siguientes :

<div id="header_logo">
<a href="{if isset($force_ssl) && $force_ssl}{$base_dir_ssl}{else}{$base_dir}{/if}" title="{$shop_name|escape:'html':'UTF-8'}">
<img class="logo img-responsive" src="{$logo_url}" alt="{$shop_name|escape:'html':'UTF-8'}"{if isset($logo_image_width) && $logo_image_width} width="{$logo_image_width}"{/if}{if isset($logo_image_height) && $logo_image_height} height="{$logo_image_height}"{/if}/>
</a>
</div>

Copia el código que acabas de comentar.

Otros post sobre Prestashop

Ahora ve al archivo  blocktopmenu.tpl, que es el encargado de manejar el área del menú.

Su ruta es la que veras debajo:

/themes/default-bootstrap/modules/blocktopmenu/blocktopmenu.tpl

Busca el div  que contiene el menú, que es este:

<div id="block_top_menu" class="sf-contener clearfix col-lg-12"> …

Y  justo antes de el, crea  un div del tipo :

<div class="col-sm-4 clearfix"></div>

 Y dentro pega  dentro lo que has copiado de  header.tpl, quedará algo asi:

<div class="col-sm-4 clearfix">
<a href="{if isset($force_ssl) && $force_ssl}{$base_dir_ssl}{else}{$base_dir}{/if}" title="{$shop_name|escape:'html':'UTF-8'}">
<img class="logo img-responsive" src="{$logo_url}" alt="{$shop_name|escape:'html':'UTF-8'}"{if isset($logo_image_width) && $logo_image_width} width="{$logo_image_width}"{/if}{if isset($logo_image_height) && $logo_image_height} height="{$logo_image_height}"{/if}/></a>
</div>

Puede haber, dependiendo de la versión alguna variación, pero teniendo cuidado de colocar el código correctamente funcionará

Espero haber ayudado a alguien con esto.

Un saludo

Quién va en busca de montañas, no puede detenerse a recoger las piedras del camino.

J. Martí
Translate »