Cómo crear un proyecto Django 2 usando virtualenv

Generalidades

Este artículo muestra cómo crear un proyecto Django (versión 2+). Si necesitas crear un proyecto Django (versión 1), consulta el siguiente artículo:

Visita el siguiente artículo para ver qué versiones de Python son compatibles con versiones específicas de Django:

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

Debes usar Python 3.4 o superior para usar Django 2. Visita la siguiente tabla 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 'my_project' 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:
    STATIC_ROOT = os.path.dirname(BASE_DIR) + '/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
  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:
    (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.