Estructura de Proyectos en Django

Instalar Django

pip3 install django==2.2.2

Crear proyecto contenedor

django-admin startproject mi_proyecto


 mi_proyecto es el proyecto contenedor **init**.py convierte una carpeta en un módulo Python, cada paquete en Python contiene un archivo \_\_init\_\_.py settings.py es el archivo de configuración principle del framework Django urls.py es el archivo de configuración de rutas de Django manage.py es una herramienta de gestión de comandos para administrar el proyecto Django y sus operaciones como inicio, cierre y migración de datos Para iniciar Django con python3, modifique el archivo manage.py ```

#!/usr/bin/env python
"""Herramienta de línea de comandos de Django para tareas administrativas."""
import os
import sys
# Nuevo contenido
import pymysql
pymysql.install_as_MySQLdb()
# Nuevo contenido

def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mi_proyecto.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "No se pudo importar Django. ¿Está instalado y "
            "disponible en la variable de entorno PYTHONPATH? ¿Olvidó "
            "activar un entorno virtual?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

### Crear aplicación Modificar el archivo mi_proyecto/settings.py ```

Contenido comentado

Base de Datos

https://docs.djangoproject.com/en/2.2/ref/settings/#databases

#DATABASES = {

'default': {

'ENGINE': 'django.db.backends.sqlite3',

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),

}

#}

Contenido comentado

Nuevo contenido

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'mi_base_datos', 'USER': 'usuario', 'PASSWORD': 'contraseña', 'HOST': '127.0.0.1', 'PORT': '', 'OPTIONS': { "init_command": "SET sql_mode='STRICT_TRANS_TABLES'", # Modo estricto }, 'init_command': 'SET storage_engine=INNODB,' 'SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED, autocommit=1, names "utf8";', } }

Nuevo contenido


Crear aplicación proyecto ```

python3 ./manage.py startapp escanear_red

models.py archivo modelo, usado para operaciones en la base de datos views.py archivo de vistas, que actúa como controlador para procesamiento lógico migrations directorio, guarda archivos temporales para migraciones Construcción de modelos ---------- ### Configuración del archivo settings Ver ruta base ```

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file))) print("...........................{}".format(BASE_DIR))


 Agregar aplicación escanear_red al archivo de configuración ```

# Definición de Aplicaciones

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'escanear_red', # Nueva configuración de aplicación
]

### Modelado de modelos Enlace de referencia #### Edición del archivo models.py ```

#codificación=utf-8

from django.db import models

Crear tus modelos aquí.

class DireccionIP(models.Model): ip = models.CharField(max_length=40, default='',verbose_name=u'dirección IP',null=True) tiempo = models.DateTimeField(verbose_name=u'fecha actualización', auto_now=True)

class Meta:
	verbose_name =u'tabla información dirección IP usuario'
	verbose_name_plural = verbose_name
	db_table = 'direccionip'

class InfoNavegador(models.Model): navegador = models.CharField(max_length=255,default='',verbose_name=u'información agente navegador usuario',null=True) models.CharField(max_length=256,verbose_name=u'ID dispositivo único',default=u'') direccion_ip = models.ForeignKey(to='DireccionIP',related_name='direccion_ip',on_delete=models.CASCADE)

class Meta:
	verbose_name =u'tabla información navegador usuario'
	verbose_name_plural = verbose_name
	db_table = 'infonavegador'

\#### Crear base de datos ```

mysql -uroot -proot -e "create database mi_base_datos;"
# Permitir acceso desde 127.0.0.1
mysql -uroot -proot -e "grant all on mi_base_datos.* to usuario@'127.0.0.1' identified by 'contraseña';"
# Permitir acceso externo
mysql -uroot -proot -e "grant all on mi_base_datos.* to usuario@'%' identified by 'contraseña';"
mysql -h127.0.0.1  -uusuario -pcontraseña -e "show databases;"

#### Tipos de campos: CharField: campo de cadena IntegerField: campo de tipo entero DateTimeField: campo de fecha y hora ForeignKey: define relación uno a muchos #### Migraciones Comando de migración ```

python3 ./manage.py makemigrations python3 ./manage.py migrate


 Consultar en la base de datos ```

MariaDB [mi_base_datos]> show create table infonavegador\G;
*************************** 1. row ***************************
       Table: infonavegador
Create Table: CREATE TABLE `infonavegador` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `navegador` varchar(255) DEFAULT NULL,
  `direccion_ip_id` int(11) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `infonavegador_direccion_ip_id_f280e3ca_fk_direccionip_id` (`direccion_ip_id`),
  CONSTRAINT `infonavegador_direccion_ip_id_f280e3ca_fk_direccionip_id` FOREIGN KEY (`direccion_ip_id`) REFERENCES `direccionip` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: No query specified

MariaDB [mi_base_datos]> show create table direccionip\G;
*************************** 1. row ***************************
       Table: direccionip
Create Table: CREATE TABLE `direccionip` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `ip` varchar(40) DEFAULT NULL,
  `tiempo` datetime(6) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

### Diseño del proyecto ### Desarrollo del proyecto #### Interfaz de recolección No. | url | Vista | - | :-: | :-: | 1 | http://127.0.0.01/enviar_info | info_usuario | Sugerencia: En el archivo settings, permitir que todos los hosts accedan al servicio debe estar habilitado ```

ALLOWED_HOSTS = ['*']


mi_proyecto/urls.py ```

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

from escanear_red.views import *

urlpatterns = [
    path('admin/', admin.site.urls),
	path('enviar_info/',info_usuario),
]

escanear_red/views.py ```

from django.shortcuts import render from django.http import JsonResponse, HttpResponse from escanear_red.models import * import json

Crear tus vistas aquí.

def info_usuario(request): ip_dir = request.META['REMOTE_ADDR'] ua_usuario = request.META['HTTP_USER_AGENT']

obj_usuario = DireccionIP.objects.filter(ip = ip_dir)
if not obj_usuario:
	res = DireccionIP.objects.create(ip = ip_dir)
	id_ip = res.id
else:
	id_ip = obj_usuario[0].id

InfoNavegador.objects.create(navegador = ua_usuario,direccion_ip_id = id_ip )

resultado = {
	"ESTADO":"éxito",
	"INFO":"Información usuario",
	"IP":ip_dir,
	"UA":ua_usuario
	}
return HttpResponse(json.dumps(resultado), content_type = "application/json")

Primer proyecto DevOPS ----------- Módulo de registro de Django ----------------- Envío de correos electrónicos con Django ---------- </div>

Etiquetas: Django Python MySQL

Publicado el 9-16 22:13