Creacion de Un Proyecto en Django

1.  Crear un Entorno Virtual, abrimos el cmd y nos ubicamos en la carpeta donde crearemos nuestro proyecto y usamos el siguiente comando

python -m venv entornos_biblioteca    //python -m venv env_blogfunciones

2. Activamos el entorno 

3. usando el cmd instalamos django y los demas repositorios necesarios para trabajar en nuestro proyecto

pip install django    //Django==3.0.4
pip install unipath   //Unipath==1.1
pip install psycopg2  //psycopg2==2.8.4
pip install pillow    //Pillow==7.0.0

 la otra opcion es instalar desde la carpeta requeriments 

pip install -r "local windows.txt"

4. creamos el proyecto debemos ir a la ruta donde queremos crear el proyecto, para ello debemos tener el entorno activado en este caso (libro)

django-admin startproject biblioteca

5. abrimos la carpeta biblioteca con el editor de codigo en este caso visual studio code

6. creamos la carpeta settings en la misma altura del archivo settings.py y dentro los archivos : base.py, local.py , prod,py y creamos el archivo __init__.py

7. configuramos los archivos base.py y local.py 

     base.py

"""
Django settings for biblioteca project.

Generated by 'django-admin startproject' using Django 3.2.14.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os
from unipath import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).ancestor(3)


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-2^j7g753+1i-dfxa+ls^q2nm(@t21ml757c9kxz!ri&q8qri84'

# SECURITY WARNING: don't run with debug turned on in production!



# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.postgres',
    #local apps
    'applications.autor',
    'applications.libro',
    'applications.lector',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'biblioteca.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR.child('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 = 'biblioteca.wsgi.application'



AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        '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/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

     local.py

from .base import *

DEBUG = True

ALLOWED_HOSTS = []
# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbbiblioteca',
        'USER': 'neunapp',
        'PASSWORD': 'neunapp2020',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}


STATIC_URL = '/static/'
STATICFILES_DIRS = [BASE_DIR.child('static')]

MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR.child('media')

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

urls.py

"""biblioteca URL Configuration

The `urlpatterns` list routes URLs to views. For more information please see:
    https://docs.djangoproject.com/en/3.2/topics/http/urls/
Examples:
Function views
    1. Add an import:  from my_app import views
    2. Add a URL to urlpatterns:  path('', views.home, name='home')
Class-based views
    1. Add an import:  from other_app.views import Home
    2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
Including another URLconf
    1. Import the include() function: from django.urls import include, path
    2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path,re_path,include
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('',include('applications.autor.urls')),
    re_path('',include('applications.libro.urls')),
    re_path('',include('applications.lector.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

8. Creamos la carpeta templates a la misma altura del manage.py

9. creamos una base de datos desde la shell de postgresql, primero accedemos con el password a postgresql

luego creamos un usuario y accedemos a la bd:

create user neunapp;
\c
create database dbbiblioteca;

10. acccedemos a la bd creada y definimos el password  debe salirnos el mensaje de alter role

\c dbbiblioteca;
alter user neunapp with password 'neunapp2020';

11. Configuramos los archivos manage.py y  wsgi.py y agregamos el ".local"

manage.py

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'biblioteca.settings.local') 

    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

wsgi.py

"""
WSGI config for biblioteca project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'biblioteca.settings.local')

application = get_wsgi_application()

Si no ejecuta fijate bien la ubicacion de la carpeta settings y la configuracion de sus archivos

12 hacemos el makemigrations, migrate ,createsuperuser y runserver

python manage.py makemigrations
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

13. creamos la carpeta applications a la altura del manage.py y creamos el archivo __init__.py

14. entramos al cmd y vamos a la carpeta applications y creamos las apps con el siguiente comando

django-admin startapp libro
django-admin startapp autor
django-admin startapp lector
django-admin startapp home

15. dentro de cada app crearle el archivo urls.py a cada app, por ejemplo dentor de autor crearle el archivo urls.py

from django.contrib import admin
from django.urls import path


from .import views

app_name = "autor_app"
urlpatterns = [


]

16. dentro del archivo apps.py de cada app revisar si puede correr con la configuracion por defecto o si se le tiene q agregar 'applications' .

debe quedar asi

from django.apps import AppConfig


class HomeConfig(AppConfig):
    default_auto_field = 'django.db.models.BigAutoField'
    name = 'applications.home'

Base de Datos