{"id":284,"date":"2024-03-17T22:21:16","date_gmt":"2024-03-18T01:21:16","guid":{"rendered":"https:\/\/ventiladorcito.com\/blog\/?p=284"},"modified":"2024-03-17T22:21:16","modified_gmt":"2024-03-18T01:21:16","slug":"mascotas-perdidas-py-parte-iii","status":"publish","type":"post","link":"https:\/\/ventiladorcito.com\/blog\/2024\/03\/mascotas-perdidas-py-parte-iii\/","title":{"rendered":"Mascotas Perdidas Py &#8211; Parte III"},"content":{"rendered":"\n<p class=\"has-medium-font-size\"><strong>22 de Enero<\/strong><\/p>\n\n\n\n<p>A continuaci\u00f3n necesitamos crear las vistas para login y register pues al intentar entrar veremos un error similar a este:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"469\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-1024x469.png\" alt=\"\" class=\"wp-image-285\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-1024x469.png 1024w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-300x137.png 300w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-768x352.png 768w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-1536x704.png 1536w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5-624x286.png 624w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-5.png 1602w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>Para las vistas usar\u00e9 <a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">bootstrap<\/a>, es una especie de framework para front-end, permite normalizar algunas caracter\u00edsticas visuales dentro del navegador, para diferentes etiquetas y componentes de formulario, sin mencionar que nos facilita hacer responsive nuestra p\u00e1gina.<\/p>\n\n\n\n<p>Para integrar bootstrapa a nuestro proyecto, debemos incluir dentro del proyecto usando <a href=\"https:\/\/laravel.com\/docs\/9.x\/vite#main-content\">vite que viene con laravel<\/a> para ello seguirmos en parte <a href=\"https:\/\/getbootstrap.com\/docs\/5.3\/getting-started\/vite\/\" target=\"_blank\" rel=\"noreferrer noopener\">esta gu\u00eda para instalar entre los paquetes que usa con node y npm<\/a>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm i --save bootstrap @popperjs\/core<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"118\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-6.png\" alt=\"\" class=\"wp-image-286\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-6.png 489w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-6-300x72.png 300w\" sizes=\"auto, (max-width: 489px) 100vw, 489px\" \/><\/a><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">npm i --save-dev sass<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"440\" height=\"121\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-7.png\" alt=\"\" class=\"wp-image-287\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-7.png 440w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-7-300x83.png 300w\" sizes=\"auto, (max-width: 440px) 100vw, 440px\" \/><\/a><\/figure>\n\n\n\n<p>Agregamos al archivo <strong>resources\/js\/app.js<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">    \/\/ Import all of Bootstrap's JS\n    import * as bootstrap from 'bootstrap';\n    window.bootstrap = bootstrap;<\/code><\/pre>\n\n\n\n<p>Al archivo <strong>resources\/js\/bootstrap.js<\/strong> agregamos:<\/p>\n\n\n\n<pre title=\"resources\/js\/bootstrap.js\" class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">    \/\/ Import our custom CSS\n\n    import '..\/sass\/app.scss'\n    import '..\/css\/app.css'<\/code><\/pre>\n\n\n\n<p>Al archivo <strong>vite.config.js<\/strong> queda como:<\/p>\n\n\n\n<pre title=\"\/vite.config.js\" class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">    import { defineConfig } from 'vite';\n    import laravel from 'laravel-vite-plugin';\n    import path from 'path';\n\n    export default defineConfig({\n        plugins: [\n            laravel({\n                input: [\n                    'resources\/js\/app.js'\n                ],\n                refresh: true,\n            }),\n        ],\n        resolve: {\n            alias: {\n                '~bootstrap': path.resolve(__dirname, 'node_modules\/bootstrap'),\n            }\n        },\n    });<\/code><\/pre>\n\n\n\n<p>Ejecutamos este comando para que se compile las versiones minificadas con vite de bootstrap:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">npm run build<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"616\" height=\"168\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-8.png\" alt=\"\" class=\"wp-image-288\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-8.png 616w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-8-300x82.png 300w\" sizes=\"auto, (max-width: 616px) 100vw, 616px\" \/><\/a><\/figure>\n\n\n\n<p>Ahora para probar, modificamos temporalmente el archivo routes\/web.php para probar una vista que incluya las librerias de bootstrap:<\/p>\n\n\n\n<pre title=\"routes\/web.php\" class=\"wp-block-code\"><code lang=\"javascript\" class=\"language-javascript\">    Route::get('\/', function () {\n        return view('test');\n    });<\/code><\/pre>\n\n\n\n<p>Y aqui creamos la vista para probarla <strong>resources\/views\/test.blade.php<\/strong><\/p>\n\n\n\n<pre title=\"resources\/views\/test.blade.php\" class=\"wp-block-code\"><code lang=\"php\" class=\"language-php line-numbers\">    &lt;!DOCTYPE html&gt;\n    &lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n        &lt;head&gt;\n            &lt;meta charset=\"utf-8\"&gt;\n            &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n\n            &lt;title&gt;Test Bootstrap&lt;\/title&gt;\n\n            @vite('resources\/js\/app.js')\n        &lt;\/head&gt;\n        &lt;body&gt;\n            &lt;div class=\"container py-4 px-3 mx-auto\"&gt;\n                &lt;h1&gt;Hello, Bootstrap and Vite!&lt;\/h1&gt;\n                &lt;button class=\"btn btn-primary\"&gt;Primary button&lt;\/button&gt;\n            &lt;\/div&gt;\n        &lt;\/body&gt;\n    &lt;\/html&gt;\n<\/code><\/pre>\n\n\n\n<p>Y todo funciona! podemos ver algo como esto<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"967\" height=\"292\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9.png\" alt=\"\" class=\"wp-image-289\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9.png 967w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9-300x91.png 300w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9-768x232.png 768w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-9-624x188.png 624w\" sizes=\"auto, (max-width: 967px) 100vw, 967px\" \/><\/a><\/figure>\n\n\n\n<p>si bootstrap no funcionara, veriamos algo como: <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-10.png\"><img loading=\"lazy\" decoding=\"async\" width=\"564\" height=\"220\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-10.png\" alt=\"\" class=\"wp-image-290\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-10.png 564w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-10-300x117.png 300w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Asi que con eso concluimos la parte de incluir bootstrap en el proyecto, ahora procederemos a hacer un formulario de login.<\/p>\n\n\n\n<p>Creamos un archivo en <strong>resources\/views\/auth\/login.blade.php<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php line-numbers\">    &lt;!doctype html&gt;\n    &lt;html lang=\"{{ str_replace('_', '-', app()-&gt;getLocale()) }}\"&gt;\n    &lt;head&gt;\n        &lt;meta charset=\"utf-8\"&gt;\n        &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"&gt;\n        &lt;meta name=\"description\" content=\"Formulario Login, mascotas Perdidas\"&gt;\n        &lt;meta name=\"author\" content=\"Login,Mascotas Perdidas\"&gt;\n        &lt;title&gt;Signin Template \u00b7 Bootstrap v5.3&lt;\/title&gt;\n\n        @vite('resources\/js\/app.js')\n\n        &lt;!-- Favicons --&gt;\n    {{-- &lt;link rel=\"apple-touch-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/apple-touch-icon.png\" sizes=\"180x180\"&gt;\n    &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-32x32.png\" sizes=\"32x32\" type=\"image\/png\"&gt;\n    &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon-16x16.png\" sizes=\"16x16\" type=\"image\/png\"&gt;\n    &lt;link rel=\"manifest\" href=\"\/docs\/5.3\/assets\/img\/favicons\/manifest.json\"&gt;\n    &lt;link rel=\"mask-icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/safari-pinned-tab.svg\" color=\"#712cf9\"&gt;\n    &lt;link rel=\"icon\" href=\"\/docs\/5.3\/assets\/img\/favicons\/favicon.ico\"&gt; --}}\n    &lt;meta name=\"theme-color\" content=\"#712cf9\"&gt;\n\n\n        &lt;style&gt;\n        .bd-placeholder-img {\n            font-size: 1.125rem;\n            text-anchor: middle;\n            -webkit-user-select: none;\n            -moz-user-select: none;\n            user-select: none;\n        }\n\n        @media (min-width: 768px) {\n            .bd-placeholder-img-lg {\n            font-size: 3.5rem;\n            }\n        }\n\n        .b-example-divider {\n            height: 3rem;\n            background-color: rgba(0, 0, 0, .1);\n            border: solid rgba(0, 0, 0, .15);\n            border-width: 1px 0;\n            box-shadow: inset 0 .5em 1.5em rgba(0, 0, 0, .1), inset 0 .125em .5em rgba(0, 0, 0, .15);\n        }\n\n        .b-example-vr {\n            flex-shrink: 0;\n            width: 1.5rem;\n            height: 100vh;\n        }\n\n        .bi {\n            vertical-align: -.125em;\n            fill: currentColor;\n        }\n\n        .nav-scroller {\n            position: relative;\n            z-index: 2;\n            height: 2.75rem;\n            overflow-y: hidden;\n        }\n\n        .nav-scroller .nav {\n            display: flex;\n            flex-wrap: nowrap;\n            padding-bottom: 1rem;\n            margin-top: -1px;\n            overflow-x: auto;\n            text-align: center;\n            white-space: nowrap;\n            -webkit-overflow-scrolling: touch;\n        }\n        &lt;\/style&gt;\n\n        &lt;style&gt;\n            \/* sign-in  *\/\n            html,\n    body {\n    height: 100%;\n    }\n\n    body {\n    display: flex;\n    align-items: center;\n    padding-top: 40px;\n    padding-bottom: 40px;\n    background-color: #f5f5f5;\n    }\n\n    .form-signin {\n    max-width: 330px;\n    padding: 15px;\n    }\n\n    .form-signin .form-floating:focus-within {\n    z-index: 2;\n    }\n\n    .form-signin input[type=\"email\"] {\n    margin-bottom: -1px;\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0;\n    }\n\n    .form-signin input[type=\"password\"] {\n    margin-bottom: 10px;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0;\n    }\n        &lt;\/style&gt;\n\n        \n        &lt;!-- Custom styles for this template --&gt;\n        &lt;link href=\"sign-in.css\" rel=\"stylesheet\"&gt;\n    &lt;\/head&gt;\n    &lt;body class=\"text-center\"&gt;\n        \n    &lt;main class=\"form-signin w-100 m-auto\"&gt;\n    &lt;form&gt;\n        {{-- &lt;img class=\"mb-4\" src=\"https:\/\/getbootstrap.com\/docs\/5.3\/assets\/brand\/bootstrap-logo.svg\" alt=\"\" width=\"72\" height=\"57\"&gt; --}}\n        &lt;h1 class=\"h3 mb-3 fw-normal\"&gt;Iniciar Sesion&lt;\/h1&gt;\n\n        &lt;div class=\"form-floating\"&gt;\n        &lt;input type=\"email\" class=\"form-control\" id=\"floatingInput\" placeholder=\"name@example.com\"&gt;\n        &lt;label for=\"floatingInput\"&gt;Email address&lt;\/label&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-floating\"&gt;\n        &lt;input type=\"password\" class=\"form-control\" id=\"floatingPassword\" placeholder=\"Password\"&gt;\n        &lt;label for=\"floatingPassword\"&gt;Password&lt;\/label&gt;\n        &lt;\/div&gt;\n\n        &lt;div class=\"checkbox mb-3\"&gt;\n        &lt;label&gt;\n            &lt;input type=\"checkbox\" value=\"remember-me\"&gt; Remember me\n        &lt;\/label&gt;\n        &lt;\/div&gt;\n        &lt;button class=\"w-100 btn btn-lg btn-primary\" type=\"submit\"&gt;Sign in&lt;\/button&gt;\n        &lt;p class=\"mt-5 mb-3 text-muted\"&gt;&amp;copy; 2017\u20132022&lt;\/p&gt;\n    &lt;\/form&gt;\n    &lt;\/main&gt;\n\n\n        \n    &lt;\/body&gt;\n    &lt;\/html&gt;<\/code><\/pre>\n\n\n\n<p>Lo que deber\u00eda mostrarnos una vista como esta:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11.png\"><img loading=\"lazy\" decoding=\"async\" width=\"898\" height=\"608\" src=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11.png\" alt=\"\" class=\"wp-image-291\" srcset=\"https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11.png 898w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11-300x203.png 300w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11-768x520.png 768w, https:\/\/ventiladorcito.com\/blog\/wp-content\/uploads\/2023\/01\/image-11-624x422.png 624w\" sizes=\"auto, (max-width: 898px) 100vw, 898px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Con esto concluimos esta entrada, tenemos bootstrap instalado y una vista de login (a\u00fan no funcional, pero de ac\u00e1 en adelante iremos un poco m\u00e1s r\u00e1pido y lo que har\u00e9 ser\u00e1 agregar las entradas a los commit donde pueden ver los cambios que subo) por ahora cierro ac\u00e1.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Referencias:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>la vista del login fue extraida de los <a href=\"https:\/\/getbootstrap.com\/docs\/5.3\/examples\/sign-in\/\" target=\"_blank\" rel=\"noreferrer noopener\">ejemplos de bootstrap<\/a><\/li>\n\n\n\n<li>Los datos de vite de la <a href=\"https:\/\/laravel.com\/docs\/9.x\/vite#main-content\" target=\"_blank\" rel=\"noreferrer noopener\">documentacion de laravel sobre vite<\/a><\/li>\n<\/ul>\n\n\n\n<p>Link a cambios realizados en github: <a rel=\"noreferrer noopener\" href=\"https:\/\/github.com\/p431i7o\/mascotas-perdidas-py\/commit\/6dd05767c7db79d91cc9eb920b2065f6dc99ea7c\" target=\"_blank\">6dd05767c7db79d91cc9eb920b2065f6dc99ea7c<\/a>:<\/p>\n\n\n\n<p>Por ahora lo dejo aqui, en el siguiente post haremos los siguientes cambios:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li> actualizaremos este formulario de login<\/li>\n\n\n\n<li>crearemos un formulario de registro<\/li>\n\n\n\n<li>tambien comprobaremos el envio de email al crear una cuenta \n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Saludos<\/p>\n","protected":false},"excerpt":{"rendered":"<p>22 de Enero A continuaci\u00f3n necesitamos crear las vistas para login y register pues al intentar entrar veremos un error similar a este: Para las vistas usar\u00e9 bootstrap, es una especie de framework para front-end, permite normalizar algunas caracter\u00edsticas visuales dentro del navegador, para diferentes etiquetas y componentes de formulario, sin mencionar que nos facilita [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-284","post","type-post","status-publish","format-standard","hentry","category-miscelaneas"],"_links":{"self":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/284","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/comments?post=284"}],"version-history":[{"count":3,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/284\/revisions"}],"predecessor-version":[{"id":325,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/posts\/284\/revisions\/325"}],"wp:attachment":[{"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/media?parent=284"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/categories?post=284"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ventiladorcito.com\/blog\/wp-json\/wp\/v2\/tags?post=284"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}