Soluciones IT Django es un “Framework web”, es decir, una plataforma de desarrollo enfocada al entorno web. Es muy útil, ya que proporciona una serie de herramientas para facilitar la creación de páginas, siguiendo los principios DRY (Don’t Repeat Yourself; No Te Repitas) para evitar duplicidad en las líneas de código e invertir el menor esfuerzo posible. Por ejemplo, levantar un panel de administración básico sólo requiere un par de líneas de Python. También se adscribe al diseño MVC (Modelo-Vista-Controlador), por lo que las diferentes partes del sitio están claramente separadas. Por ejemplo, el código de acceso a los datos es completamente independiente al que gobierna el aspecto externo de la página INDICE PREPARACIÓN PARA LA APLICACIÓN | CREACIÓN DE LA BASE DE DATOS | CREACIÓN DE UNA APLICACIÓN | PÁGINAS WEBS DE INTERÉS PREPARACIÓN PARA LA APLICACIÓN Una vez tengamos nuestro FreeBSD instalado, procedemos a instalar los paquetes necesarios para poder crear una aplicación web con Django. Ejecutamos la siguiente linea para asegurarnos de que los paquetes que ya tenemos están actualizados: pkg update && pkg upgrade -y Como es la primera vez que utilizamos el comando “pkg” nos pedirá que instalemos la herramienta de gestión de paquetes. A continuación instalaremos los paquetes que usaremos de aquí en adelante: page 1 / 13 Soluciones IT pkg install bash ap24-mod_wsgi4 py27-virtualenv mysql56-server Una vez se hayan instalado, cambiaremos la shell al Bash. Esto lo hacemos porque el comando virtualenv, que usaremos más adelante, funciona mejor con esta shell. Para ello simplemente debemos de introducir "bash". El siguiente paso será crear un directorio donde guardaremos los archivos de nuestra aplicación web y dirigirnos a este. mkdir -p /www/data/AplicacionWeb cd /www/data/AplicacionWeb Ahora procedemos a crear el entorno virtual para Python y a activarlo: virtualenv venv source venv/bin/activate Una vez hecho esto, nos aseguraremos de que las herramientas de Python están actualizadas e instalaremos el conector entre MySQL y Python: pip install -U setuptools pip pip install django mysql-python Por último añadiremos las siguientes lineas al archivo de configuración de FreeBSD (cuya ruta es /etc/rc.conf): mysql_enable="YES" apache24_enable="YES" Volver al principio de la página CREACIÓN DE LA BASE DE DATOS Arrancamos MySQL-Server: page 2 / 13 Soluciones IT service mysql-server start Ahora ejecutamos el siguiente comando para establecer contraseña al usuario root en MySQL y demás configuraciones: mysql_secure_installation Ejecutamos MySQL y creamos una base de datos que se llame “mysite”, por ejemplo, y luego creamos un usuario para esa base de datos: create database mysite; grant all privileges on mysite.* to 'mysite'@'localhost' identified by 'password'; Volver al principio de la página CREACIÓN DE UNA APLICACIÓN Como ejemplo, usaremos una aplicación que trate sobre un blog. Es importante que estemos en el directorio /www/data/AplicacionWeb a la hora de ejecutar los siguientes comandos. Para empezar a crear la base de nuestro proyecto escribiremos lo siguiente: django-admin.py startproject mysite . Esto nos crea una carpeta con el nombre “mysite”, que contiene cuatro archivos .py que son la base de nuestro proyecto, y además un archivo llamado “manage.py” que nos servirá para arrancar nuestra aplicación y para crear las tablas de nuestros modelos en la base de datos. Después crearemos la carpeta de nuestra aplicación ejecutando lo siguiente: django-admin.py startapp blog Esto ha creado otra carpeta llamada "blog" y otros archivos .py en su interior. page 3 / 13 Soluciones IT Ahora vamos a cambiar el archivo de configuración del proyecto. Se llama settings.py y está dentro de la carpeta "mysite". """ Django settings for mysite project. Generated by 'django-admin startproject' using Django 1.9.6. For more information on this file, see https://docs.djangoproject.com/en/1.9/topics/settings/ For the full list of settings and their values, see https://docs.djangoproject.com/en/1.9/ref/settings/ """ import os # Build paths inside the project like this: os.path.join(BASE_DIR, ... ) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.9/howto/deployment/checklist / # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = 'v!mg@fm4fvs3gct-f(4do@(+o)%xgxj$g^+m)gyh_sgepp%ulr' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', page 4 / 13 Soluciones IT 'blog', ] MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] ROOT_URLCONF = 'mysite.urls' TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates'),], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ] WSGI_APPLICATION = 'mysite.wsgi.application' # Database # https://docs.djangoproject.com/en/1.9/ref/settings/#databases DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mysite', 'USER': 'mysite', 'PASSWORD': 'password', 'HOST': '/tmp/mysql.sock', } page 5 / 13 Soluciones IT } # Password validation # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-va lidators AUTH_PASSWORD_VALIDATORS = [ { 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValida tor', }, { 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', }, { 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', }, { 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', }, ] # Internationalization # https://docs.djangoproject.com/en/1.9/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/1.9/howto/static-files/ STATIC_URL = '/static/' page 6 / 13 Soluciones IT Hemos añadido el nombre de la aplicación a "Installed Apps" y además hemos cambiado la sección de "Database", donde hemos puesto que es MySQL, el nombre de nuestra base de datos, el usuario y la contraseña. Importante: Recuerda que tendrás que cambiar donde pone "password" y poner la contraseña que estableciste para el usuario de la base de datos. Ahora abriremos el archivo models.py, que se encuentra dentro de la carpeta "blog", y pondremos lo siguiente: from __future__ import unicode_literals from django.db import models from django.contrib import admin # Create your models here. class BlogPost(models.Model): title=models.CharField(max_length=150) body=models.TextField() time=models.DateTimeField() class BlogPostAdmin(admin.ModelAdmin): list_display = ('title', 'body', 'time') admin.site.register(BlogPost, BlogPostAdmin) Este archivo es un modelo de Django, el cual es una descripción de los datos en la base de datos, representada como código de Python. Además nos sirve para crear las tablas en nuestra base de datos, tal y como vamos a ver a continuación. Para que se cree en la base de datos lo que hemos puesto en el modelo, debemos de ejecutar las dos siguientes lineas: ./manage.py makemigrations ./manage.py migrate Recuerda que el archivo manage.py se encuentra en /www/data/AplicacionWeb. Ahora que ya tenemos nuestra tabla creada en la base de datos, vamos a proceder a entrar en el panel de administración de nuestra aplicación. page 7 / 13 Soluciones IT Para ello tenemos que crear un superusario ejecutando lo siguiente: ./manage.py createsuperuser Una vez que lo hayamos creado, arrancamos la aplicación con la siguiente linea: ./manage.py runserver 192.168.56.101:8000 Donde pone "192.168.56.101", tendrás que poner tu ip de la tarjeta host-only. Ahora abrimos un navegador, iremos a http://192.168.56.101:8000/admin y loguearemos con el usuario que hemos creado antes. Una vez logueado nos saldrá una pantalla así: Como puedes observar, dentro de Blog, está la tabla Blog posts que se ha creado a través el archivo models.py. El siguiente paso es darle a "add" y añadiremos dos o tres posts con lo que queramos. Estos se añadirán automáticamente en la base de datos cuando los guardemos. Una vez hecho esto último vamos a proceder a añadirle una vista a nuestra aplicación. Para ello vamos a crear dos carpetas dentro de la carpeta "blog": templates y static. Dentro de la carpeta "templates" crearemos un archivo HTML que se llamará archive.html y contendrá lo siguiente: {% load staticfiles %} <html> <head> <title>Mi Blog en Django</title> page 8 / 13 Soluciones IT <link rel="stylesheet" href= "//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css"> <link rel="stylesheet" href= "//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css "> <link rel="stylesheet" href="{% static 'css/blog.css' %}"> <link href= "http://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext " rel="stylesheet" type="text/css"> </head> <body> <div class="page-header"> <h1><a href="/">Mi blog</a></h1> </div> <div class="content container"> <div class="row"> <div class="col-md-8"> {% for post in posts %} <div class="post"> <div class="date"> {{ post.time }} </div> <h1><a href="">{{ post.title }}</a></h1> <p>{{ post.body }}</p> </div> {% endfor %} </div> </div> </div> </body> </html> Y dentro de la carpeta "static" crearemos otra carpeta llamada "css" donde crearemos un archivo llamado blog.css, cuyo contenido será el siguiente: h1 a { color: #FCA205; font-family: 'Lobster'; } .page-header { background-color: #ff9400; margin-top: 0; padding: 20px 20px 20px 40px; page 9 / 13 Soluciones IT } .page-header h1, .page-header h1 a, .page-header h1 a:visited, .page-h eader h1 a:active { color: #ffffff; font-size: 36pt; text-decoration: none; } .content { margin-left: 40px; } h1, h2, h3, h4 { font-family: 'Lobster', cursive; } .date { float: right; color: #828282; } .save { float: right; } .post-form textarea, .post-form input { width: 100%; } .top-menu, .top-menu:hover, .top-menu:visited { color: #ffffff; float: right; font-size: 26pt; margin-right: 20px; } .post { margin-bottom: 70px; } .post h1 a, .post h1 a:visited { color: #000000; } Ahora que ya tenemos el HTML y el CSS para mostrar los blogs, vamos a modificar los archivos page 10 / 13 Soluciones IT necesarios. Primero modificaremos el archivo views.py de la carpeta "blog": from from from from django.shortcuts import render django.http import HttpResponse django.template import loader, Context blog.models import BlogPost # Create your views here. def archive(request): posts = BlogPost.objects.all() mi_template = loader.get_template("archive.html") context = {'posts':posts,} return HttpResponse(mi_template.render(context, request)) Luego editaremos el archivo urls.py de la carpeta "mysite": """mysite URL Configuration The `urlpatterns` list routes URLs to views. For more information plea se see: https://docs.djangoproject.com/en/1.9/topics/http/urls/ Examples: Function views 1. Add an import: from my_app import views 2. Add a URL to urlpatterns: url(r'^$', views.home, name='home') Class-based views 1. Add an import: from other_app.views import Home 2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='hom e') Including another URLconf 1. Import the include() function: from django.conf.urls import url , include 2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls')) """ from django.conf.urls import * from django.contrib import admin urlpatterns = [ url(r'^$', include('blog.urls')), page 11 / 13 Soluciones IT url(r'^mysite/blog', include('blog.urls')), url(r'^admin/', admin.site.urls), ] Y por último crearemos un archivo llamado urls.py en la carpeta "blog" que contendrá lo siguiente: from django.conf.urls import * from blog.views import archive urlpatterns = [ url(r'^$', archive), ] Ahora ya solo nos queda ejecutar nuestra aplicación: ./manage.py runserver 192.168.56.101:8000 ¡Y este es el resultado de nuestro blog hecho con Django! Volver al principio de la página PÁGINAS WEBS DE INTERÉS Aquí encontrarás algunas paginas webs que me han servido de ayuda y que contienen mucha información acerca de Django. Página oficial de Django LibrosWeb page 12 / 13 Soluciones IT Código Facilito Volver al principio de la página <span style="color: #333333;"><span style="font-family: monospace,mono space;"><span style="font-size: 10pt;">mysql_enable="YES"</span></span ></span> <span style="color: #333333;"><span style="font-family: monospace,mono space;"><span style="font-size: 10pt;">apache24_enable="YES"</span></s pan></span> <span style="border: none; line-height: 0.58cm; margin-right: 0.74cm; orphans: 1; padding: 0cm;"><span style="color: #333333;"><span style=" font-family: monospace,monospace;"><span style="font-size: 10pt;">Ahor a ejecutamos el siguiente comando para establecer contraseña al usuari o root en mysql y demás configuraciones:</span></span></span></span> page 13 / 13 Powered by TCPDF (www.tcpdf.org)