WebMatrix parte 9–Publicando nuestro sitio

by armando 26. January 2011 09:46

Hemos recorrido mucho desde nuestros comienzos creando simples archivos HTML. Aprendimos como aplicar estilos y hasta desarrollamos un sitio totalmente dinámico con bases de datos ‘por atrás’, generándose en el servidor y luego enviándose las páginas al cliente.

Aún siendo que nuestra aplicación fue muy sencilla, es la base sobre la cual una aplicación web completa hecha en ASP.NET y WebMatrix estará basada. Así de simple!

Buscando un proveedor de hosting.

Todavía nos queda un paso, y es que nadie podrá visitar nuestro sitio si no lo publicamos en algún lado, no?

WebMatrix incluye una galería de proveedores de hosting seleccionados, basta con ir a “Sitio” y veremos una imagen como la siguiente

clip_image001

Alternativamente podemos ir directamente a http://www.microsoft.com/web/hosting y buscar un hosting que nos resulte conveniente dentro de una basta variedad.

Registrándonos en Cytanium

En este capítulo, vamos a usar Cytanium, porque tienen una oferta de hosting GRATUITO para WebMatrix.

Solo tenemos que visitar su sitio web y buscar el botón “Free signup” (Registrarse gratis!)

clip_image002[5]

Nos harán preguntas muy elementales, y ya estamos!

clip_image003

 

Configurando WebMatrix para publicar en Cytanium

Luego de clickear “Register”, recibimos un email desde noreply@cytanium.com. Buscamos dentro de este email una sección titulada “WebMatrix – Web Deploy (Preferred)”, va a tener la siguiente apariencia

clip_image004[5]

Y en nuestro WorkSpace en WebMatrix buscamos el botón “Publicar”, o “Publish” y lo bajamos en inglés Sonrisa. Desplegamos y vamos a “Configuraciones” (Settings).

clip_image005

Se nos va a abrir algo mas o menos como la imagen siguiente, donde completaremos los campos con la información que recibimos del email del cual acabamos de hablar

clip_image006[5]

Clickeamos “Validar conexión” (Validate connection) para asegurarnos de que no nos equivocamos

clip_image007

Si todo va bien deberíamos ver la confirmación de que no hubo problemas, como vemos arriba.

Guardamos los cambios de configuración y salimos para clickear en “Publicar” (Publish) como se aprecia a continuación, ya casi estamos!

clip_image008[5]

Vamos a ver un “preview” de lo que estamos publicando, donde WebMatrix determina los cambios en el sitio y lo que se va a terminar por publicar. Dependiendo de lo que hayamos hecho recientemente, puede ser que se vean diferentes estados, pero no es para preocuparse, simplemente asegurémonos de que todo lo que hayamos modificado esté checkeado, ejemplo:

clip_image009

Cuando hagamos click en “Continuar” (Continue) se dará comienzo al proceso de publicación. Cuando todo esté terminado, se nos avisará y pondrá a disposición una URL para “ir a ver” como quedó.

clip_image010[5]

 

Usando las configuraciones de publicación

Quizás hayas notado en el formulario de configuraciones de publicación, que podemos “Importar” las configuraciones. Algunos proveedores de hosting nos envían un documento que contiene las configuraciones ya pre-establecidas para hacer este proceso todavía mas sencillo.

Para hacer esto, simplemente clickeamos “Importar configuraciones de publicación” (Mas probablemente nos llegue como “Publish Settings”, y si nuestro WebMatrix está en inglés será “Import Publish Settings”), buscamos el archivo que recibimos por email (previamente guardado en el disco rígido), y listo, cuando lo abrimos, WebMatrix va a leer toda la configuración que necesite incluyendo las conexiones a la/s base/s de datos.

 

Viendo nuestro sitio online

Si clickeamos la URL que nos mostró WebMatrix cuando terminó de publicar, vamos a ver el sitio “andando” ya en internet. Si llegamos a ver un cartel diciendo “Website Coming Soon”, lo mas probable es que sea porque todavía no tenemos una página por defecto establecida. Por ahora simplemente seleccionamos la URL y agregamos /dataMovies.cshtml al final, por ejemplo:

http://laurencemoro02.webmatrix01.cytanium.com/dataMovies.cshtml

(Por supuesto que la primera parte de SU sitio va a ser diferente, según el usuario)

Hecho esto, vamos a ver por fin nuestro sitio ‘up and running’ en vivo y en directo desde internet!

clip_image011

Nuestro sitio está 100% funcional por lo que podemos hacer todo lo que hicimos cuando lo estábamos probando. Por ejemplo, probemos agregar una película

clip_image012[5]

 

Sincronizando nuestros sitios

Esto podría volverse interesante. El tema es que ahora tenemos dos sitios separados, uno “Online” y otro “Offline”. El que está “Online” ahora (que acabamos de agregar una película) tiene una película nueva en la BD que el que se quedó “abajo” no tiene.

Por suerte, WebMatrix nos da una mano a la hora de sincronizar nuestros sitios ante estos escenarios. “Descargar el sitio publicado” (Download Published Site). Por ejemplo, aquí tenemos la versión “Local” (Offline) andando:

clip_image013

Es evidente que no tiene la 6ta película que acabamos de agregar, si publicamos esto así como está, vamos a sobreescribir (y perder) los cambios que se realizaron en el servidor. Para esto clickeamos “Descargar Sitio Publicado”

clip_image014[5]

Ahora, WebMatrix se dará cuenta de cuales son los archivos que fueron modificados en el servidor y nos permitirá descargarlos, incluso la base de datos.

clip_image015

Seleccionamos y des-seleccionamos según nuestro propio criterio (si tenemos alguno, también podemos descargar todo lo que se modificó), clickeamos “Continuar” y el procedimiento será similar al de “Publicar”. Nos enteraremos cuando termine.

clip_image016[5]

Ahora, si volvemos a correr el sitio “Localmente”, vamos a ver todos los datos que la versión “Online” tenía al momento de la descarga.

clip_image018

 

Resumen

¡Ya estamos! Hemos creado nuestro sitio web usando WebMatrix. Empezamos desde un HTML estático y muy básico y terminamos con un sitio basado en bases de datos capaz de actualizar, borrar o modificar registros (el famoso ABM, altas bajas y modificaciones) que funciona en internet. También vimos como mantener nuestras “versiones” sincronizadas.

Ya estás adentro del mundo del desarrollo web, bienvenido Risa ! Si querés aprender mas sobre WebMatrix, siempre podés visitar http://web.ms/webmatrix

Tags: , ,

webmatrix | web | dotNET

Webmatrix Parte 6, Creando un formulario para agregar datos

by Armando 25. January 2011 22:32

Hasta ahora hemos visto cómo crear un sitio web en WebMatrix, y cómo utilizar el estilo y el diseño para hacer las páginas más livianas y fáciles de mantener, así como más rápidas de cargar para el navegador. Estas páginas están creadas para mostrar datos, y ahora aprenderemos como hacer páginas para insertar información en la base de datos.

Crear y vincular una página de carga de datos

Usando WebMatrix, en el área de archivos, crear una nueva página y llamarla 'AddData.cshtml. (Mantendremos la nomenclatura en inglés para el nombre de archivos y variables en este tutorial.)

Borrar el contenido predeterminado de la página que se creó para usted por WebMatrix, y sustituirlo por

<h1>Add a New Movie to the database</h1>

Ahora regresar a 'dataMovies.cshtml'. Abrirlo, y deberá verse algo como esto:

@{
    var db= Database.Open("Movies");
    var sqlQ = "SELECT * FROM Favorites";
    var data = db.Query(sqlQ);   
}
 
<div id="movieslist">
  <ol>
    @foreach(var row in data){
      <li><a href="#">@row.Name, @row.Genre, @row.ReleaseYear</a></li>
    }
  </ol>
</div>
 

Antes de la </ div> de cierre, añadimos la siguiente línea de código HTML (Para crear un hipervínculo)

<a href="AddMovie.cshtml">Add a new movie</a>

Ejecute el sitio y vea la página en el navegador. Veremos algo como esto:

Click en "Añadir una nueva película” y veremos la página que se creó anteriormente.

No hay mucho que ver todavía. Vamos a añadir algo en el próximo paso.

Como ejercicio adicional, quizá hayas notado que el texto "Añadir una nueva película a la base de datos” tiene un estilo diferente del resto. Es un <h1>, pero no se ha mostrado la misma manera que la cabecera h1. A ver si podemos arreglar eso! (Una pista, la cabecera h1 pareciera ser un hijo de la etiqueta <header>, pero esto no es así. ¿Qué le agregarías al archivo CSS para el estilo de esta misma manera?)

Creación de un formulario “Añadir Película”

Normalmente a través de HTTP el navegador hace solicitudes al servidor usando el verbo GET del protocolo HTTP, que, como su nombre indica, obtiene información del servidor. Hemos estado haciendo esto todo el tiempo, porque el uso de GET está implícito en las páginas en forma de peticiones de servidor. El protocolo HTTP también es compatible con una variable llamada POST, que le permite enviar información al servidor.

Es bueno tener una aplicación dinámica que muestre información de una base de datos, pero el siguiente paso lógico sería enviar datos al servidor, que el servidor haga algo con los datos, y luego devolver el resultado. Como cuando vemos sitios donde se escribe algo de información y pulse el botón Enviar para enviar esa información al servidor.

Para esto se utilizan formularios HTML. Al hacer clic en Enviar, el navegador envía la información en los campos del formulario al servidor mediante el POST. Una vez más, todo esto sucede “por detrás” y por defecto, no necesitamos hacer nada especial para usarlo, pero es útil para el código en el servidor saber qué tipo de acción una solicitud está utilizando, para responder en consecuencia. Veamos cómo hacerlo para añadir películas a tu base de datos.

Empezaremos con una forma muy sencilla. No es muy bonito, pero hace el trabajo (Ya vamos a ver cómo hacerlo bien “Pro” usando CSS).

   1:  <h1>Add a New Movie to the Database</h1>
   2:    <form action="" method="post">
   3:      <p>Name:<input type="text" name="formName" /></p>
   4:      <p>Genre:<input type="text" name="formGenre" /></p>
   5:      <p>Year:<input type="text" name="formYear" /></p>
   6:      <p><input type="submit" value="Add Movie" /></p>
   7:  </form>

Así es como se verá. Como dijimos, no es muy bonito, pero más tarde vamos a crear un CSS para que se vea genial.

Ahora echemos un vistazo al HTML que acabamos de escribir para crear este form.

<form action="" method="post">

Lo primero es la nueva etiqueta <form>. Esto define el form, y le dice al servidor que cuando el usuario presiona el botón <Enviar>, que debe estar presente en dicho form, la acción será un HTTP POST. En virtud del hecho de que el parámetro de acción está vacía, esta misma página (es decir, AddMove.cshtml) procesará el mensaje del form.

<p>Name:<input type="text" name="formName" /></p>
<p>Genre:<input type="text" name="formGenre" /></p>
<p>Year:<input type="text" name="formYear" /></p>
 

Dentro de la etiqueta <form> verás que hay tres controles <input>. Estos utilizan la <input> control de HTML, que puede tener un número de ajustes de tipo, y en este caso el tipo es "texto", que muestra un cuadro de texto básico donde el usuario puede introducir texto. Cada una recibe un nombre que será la variable que utiliza el servidor para almacenar el valor que el usuario entra en el cuadro de texto antes de enviarlo.

<p><input type="submit" value="Add Movie" /></p>

Por último, tenemos un control <input> con el tipo 'submit' que define el botón de enviar. Cuando el usuario pulsa este botón, la acción HTTP POST será llamada y los datos que el usuario haya introducido se envían al servidor.

En este momento si pulsa el botón, no pasará nada porque aún no hemos escrito el código para controlar la devolución de datos desde el servido. Ahora nos encargaremos de este punto.

Manipulación de los datos del formulario

Cuando creamos el formulario, el parámetro de acción quedó intencionalmente vacío, lo que significa que está especificando que es esta misma la página que recibirá la información del formulario y hará “algo” con esta información.

Vamos a agregar un bloque de código que se ejecute cuando cargamos la página. Para ello, escribimos el siguiente código al principio de la página:

   1:  @{
   2:    // Code to execute
   3:  }
   4:   
   5:  <h1>Add a New Movie to the Database</h1>
   6:  <form action="" method="post">
   7:    <p>Name:<input type="text" name="formName" /></p>
   8:    <p>Genre:<input type="text" name="formGenre" /></p>
   9:    <p>Year:<input type="text" name="formYear" /></p>
  10:    <p><input type="submit" value="Add Movie" /></p>
  11:  </form>
  12:   

Anteriormente, vimos que la primera vez que se llamó a la página, escribiendo su dirección en su navegador (o haciendo clic en Ejecutar para iniciar la web), el navegador solicitó las páginas utilizando el verbo HTTP GET. Más tarde, cuando se pulsa el botón Enviar, como la propiedad de “action” estaba en blanco, la operación HTTP POST llamó a su misma página.

Así, en el código, tendrá que saber una manera de entender es la página que se recupera mediante un GET o está siendo ejecutado mediante un POST. Afortunadamente, el propio Framework permite comprobar el verbo sin entrar en la complejidad de romper los encabezados HTTP para inspeccionar qué tipo de mensaje que está recibiendo, sólo hay que utilizar if(IsPost), cuando devuelve true, significa que el usuario ha utilizado un formulario para enviar la información.

   1:  @{
   2:    If(IsPost)
   3:    {
   4:      // Do something on the POST
   5:    }
   6:  }
   7:   

Cuando el navegador haga un request, se estará enviando un mensaje que contiene "FormName = algo ',' formGenre = algo ',' formYear = algo" y así sucesivamente.

Así, primero tendrá que establecer algunas variables de servidor para guardar estos datos y entonces podremos leer el mensaje HTTP. Esto es mucho más fácil de lo que parece :)

   1:  @{
   2:    var MovieName="";
   3:    var MovieGenre="";
   4:    var MovieYear="";
   5:    if(IsPost){
   6:      MovieName=Request["formName"];
   7:      MovieGenre=Request["formGenre"];
   8:      MovieYear=Request["formYear"];
   9:    }
  10:  }

Aquí se puede ver que se han creado tres variables (MovieName, MovieGenre y MovieYear) y se inicializan con los valores que el usuario envía. En el siguiente paso vamos a añadir el código para abrir la base de datos y agregar esta información.

Agregando a la base de datos

En el artículo anterior, cuando se tomaron los datos de la base de datos, se utilizó 'SELECT' en la consulta SQL que selecciona los datos de la base de datos para poder leerlos. Ahora vamos a usar ‘INSERT’ para insertarlos

El comando INSERT de SQL utiliza la sintaxis siguiente

INSERT INTO tabla (columna 1, Columna2, ... ColumnaN) VALUES (valor1, valor2, ... valorN)

Veamos cómo utilizar INSERT en nuestro código:

   1:  @{
   2:  var MovieName="";
   3:  var MovieGenre="";
   4:  var MovieYear="";
   5:    if(IsPost){
   6:      MovieName=Request["formName"];
   7:      MovieGenre=Request["formGenre"];
   8:      MovieYear=Request["formYear"];
   9:      var SQLINSERT = "INSERT INTO Favorites (Name, Genre, ReleaseYear) VALUES (@1, @2, @3)";
  10:      var db = Database.Open("Movies");
  11:      db.Execute(SQLINSERT, MovieName, MovieGenre, MovieYear);
  12:    }
  13:  }

Se puede ver que creamos una cadena SQLINSERT para mantener el orden. Usando ‘Razor’ podemos especificar los valores de parámetros de esta cadena, así que en vez de tratar de sumar los valores de 'moviename', 'MovieGenre' y 'MovieYear', a la cadena, simplemente usamos @ 1, @ 2 y 3 @. Cuando se ejecuta la consulta, el framework se encarga de “limpiar” los datos de caracteres no admitidos. Esto evita que la gente pase código SQL como un parámetro, en un ataque llamado "inyección de SQL”.

A continuación se abre la base de datos, y luego se llama al método de ejecución en la base de datos para decirle que para ejecutar esta consulta de inserción. Los valores se sustituyen en @1, @2…, y se agregan a la base de datos.

Vamos a añadir una línea más después de la DB.Execute (), que redirige al usuario a la página donde pueden ver las películas favoritas, y pueden ver los resultados de lo que acaba de agregar.

Response.Redirect ("dataMovies.cshtml");

Ahora que podemos ejecutar la página y vemos el form agreguemos algunos datos:

Pulsamos el botón "Añadir película”. El servidor agrega los datos a la base de datos y a continuación nos re direccionará de nuevo a la lista para ver los resultados, y se puede ver que nuestra película favorita se ha agregado!

Importante: En este artículo hemos visto cómo tomar la entrada del usuario y añadirlo directamente a la base de datos lo cual ya está bastante bien, pero antes de implementar un esto en “el mundo real”, hay que acordarse de hacer lo siguiente

- Comprobar los parámetros de entrada de datos válidos, y proporcionar al usuario información precisa sobre lo que han introducido de forma incorrecta. Por ejemplo, si no se introduce un 'Año' que parezca válido, debe informarse, en lugar de permitir que la información llegue al a base de datos.

- Comprobar los parámetros de entrada para valores que puedan ser utilizados por un pirata infame para dañar su base de datos. Un ataque común se llama inyección SQL donde el usuario envía un comando SQL en un formulario, y el código en el servidor lo ejecuta, lo que podría dañar o exponer datos privados.

Pueden aprender más detalles sobre el uso de bases de datos en WebMatrix en el post anterior.

Tags: , , ,

ASPX | Comienzos | dotNET | webmatrix


Concurso CodeCamp

Conocé mas acerca del mayor evento de la
Comunidad Microsoft en Argentina.

WWW.CODECAMP.COM.AR

------------------------------------------------

Para los que están Participando:

-Que es una célula?

-Como puedo promocionar mi proyecto?

-Dreamspark

Administradores:

Armando Meabe.
Guillermo Bellmann.
Miguel Saez.
Nicolás Vilela.
Ivana Tilca.

Esperamos que disfrutes de este sitio, lo hicimos dando nuestro mayor esfuerzo.

Nunca te olvides:
El límite es tu imaginación.

Especialistas Microsoft

Daniel Levi (IT Pro´s)

Daniel Priego (Expression Studio)

Debora Di Piano (Team Fundation Server)

 


Channel 9 - Visual Studio 2010 and .NET Framework 4 Training Course

Includes videos and hands-on-labs designed to help you learn how to utilize the Visual Studio 2010 features and a variety of framework technologies including: C# 4.0, Visual Basic 10, F#, Parallel Computing Platform, WCF, WF, WPF, ASP.NET AJAX 4.0, ASP.NET MVC Dynamic Data
Watch it online now ›

The Code Project – Tech Summit

Join us at The Code Project Tech Summit to experience the Microsoft Visual Studio 2010 launch alongside the Visual Studio team. At this virtual event you can explore, network, and learn from the experts on the latest and greatest version of Microsoft Visual Studio.
Watch it online now ›