Mostrando entradas con la etiqueta html. Mostrar todas las entradas
Mostrando entradas con la etiqueta html. Mostrar todas las entradas

miércoles, agosto 28, 2013

Desplegando aplicaciones django en Ubuntu 12.04 con un servidor web Apache y el módulo mod_wsgi

Empezaremos por la instalación del software necesario, posiblemente alguno ya se encuentre instalado en nuestro equipo:


sudo apt-get install python
sudo apt-get install python-mysqldb 
sudo apt-get install apache2 libapache2-mod-wsgi
sudo apt-get install mysql-server  
sudo easy_install -U distribute
sudo pip install django 

Verificamos la correcta instalación de django, para ello vemos la versión instalada (actualmente la 1.5.2):
 
django-admin --version


Crear la base de datos y el usuario de mysql que utiliza nuestro proyecto. Una vez conectados a mysql como administrador (root) indicaremos las siguientes ordenes:

mysql>CREATE DATABASE mi_base_de_datos;
mysql>CREATE USER 'mi_usuario'@'localhost' IDENTIFIED BY 'mi_clave';
mysql>GRANT ALL PRIVILEGES ON mi_base_de_datos.* TO 'mi_usuario'@'localhost';
mysql>FLUSH PRIVILEGES;

Copiamos o creamos el proyecto Django, en el caso que sea un proyecto nuevo:

$django-admin startproject mi_proyecto
$cd mi_proyecto
$python manage.py startapp mi_aplicacion

Editamos el fichero de configuración del proyecto (mi_proyecto/settings.py) para adaptar los valores al nuevo equipo, quedaría así:


DEBUG = False
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    # ('Your Name', 'your_email@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mi_base_de_datos',                      # Or path to database file if using sqlite3.
        'USER': 'mi_usuario',                      # Not used with sqlite3.
        'PASSWORD': 'mi_clave',                  # Not used with sqlite3.
        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

ALLOWED_HOSTS = ['midominio.es']

TIME_ZONE = 'Europe/Madrid'

LANGUAGE_CODE = 'es-es'

SITE_ID = 1

USE_I18N = True

USE_L10N = True

SE_TZ = True

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/' 
 
ADMIN_MEDIA_PREFIX ='/static/admin/'
 
STATICFILES_DIRS = (
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
)

ROOT_URLCONF = 'mi_proyecto.urls'

WSGI_APPLICATION = 'mi_proyecto.wsgi.application'

TEMPLATE_DIRS = (
    '/home/usuario/mi_proyecto/mi_aplicacion/templates' 
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
     'django.contrib.admin',
     'mi_aplicacion',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)
                  
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'handlers': {
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        }
    },
    'loggers': {
        'django.request': {
            'handlers': ['mail_admins'],
            'level': 'ERROR',
            'propagate': True,
        },
    }
}
                  
Si se trata de un proyecto nuevo, creamos las tablas de la base de datos y el usuario administrador mediante:


python manage.py syncdb

Podemos verificar el correcto funcionamiento del proyecto lanzando el servidor web de desarrollo de django. Para que funcione correctamente el servidor de desarrollo en el fichero de configuración tendremos que indicar Debug=True, en caso contrario obtendremos '500 server error':


python manage.py runserver 192.168.0.1:8001


Editamos el fichero de configuración de Apache  /etc/apache2/sites-available/default para indicar dentro del <VirtualHost *:80> la configuración del módulo mod_wsgi.

El fichero quedaría así:

<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        WSGIDaemonProcess miproyecto python-path=/home/usuario/mi_proyecto/
        WSGIProcessGroup miproyecto
        WSGIScriptAlias / /home/usuario/mi_proyecto/mi_proyecto/wsgi.py
 
        Alias /static/admin/ /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/
               
        <Directory /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin>
            Order allow,deny
            Allow from all
        </Directory>
 
        <Directory /home/usuario/mi_proyecto/mi_proyecto>
        <Files wsgi.py>
        Order deny,allow
        Allow from all
        </Files>
        </Directory> 
 
        ErrorLog ${APACHE_LOG_DIR}/error.log
        LogLevel warn
        CustomLog ${APACHE_LOG_DIR}/access.log combined
 
</VirtualHost> 
 
Reiniciamos el servidor apache y ya estaría listo:

 sudo service apache2 restart

jueves, julio 11, 2013

Evitar la selección de texto en las páginas web

Mediante la hoja de estilos podemos desactivar la selección de texto de una sección de nuestra página web, por ejemplo para el siguiente fragmento de una página web:

<div id="mitexto" class="sinseleccion"> texto no seleccionable</div>

en la hoja de estilos correspondiente a esta página web indicaremos:

.sinseleccion{
  -moz-user-select: none;
  -khtml-user-select: none;
  -webkit-user-select: none;
  user-select: none;
  -o-user-select:none;
  -ms-user-select:none;

}