Initial commit
This commit is contained in:
0
project/__init__.py
Normal file
0
project/__init__.py
Normal file
8
project/admin.py
Normal file
8
project/admin.py
Normal file
@@ -0,0 +1,8 @@
|
||||
from django.contrib import admin
|
||||
from .models import Project
|
||||
# Register your models here.
|
||||
|
||||
class ProjectAdmin(admin.ModelAdmin):
|
||||
readonly_fields = ('created', 'updated',)
|
||||
|
||||
admin.site.register(Project, ProjectAdmin)
|
||||
6
project/apps.py
Normal file
6
project/apps.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class ProjectConfig(AppConfig):
|
||||
name = 'project'
|
||||
verbose_name= 'Proyectos'
|
||||
25
project/forms.py
Normal file
25
project/forms.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from django import forms
|
||||
|
||||
|
||||
class ContactForm(forms.Form):
|
||||
name = forms.CharField(label="Nombre",
|
||||
required=True,
|
||||
widget=forms.TextInput(
|
||||
attrs={'placeholder': 'Nombre'}
|
||||
),
|
||||
min_length=3,
|
||||
max_length=100)
|
||||
email = forms.EmailField(label="Email",
|
||||
required=True,
|
||||
widget=forms.EmailInput(
|
||||
attrs={'placeholder': 'user@page.domain'}
|
||||
),
|
||||
min_length=3,
|
||||
max_length=100)
|
||||
content = forms.CharField(label="Mensaje",
|
||||
required=True,
|
||||
widget=forms.Textarea(
|
||||
attrs={'placeholder': 'Mensaje'}
|
||||
),
|
||||
min_length=10,
|
||||
max_length=1000)
|
||||
31
project/migrations/0001_initial.py
Normal file
31
project/migrations/0001_initial.py
Normal file
@@ -0,0 +1,31 @@
|
||||
# Generated by Django 2.1.2 on 2018-10-04 02:27
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Project',
|
||||
fields=[
|
||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('title', models.CharField(max_length=200, verbose_name='Titulo')),
|
||||
('decription', models.TextField(verbose_name='Descripción')),
|
||||
('image', models.ImageField(upload_to='projects/uploads/%Y/%m/%d/', verbose_name='Imagen')),
|
||||
('link', models.URLField(blank=True, null=True, verbose_name='Sitio web')),
|
||||
('created', models.DateTimeField(auto_now_add=True, verbose_name='Fecha de creación')),
|
||||
('updated', models.DateTimeField(auto_now=True, verbose_name='Fecha de modificación')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': 'proyecto',
|
||||
'verbose_name_plural': 'proyectos',
|
||||
'ordering': ['-created'],
|
||||
},
|
||||
),
|
||||
]
|
||||
0
project/migrations/__init__.py
Normal file
0
project/migrations/__init__.py
Normal file
21
project/models.py
Normal file
21
project/models.py
Normal file
@@ -0,0 +1,21 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
class Project(models.Model):
|
||||
title = models.CharField(max_length=200, verbose_name='Titulo')
|
||||
decription = models.TextField(verbose_name='Descripción')
|
||||
image = models.ImageField(verbose_name='Imagen',
|
||||
upload_to='projects/uploads/%Y/%m/%d/')
|
||||
link = models.URLField(null=True, blank=True, verbose_name='Sitio web')
|
||||
created = models.DateTimeField(auto_now_add=True,
|
||||
verbose_name='Fecha de creación')
|
||||
updated = models.DateTimeField(auto_now=True,
|
||||
verbose_name='Fecha de modificación')
|
||||
|
||||
class Meta:
|
||||
verbose_name = 'proyecto'
|
||||
verbose_name_plural = 'proyectos'
|
||||
ordering = ["-created"]
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
111
project/templates/trabajo/index.html
Normal file
111
project/templates/trabajo/index.html
Normal file
@@ -0,0 +1,111 @@
|
||||
{% extends 'core/base.html' %}
|
||||
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<section class="acerca-de" id="acerca-de">
|
||||
<div class="contenedor">
|
||||
<div class="foto">
|
||||
<img alt="Jesús Eduardo" title="Jesús Eduardo" src="{% static 'core/images/foto.png' %}" width="115"/>
|
||||
</div>
|
||||
<div class="texto">
|
||||
<h3 class="titulo">Acerca de</h3>
|
||||
<p>Consultor y desarrollador de <span class="bold">Software Libre</span>. Hacker de <span class="bold">Hyperbola GNU/Linux-Libre.</span></p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- Projects -->
|
||||
<section class="trabajos" id="trabajos">
|
||||
<div class="contenedor">
|
||||
<h3 class="titulo">Proyectos</h3>
|
||||
<div class="contenedor-trabajos">
|
||||
<!-- Trabajo -->
|
||||
{% for project in projects %}
|
||||
<div class="trabajo">
|
||||
<div class="thumb">
|
||||
<img alt="{{project.title}}" title="{{project.title}}" src="{{project.image.url}}"/>
|
||||
</div>
|
||||
<div class="descripcion">
|
||||
<p class="nombre">
|
||||
{% if project.link %}
|
||||
<a href="{{project.link}}" rel="noopener noreferrer" target="_blank">
|
||||
{{project.title}}</a>
|
||||
{% endif %}
|
||||
</p>
|
||||
<p class="categoria">{{project.decription}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
<!-- EndTrabajo -->
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
<!-- footer -->
|
||||
{% block footer %}
|
||||
<footer>
|
||||
|
||||
{% block contacto %}
|
||||
<section class="contacto" id="contacto">
|
||||
<div class="contenedor">
|
||||
<h3 class="titulo">Contacto</h3>
|
||||
<!-- Formulario -->
|
||||
{% if 'ok' in request.GET %}
|
||||
<p>
|
||||
<span class="alert success">Su mensaje se ha enviado correctamente.
|
||||
En breve nos pondremos en contacto con vuestra persona.</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
{% if 'fail' in request.GET %}
|
||||
<p>
|
||||
<span class="alert danger">Opp's hubo un error al enviar su mensaje.
|
||||
Vuelva a intentarlo.</span>
|
||||
</p>
|
||||
{% endif %}
|
||||
<form id="formulario" class="formulario" method='POST'>
|
||||
{% csrf_token %}
|
||||
{{form.name}}
|
||||
{{form.name.errors}}
|
||||
{{form.email}}
|
||||
{{form.email.errors}}
|
||||
{{form.content}}
|
||||
{{form.content.errors}}
|
||||
<ul id="error" class="error"></ul>
|
||||
<input class="boton" name="submit" type="submit" value="Enviar"/>
|
||||
</form>
|
||||
<!--EndFormulario-->
|
||||
</div>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
<div class="redes-sociales-libres">
|
||||
<div class="contenedor">
|
||||
{% if LINK_GNUSOCIAL %}
|
||||
<a class="gnusocial" href="{{LINK_GNUSOCIAL}}" rel="noopener noreferrer" target="_blank"><i class="icon-gnusocial"></i></a>
|
||||
{% endif %}
|
||||
{% if LINK_DIASPORA %}
|
||||
<a class="diaspora" href="{{LINK_DIASPORA}}" rel="noopener noreferrer" target="_blank"><i class="icon-diaspora"></i></a>
|
||||
{% endif %}
|
||||
{% if LINK_MEDIAGOBLIN %}
|
||||
<a class="mediagoblin" href="{{LINK_MEDIAGOBLIN}}" rel="noopener noreferrer" target="_blank"><i class="icon-mediagoblin"></i></a>
|
||||
{% endif %}
|
||||
{% if LINK_GITLAB %}
|
||||
<a class="gitlab" href="{{LINK_GITLAB}}" rel="noopener noreferrer" target="_blank"><i class="icon-gitlab"></i></a>
|
||||
{% endif %}
|
||||
{% if LINK_NOTABUG %}
|
||||
<a class="notabug" href="{{LINK_NOTABUG}}" rel="noopener noreferrer" target="_blank"><i class="icon-notabug"></i></a>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="copyleft">
|
||||
<p>Copyleft <i class="icon-copyleft"></i> 2018 - Heckyel
|
||||
<a rel="license noopener noreferrer" href="https://www.gnu.org/licenses/agpl-3.0.html" target="_blank">
|
||||
<abbr title="GNU Affero General Public License version 3">GNU AGPLv3+</abbr></a> | <a rel="noopener noreferrer" href="https://notabug.org/heckyel/personal-site" target="_blank">source code</a>
|
||||
<a hidden href="{% static 'core/librejs.html' %}" data-jslicense="1" rel="license">Información de licencias de JavaScript.</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
{% endblock %}
|
||||
3
project/tests.py
Normal file
3
project/tests.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
6
project/urls.py
Normal file
6
project/urls.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.home, name="home"),
|
||||
]
|
||||
37
project/views.py
Normal file
37
project/views.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from django.shortcuts import render, redirect
|
||||
from django.urls import reverse
|
||||
from django.core.mail import EmailMessage
|
||||
from .models import Project
|
||||
from .forms import ContactForm
|
||||
|
||||
|
||||
def home(request):
|
||||
projects = Project.objects.all()
|
||||
|
||||
# Form
|
||||
contact_form = ContactForm()
|
||||
if request.method == "POST":
|
||||
contact_form = ContactForm(data=request.POST)
|
||||
if contact_form.is_valid():
|
||||
name = request.POST.get('name', '')
|
||||
email = request.POST.get('email', '')
|
||||
content = request.POST.get('content', '')
|
||||
# Send Email
|
||||
msg = EmailMessage(
|
||||
"Personal-Site: Nuevo mensaje",
|
||||
"De {} <{}>\n\nEscribió:\n\n{}".format(name, email, content),
|
||||
"noreply@heckyel.ga",
|
||||
["heckyel@riseup.net"],
|
||||
reply_to=[email],
|
||||
)
|
||||
try:
|
||||
msg.send(fail_silently=False)
|
||||
# ok
|
||||
return redirect(reverse('home')+"?ok")
|
||||
except:
|
||||
# Fail
|
||||
return redirect(reverse('home')+"?fail")
|
||||
# EndForm
|
||||
|
||||
return render(request, 'trabajo/index.html',
|
||||
{'projects': projects, 'form': contact_form})
|
||||
Reference in New Issue
Block a user