Package: dj-DoCodeDB
dj-DoCodeDB (Django-App)DoCodeDB es una Aplicacion para el manejo en la Base de Datos, implementando una vista de tabla personalizable, asi como la posibilidad de cargar un Spinner(Loader) personalizado pre-configurado.TecnologiaDoCodeDB se implementa con las siguientes librerias previamente instaladas:Django- Python base framework (v2.2)docode-managedb- Libreria para el manejo de base de datos (DoCode)django-sendgrid-v5- Libreria para el envio de correos por medio de SendGridInstalacionDoCodeDB requierePythonv3+ para funcionar.Instalar por medio depip$pipinstalldj-DoCodeDBEstructura de la AppLa aplicacion tiene una estructura comun de una appDjangoDoCodeDB/procesosstatictemplatestemplatetagsapps.pyurls.pyviews.pyConfiguracion:Agregar la App a "INSTALLED_APPS" dentro de lossettings.pyINSTALLED_APPS=['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','DoCodeDB',]Agregar las urls deDoCodeDBa tu archivo de proyectourls.pyfromdjango.contribimportadmin
fromdjango.urlsimportpath,includeurlpatterns=[path('admin/',admin.site.urls),path('',include('DoCodeDB.urls')),]Uso:Una vez instalada la App:
-La libreriadc_formcontiene el metododc_verificarform()el cual recibe los siguientes parametros:request= Metodo de peticionmodel= Modelo que se esta utilizandoNone= Sustituir por template ej. 'Loader.html'views.pyfromDoCodeDB.procesosimportdc_form

defmi_vista(request):context={}sub_context=dc_form.dc_verificarform(request,model,None)context.update(sub_context)returncontextUtilizacontext.update()para actualizar tu contexto actual, ya que la libreria regresa un contexto y este se debe de fusionar con tu contextoConfiguracion de TemplateDentro de la App existe un template pre-configurado para manejar los modelosdatos_tabla.htmlSolo incluye este modal en la vista que carga elcontextopara manejar los modulos de la base de datos:<!--Seincluyeeltemplatebase-->{%extends'base.html'%}<!--Seagregaenelbloquedecontenidolatabla-->{%blockcontent%}{%include'datos_tabla.html'%}{%endblockcontent%}Configuracion de TemplatePersonalizadoLa App contiene un template con la configuracion base para implementar una tabla personalizadadatos_tabla_min.html
base_p_tabla.htmlTemplate ReducidoLa App contiene varios template que dejan fuera las librerias asi como busqueda por encabezadobase_p_tabla_min.htmlDejando fuera las siguientes librerias:<!--JQUERY-->
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<scriptsrc="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.min.js"></script>
<!--Bootstrap-->
<linkrel="stylesheet"type="text/css"href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.3/css/bootstrap.css">
<linkrel="stylesheet"type="text/css"href="https://cdn.datatables.net/1.10.20/css/dataTables.bootstrap4.min.css">
<linkrel="stylesheet"type="text/css"href="https://cdn.datatables.net/responsive/2.2.3/css/responsive.bootstrap4.min.css">Uso de template personalizadoSe incluye el template de configuracion base dentro de unbloque contentpara despues agregar la tabla con elid="table_id"{%blockcontent%}{%include'base_p_tabla.html'%}<!--TablaPersonalizada--><tableid="table_id">MiTabla</table>{%endblockcontent%}La estructura basica de una tabla para funcionar con la APP es la siguiente:<!--TABLA-->
<tableid="table_id"><thead><tr><th>Folio</th><!--Personalizado-->{%forcampoincampos%}<th>{{campo.nombre}}</th>{%endfor%}<th></th></tr></thead><tbody>{%loadfiltros%}<!--CargarlosfiltrsodentrodelaApp-->{%forregistroinregistros%}<tr><td>{{registro.id}}</td><!--Personalizado-->{%fordatoinregistro|contenido:campos%}<td>{{dato}}</td>{%endfor%}<td><divclass="row"><divclass="col-sm-6"><buttonclass="boton-editar"type="button"onclick="editar_registro({{registro.id}},'{{object_name}}','{{appname}}')">Editar</button></div><divclass="col-6"><buttonclass="boton-eliminar"type="button"onclick="eliminar_registro({{registro.id}})">Eliminar</button></div></div></td></tr>{%endfor%}</tbody>
</table>
<!--TABLA-->-Se obtienen los campos del modelo:{%forcampoincampos%}<th>{{campo.nombre}}</th>{%endfor%}-Se Carga los filtros y se obtienen los registros del modelo:{%loadfiltros%}{%forregistroinregistros%}-Se asignan los datos en base a los campos del modelo:{%fordatoinregistro|contenido:campos%}<td>{{dato}}</td>{%endfor%}Envio de Correo (SendGrid)La aplicacion contienen un configuracion para enviar correos por medio de de SendGrid (django-sendgrid-v5) una vez instalada se puede proceder a configurarConfigruracion SendGridAgregamos las siguientes lineas en el archivo de settingssettings.py# <=================== EMAIL CONFIGURATION =============>ENVIAR_CORREO=TrueEMAIL_BACKEND="sendgrid_backend.SendgridBackend"SENDGRID_API_KEY=""# Dejar Vacio#Toggle sandbox mode (when running in DEBUG mode)SENDGRID_SANDBOX_MODE_IN_DEBUG=False# <=================== EMAIL CONFIGURATION =============>IMPORTANTEModelo TsendgridDentro del panel administrativo en el modeloTsendgridscolocar lakeyproporcionada por SendGrid, no colocar elkeydentro desettings.pyImportar el metodo desde la aplicacion para ser utilizado, entre los parametrostemplatees el template de correo a ser enviado, para este template se le agregara como contexto la informacion dentro deinfo[]importDoCodeDB.procesos.correo_sendGridas_correoinfo=[('origen',"MiCorreo"),('nombre',nombre),('telefono',telefono),('correo',correo),('mensaje',mensaje),]# PARAMETROS ==> (origen,correo_enviar,cc,info,template)estatus=_correo.enviar_correo('origen@email.com','destino@email.com',None,info,'correo_form.html'):estatuscontiene la informacion referente al envio de correo, la plataforma contiene un template base para envio de correo, pero se puede personalizar uno propiocorreo_form.html<!DOCTYPEhtml>
<html><head></head><body><h2>Correodecontactoparalaplataforma{{origen}}</h2><p>Usuario:{{nombre}}</p><p>Telefono:{{telefono}}</p><p>Correo:{{correo}}</p><p>Mensaje:{{mensaje}}</p></body>
</html>Actualizacion v1.2Se retiran botones para el template 'datos_tabla.html'Se retira titulo por default en modales 'datos_tabla.html' y 'base_p_tabla.html'Actualizacion v1.4Proceso para aceptar modelos con 'IntegerField'Se implementa FontAwesome, para no mostrar botones en los reportesActualizacion v1.5Manejo de multiples formularios creados por usuariosActualizacion v1.6Acepta modelos con atributos IntegerSe ajusta llamada de metodos editar y eliminar para funcionar en paginacion de tablasProcurar agregar los metodosstryunicodedentro de los modelosActualizacion v1.8Se implementa el envio de formularios por medio de correo utilizandoSendGridSe agrega template reducido para movilesdatos_tabla_min.htmlActualizacion v1.9Se implementa el uso de ImageField para los modelos enDjango- Python base framework (v2.2)Actualizacion v2.0.0Para esta version se realizan ajustes en los modales al momento de utilizar las tablas personalizadas, modelales como "nuevo" y "editar"Actualizacion v2.0.1Se repara error de id duplicados en el DOM al momento de utilizar "FileField"Actualizacion v2.0.2Se nombra la seccion de archivos "FileSection" y "FileSection_editar"Actualizacion v2.0.3Ahora se regresa el registro que se agrega o se edita en el sub_contextActualizacion v2.0.6Se agrega estatus para envio correo por medio de sendgridActualizacion v2.0.7Se arregla modal de editar para tipo "Boolean"LicenciaMIT LicenseCopyright (c) 2019 DoCodePermission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.