Cómo crear un proyecto Django usando virtualenv

Generalidades

Este artículo explica cómo crear un proyecto Django en un virtualenv.

¿Qué versión de Python es compatible con Django?

Debes usar Python 3.4 o superior para usar Django 2.

Debes usar Python 3.6 o superior para usar Django 3.

Ve los siguientes enlaces para obtener una lista completa de versiones compatibles:

Configuración inicial

Primero, asegúrate de haber instalado una versión personalizada de Python y creado un entorno virtual en el directorio de tu sitio web:

Luego, instala Django en su virtualenv:

Finalmente, habilita Passenger en tu dominio.

Creando un proyecto Django

Para ejecutar los comandos en este artículo, debes iniciar sesión en tu servidor a través de SSH con tu usuario de Shell. Visita los siguientes artículos para obtener más información:

Las siguientes instrucciones asumen que has creado un entorno virtual titulado 'venv' usando los enlaces de arriba.

  1. Ejecute los siguientes comandos para crear tu proyecto Django dentro de este entorno:
    [server]$ cd $HOME/example.com
    [server]$ source $HOME/example.com/venv/bin/activate
    (venv) [server]$ python3 venv/bin/django-admin.py startproject <projectname>
    • Reemplaza 'example.com' con tu nombre de dominio.

    Cuando ejecutas el comando startproject, crea una nueva carpeta en el directorio de tu sitio llamada cualquiera que sea el nombre de tu proyecto Django.

  2. Para que Passenger pueda recoger tu proyecto, crea un archivo passenger_wsgi.py dentro del directorio de nivel superior de tu sitio (/home/username/example.com). Agregua lo siguiente:
    import sys, os
    INTERP = "/home/username/example.com/venv/bin/python3"
    #INTERP is present twice so that the new python interpreter 
    #knows the actual executable path if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) cwd = os.getcwd() sys.path.append(cwd) sys.path.append(cwd + '/djangoprojectname') #You must add your project here sys.path.insert(0,cwd+'/venv/bin') sys.path.insert(0,cwd+'/venv/lib/python3.6/site-packages') os.environ['DJANGO_SETTINGS_MODULE'] = "djangoprojectname.settings" from django.core.wsgi import get_wsgi_application application = get_wsgi_application()

    Asegúrate de reemplazar lo siguiente en el archivo passenger_wsgi.py:

    • La ruta a tu versión local de Python en la línea # 2. Ejecuta which python3 para confirmar:
      (venv) [server]$ which python3
      /home/username/example.com/venv/bin/python3
    • Tu nombre de proyecto virtualenv en las líneas 11 y 12
    • Tu nombre de proyecto Django en las líneas 9 y 14
    • Tu versión de Python3 en la línea 1212
  3. Configura los ajustes de archivo estático de Django para servir correctamente las imágenes, CSS y JavaScript, ya que lo necesitarás para que funcione la interfaz de administración. Por ejemplo:
    • Abra el archivo settings.py del proyecto que se encuentra en example.com/projectname/projectname/settings.py. Desplácese hasta la parte inferior y verá que STATIC_URL probablemente esté configurado en /static/.
    • Agrega otra línea para establecer la ubicación en el servidor del directorio estático real. Asegúrate de cambiar el username a tu usuario Shell.
    STATIC_ROOT = '/home/username/example.com/public/static/'
  4. En tu directorio /home/username/example.com/, asegúrate de crear este directorio /static.
    (venv) [server]$ cd $HOME/example.com/public
    (venv) [server]$ mkdir static
    • Esta será la ubicación donde Django colocará todos tus archivos estáticos – no debes colocar cosas aquí manualmente, ya que se sobrescribe. Ver el siguiente enlace para más detalles:
    https://docs.djangoproject.com/en/1.8/howto/static-files/
  5. Ejecuta el comando collectstatic para configurar los elementos estáticos para la interfaz de administración:
    (venv) [server]$ cd $HOME/example.com/projectname/
    (venv) [server]$ python3 manage.py collectstatic

    Es posible que cuando ejecute este comando, veas el siguiente error:

    django.core.exceptions.ImproperlyConfigured: SQLite 3.8.3 or later is required (found 3.8.2)

    Esto es solo un problema con sitios en servidores que ejecutan Ubuntu 14. Pónte en contacto con el soporte de DreamHost para migrar tu sitio a un servidor que ejecute un sistema operativo diferente.

  6. Configura tu base de datos según sea necesario dentro del archivo settings.py. La sección del archivo settings.py originalmente se ve así:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
  7. Edita para hacer las siguientes adiciones con las credenciales de tu base de datos actual:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'mydatabase',
            'USER': 'mydatabaseuser',
            'PASSWORD': 'mypassword',
            'HOST': 'mysql.example.com',
            'PORT': '3306',
        }
    }
    
  8. El valor predeterminado es usar sqlite3, que puede ser adecuado para los sitios más pequeños, pero es probable que desees configurar una base de datos mysql.
  9. También en tu archivo settings.py, actualiza el campo ALLOWED_HOSTS con tu nombre de dominio. Al principio, parece así:
    ALLOWED_HOSTS = []
    Actualízalo para incluir tu nombre de dominio.
    ALLOWED_HOSTS = ['example.com' , 'www.example.com']
  10. Asegúrate de estar en el directorio de tu proyecto:
    (venv) [server]$ cd ~/example.com/<projectname>
  11. Asegúrate de que mysqlclient esté instalado.
    (venv) [server]$ pip3 install mysqlclient
  12. Una vez configurado, ejecuta migrate en el directorio de tu proyecto:

    Al correr el siguiente comando, verás el siguiente mensaje de advertencia:

    ?: (mysql.W002) MySQL Strict Mode is not set for database connection 'default'
            HINT: MySQL's Strict Mode fixes many data integrity problems in MySQL, 
    such as data truncation upon insertion, by escalating warnings into errors.
    It is strongly recommended you activate it.
    See: https://docs.djangoproject.com/en/2.2/ref/databases/#mysql-sql-mode

    Este mensaje significa que tu base de datos no tiene el Strict Mode habilitado. Puedes continuar a instalar Django con normalidad si quieres; pero si prefieres que tu base de datos use Strict Mode, la única opción seria comprar un servidor MySQL privado.

    Cuando este agregado, contacta al soporte de DreamHost. Te ayudaremos a ajustar esta configuración en el servidor por ti.

    (venv) [server]$ python3 manage.py migrate
    Operations to perform:
    Apply all migrations: admin, auth, contenttypes, sessions
    Running migrations:
    Applying contenttypes.0001_initial... OK
    Applying auth.0001_initial... OK
    Applying admin.0001_initial... OK
    Applying admin.0002_logentry_remove_auto_add... OK
    Applying contenttypes.0002_remove_content_type_name... OK
    Applying auth.0002_alter_permission_name_max_length... OK
    Applying auth.0003_alter_user_email_max_length... OK
    Applying auth.0004_alter_user_username_opts... OK
    Applying auth.0005_alter_user_last_login_null... OK
    Applying auth.0006_require_contenttypes_0002... OK
    Applying auth.0007_alter_validators_add_error_messages... OK
    Applying auth.0008_alter_user_username_max_length... OK
    Applying sessions.0001_initial... OK
  13. Crea un superusuario:
    (venv) [server]$ python3 manage.py createsuperuser
    Username (leave blank to use 'username'): my_django_user
    Email address: email@example.com
    Password:
    Password (again):
    Superuser created successfully.
  14. Navega a tu directorio /home/username/example.com.
    (venv) [server]$ cd /home/username/example.com
  15. Agrega un archivo /tmp/restart.txt:
    (venv) [server]$ mkdir tmp
    (venv) [server]$ touch tmp/restart.txt
  16. Cada vez que realices un cambio en tu configuración, asegúrate de ejecutar lo siguiente en el directorio de tu sitio para notificar a Passenger del cambio:
    (venv) [server]$ touch tmp/restart.txt

Confirmar que la instalación fue exitosa

Visita tu página web.

Ahora deberías ver la página de retención estándar de Django y poder acceder a la consola de administración en example.com/admin/.

Solución de problemas

Si observas algún error después de la instalación, verifica si tienes un archivo .htaccess en los directorios de tu sitio. Es posible que el código en él pueda causar problemas con tu instalación.

ModuleNotFoundError: No module named 'django'

Si ves este error cuando visitas tu sitio, verifica tu archivo passenger_wsgi.py. Confirma los siguientes puntos de línea a tu versión personalizada de Python. Por ejemplo, debería ser 3.6 o 3.7 si instalaste una de esas versiones.

sys.path.insert(0,cwd+'/venv/lib/python3.7/site-packages')

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?