Recuperar una imagen en Django, dinámicamente.

logo django

Veamos como recuperar una imagen en Django, para que Django no la dibuje dinámicamente en función del usuario.

Cuando trabajamos en Django, es común colocar el avatar de nuestro usuario en el panel, si tenemos habilitado nuestro modulo "context_procesor", dentro de templates en nuestro archivo setting.py., podemos seguir las instrucciones siguiente.

Otro Post sobre Django

Como recuperar una imagen en Django dinámicamente.

El código para llamar a nuestra imagen podría ser este:

<img src='{{user.avatar.url }}'
alt="{{user.username }}" 
class="class="img-fluid  user_imag rounded-circle">

Si el modulo no estuviera habilitado debemos incluirlo

TEMPLATES = [
 {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
        'django.template.context_processors.debug',
        'django.template.context_processors.request',     #modulo
        'django.contrib.auth.context_processors.auth',
        'django.contrib.messages.context_processors.messages',
            ],
         },
      },
]

La magia está, en que el método request(), nos traerá la instancia del user a toda pagina que tengamos, por tanto dispondremos de sus atributos, para el usuario visitante.

Recuperando una imagen en el html

Suponiendo que hemos creado nuestro modelo, nuestro form y nuestras url, podemos recuperar a nuestra imagen con

{% for a in object_list  %} 
<section class="dashboard-header section-padding" style=" border:2px solid blue; margin-bottom:15px;">
  <div class="container-fluid">
    <div class="col-lg-3" >
      <img  src='{{a.profile.photouser.url}}'  alt="{{a.user.username}}" class="img-fluid  user_imag rounded-circle">
    </div> …….
 </section>
 {% endfor %} 
  

…. hay que levantarse cada mañana con una esperanza y dormirse cada noche con una meta….

Espero que sirva de ayuda a alguien

Crear prefijos a tabla y usarlos en consultas

laravel

Crear prefijos a tablas y usarlos en consultas, es algo perfectamente posible de hacer en Laravel

Podemos  crear un  prefijo a todas las tablas de nuestra Base de Datos,  basta con ir al archivo  config/database.php, y en la opción prefix, y añadir el que queremos usar

'mysql' => [
    'driver'    => 'mysql',
    'host'      => env('DB_HOST', 'localhost'),
    'database'  => env('DB_DATABASE', 'database'),
    'username'  => env('DB_USERNAME', 'root'),
    'password'  => env('DB_PASSWORD', ''),
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => 'prefijo_',
    'strict'    => false,
    'options' => array(),
],

En el caso de que realicemos consultas puras o  del tipo DB::raw tendremos que recordarle a Laravel el prefijo que usamos.

Leer otro articulo de Laravel
Primero  obtenemos el prefijo.

$db_prefix = DB::getTablePrefix();

Ahora dentro de la función DB::raw ingresamos el prefijo 

$productos = App\Producto::join("tipos","productos.tipos_id","=","tipos.id")
  ->leftJoin(DB::raw("(SELECT * FROM {$db_prefix}materials where {$db_prefix}materials.estado=1) as materials"),
    function($join){
      $join->on('productos.id','=','materials.productos_id');
    }
  )
  ->select(DB::raw("{$db_prefix}productos.*"))
  ->addSelect(DB::raw("DATE_FORMAT({$db_prefix}materials.created_at,'%d/%m/%Y %h:%i %p') AS materials_creado"))
  ->where('productos.estado','=',1)
  ->where('materials.pruebas_count','>',0)
  ->whereRaw(DB::raw("{$db_prefix}materials.etiquetas !=''"))
  ->get();
 $sql = "SELECT * FROM {$db_prefix}productos WHERE {$db_prefix}productos.estado = ? AND {$db_prefix}productos.fecha_caducidad < ?";
DB::select($sql,array(1,20));

Y listo, esto es todo.

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

Gracias.

….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Matplotlib. Gráficos de dispersión y línea.

matplotlib

Esta vez tocaré el tema de Matplotlib. Graficos de dispersion en linea, ya que matplotlib es una librería completamente pensada, para crear visualizaciones estáticas, animadas e interactivas en Python.

Esta capacidad la hace especialmente importante, para la visualización de datos en estudios de inteligencia artificial.

Su amplia capacidad le permite trazar diferentes tipos de gráficos en Python (gráficos  : de dispersión,    circulares,   de líneas, histogramas, gráficos 3-D y muchos más.

Veremos en este articulo el uso de algunos de   ellos: los de dispersión y los de línea.

En lo adelante, escribiré otros artículos sobre los otros tipos.

Gráficos de dispersión  

Los gráficos de dispersión se utilizan para observar la relación entre variables y utiliza puntos para representar la relación entre ellas y cómo el cambio en una, afecta a la otra.

Gráficos de dispersión empleando el método plot()

El método plot(), acepta cuatro parámetros básicos, el eje de la x, el eje de la y, el tipo de marcador y el color de los puntos en el gráfico; e incluso estos dos últimos pueden obviarse.

De hacerlo plot(), colocará una línea por defecto, si no establecemos otro marcador, y el color azul.

La sintaxis es:

plt.plot(x, y, 'o', color='blue')

Gráficos de dipersión o scatter con el método pyplot()

El método se utiliza con la sintaxis siguiente:

matplotlib.pyplot.scatter()

El método scatter() en la biblioteca matplotlib se usa para dibujar un diagrama de dispersión.

Sintaxis

La sintaxis del método scatter() es:

matplotlib.pyplot.scatter(x_axis_data, y_axis_data, s = None, c = None, marker = None, cmap = None, vmin = None, vmax = None, alpha = None, linewidths = None, edgecolors = None)

El método scatter() toma los siguientes parámetros:

x_axis_data: una matriz que contiene datos del eje x
y_axis_data: una matriz que contiene datos del eje y
s: tamaño del marcador (puede ser escalar o una matriz de tamaño igual al tamaño de x o y)
c: color de secuencia de colores para rotuladores
marcador(marker): estilo del marcador
cmap- nombre de cmap
linewidths- ancho del borde del marcador
edgecolor- color del borde del marcador
alfa(opacidad): valor de mezcla, entre 0 (transparente) y 1 (opaco)

Excepto x_axis_data e y_axis_data, todos los demás parámetros son opcionales y su valor predeterminado es none.  

Metodo plot() versus pyplot()

Los métodos plot() y pyplot() difieren sobre todo, en su capacidad para adaptarse a las características de que necesitamos dotar a los gráficos, para expresar mejor nuestros datos.

La diferencia entre ellos, estriba en el volumen del dataset, sobre todo.

pyplot() ofrece una configuración más avanzada, que le permite dibujar con colores y tamaños diferentes cada punto, lo cual le obliga a renderizar una y otra vez, mientras plot(), solo dibuja de un solo color y tamaño todo el set.

En unos cientos de datos puede no notarse la diferencia, pero en grandes datasets, el uso de memoria puede hacerse sentir.

Este artículo mostraré algunos ejemplos de visualizar nuestros datos utilizando la librería matplotlib y ambos métodos.

Utilizaremos los datos que tenemos ya preparados en un archivo csv, en principio con solo dos columnas, ventas en millones de euros y vendedores.  

Comenzaremos importando las librerías y nuestro archivo

Examinamos la estructura del archivo y lo convertimos a int()

Para todas las gráficas de Matplotlib, se comienza creando una figura y un eje.

En su forma más simple, se pueden crear una figura y ejes de la siguiente manera:

figure(), es una instancia de la clase plt.figure(); la cual constituye un contenedor único que contiene todos los objetos que representan ejes, gráficos, texto y etiquetas.

Los ejes (axes), son a su vez una instancia de la clase plt.axes(),  que se ve como  el cuadro delimitador con marcas y etiquetas, que contendrá los elementos de la trama que componen nuestra visualización.

Normalmente utilizaré fig(); como la variable que contiene la instancia de figure, y ax() como la que contiene la instancia de la clase axes

Visualizamos con el uso de plt.plot().

El tercer argumento que le pasamos a la función, indica el tipo de símbolo que emplearemos.

En la primera figura mostramos nuestros datos y en la segunda los unimos con una línea, utilizando '–

Los marcadores que usamos, pueden ser diseñados a medida, como se ve debajo

Podemos hacer lo mismo con plot.scatter()

Emplearemos una función para trabajar nuestros gráficos. Veamos por ejemplo como mostrarlos en una gama de colores, que indican el peso de cada variable.

Podemos usar la función subplot()  de pyplot(), para mostrarlos de diferentes formas. Importaremos primero un dataset, con cuatro columnas para trabajar con más datos.

La instancia de pyplot(), permite establecer el  tamaño de la figura.

Usando el objeto ax devuelto, que se obtiene desde la función subplots(), y  llamamos  a la función scatter().

 

Mostremos varios gráficos en una sola visualización

Podemos también crear un grafico tridimensional

Gráficos de línea

El más sencillo de todos los gráficos es la visualización de una sola función del tipo  y = f(x).  

Veamos como crearlos

Creemos ahora varias líneas en un solo espacio

Podemos colorear las líneas con cualquier color, y pasándolo en diferentes formatos a través del parámetro color()

Lee mas sobre matplotlib, en este articulo

Podemos combinar emplear símbolos y  denominaciones para escoger el tipo de línea con el parámetro linestyle()

Ahora combinemos pasándolo directamente como un parámetro más, color y estilo de línea sin emplear linestyle()

Matplotlib, nos permite ajustar los limites de nuestro gráfico con el uso de los métodos plt.xlim()  y plt.ylim()

Su sintaxis es:

plt.xlim(10, 100)
plt.ylim(10, 90);

Podemos invertir los ejes, para ello bastara invertir su orden dentro del parámetro.

Axis

plt.axis()

Este método permite en una sola  llamada,  mezclar los diferentes parámetros del gráfico.

No debe confundirse axes con axis; plt.axis(), tiene una sintaxis asi

[xmin, xmax, ymin, ymax]:

Tight

Con tight podemos envolver los limites de nuestros puntos

Equal

Con equal garantizamos una relación de aspectos entre ambos ejes.

Etiquetar, nombrar e identificar el gráfico

También podemos por supuesto colocar los títulos del grafico, las leyendas etc.

Matplotlib, nos permite eso de un modo fácil.

En la imagen siguientes podemos ver ejemplos de como añadir etiquetas

Traducir de plt.plot() a ax.plot()

Si bien la mayoría de las funciones plt se traducen directamente a métodos ax (como plt.plot () → ax.plot (), plt.legend () → ax.legend (), etc.), este no es el caso para todos los comandos. En particular, las funciones para establecer límites, etiquetas y títulos se modifican ligeramente. Para realizar la transición entre funciones de estilo MATLAB y métodos orientados a objetos, realice los siguientes cambios:

plt.xlabel () → ax.set_xlabel ()

plt.ylabel () → ax.set_ylabel ()
plt.xlim () → ax.set_xlim ()
plt.ylim () → ax.set_ylim ()
plt.title () → ax.set_title ()

En la interfaz orientada a objetos para graficar, en lugar de llamar a estas funciones individualmente, a menudo es más conveniente usar el método ax.set () para establecer todas estas propiedades a la vez:

ax = plt.axes()
ax.plot(z, y)
ax.set(xlim=(0, 100), ylim=(10, 100),
    xlabel='quejas', ylabel='vendedores',
    title='Grafico simple');

Hasta aquí por hoy, en otros artículos hablaré de como trabajar con otros gráficos

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

Gracias

“Todo aquello que constituye la esencia del ser humano, encierra en si mismo, la razón de su propia extinción:  el oxigeno, los sentimientos, el agua, …

Y

Buscar una palabra en la base de datos, en Laravel

laravel

Un elemento común en una aplicación es que nos toque buscar una palabra en la base de datos, en Laravel. Aquí les muestro una forma de hacerlo que funciona.

Buscando una palabra en varias columnas o en todo un modelo

Lo que haremos es crear una variable query  y con el uso “use” y  de orWhere, nos compare el contenido de la columna con el valor de la búsqueda.

$busqueda = 'Palabra o termino a encontrar;
$descripcion = Descripcion::from('descripcion as a')
    ->where(function ($query) use ($busqueda) {
      $query = $query->orWhere('a.titulo','like',"%$busqueda%");
      $query = $query->orWhere('a.nombre','like',"%$busqueda%");
      $query = $query->orWhere('a.explicacion','like',"%$busqueda%");
      $query = $query->orWhere('a.etiquetas','like',"%$busqueda%");
    });
$posts = $posts->where('a.estado','=',1)
    ->get();

Leer mas sobre Laravel en este blog

En el ejemplo de abajo, estaremos, buscando diferentes  palabras en varias columnas del modelo Usuario,  solo en aquellos  registros que están activos

$columnasbusqueda = ['nombre','apellidos','apodo'];
$terminos = 'Palabras a buscar';
$palabras = explode(" ",$ terminos);
$usuarios = Usuario::from('usuarios as a')
    ->where(function ($query) use ($columnasbusqueda,$ palabras) {
        foreach ($palabras as $palabra) {
            $query = $query->where(function ($query) use ($columnasbusqueda,$palabra) {
                foreach ($columnasbusqueda as $columna) {
                    $query->orWhere($columna,'like',"%$palabra%");
                }
            });
        }
    });
$usuarios = $usuarios->where('a.estado','=',1)
    ->get();

Y listo, esto es todo.

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

Gracias.

…..lo que realmente importa no es lo que te da la vida, sino lo que haces con ello…

Auth con el uso de modelos

logo laravel

Manejando algo del código, podemos emplear Auth con el uso de modelos, y crear un sistema de autenticación mediante el uso de sus relaciones, lo cual reforzará la seguridad de nuestra web.

Ver Como Instalar Laravel
En el ejemplo siguiente, creamos una función managePages(), dentro de la clase AdminPolicy, que nos indica una determinada condición para el usuario que intenta acceder, en este caso limita su uso solo a aquellos con los roles Admin y Editor.
Luego declaramos su validez dentro de Providers, específicamente en el constructor del AuthServiceProvider. Para esto lo que hacemos es pasarle la ruta exacta del GateContract y una variable que nos traerá los datos del user. Con el uso de un foreach le damos un valor dinamico al acceso.

// app/Policies/AdminPolicy.php
class AdminPolicy
{
public function managePages($user)
{
return $user->hasRole(['Admin', 'Editor']);
}
}
// app/Providers/AuthServiceProvider.php
public function boot( \Illuminate\Contracts\Auth\Access\GateContract $gate)
{
foreach (get_class_methods(new \App\Policies\AdminPolicy) as $method) {
$gate->define($method, \App\Policies\AdminPolicy::class . "@{$method}");
}
$this->registerPolicies($gate);
}

Luego en cada uno de los espacios donde necesitamos acceder, colocamos una clausula de acceso, que llamara a la clase que hemos creado.

Este post puede interesarte Error al intentar acceder al login en laravel

Y listo, esto es todo.

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

Gracias.

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