一.models.py
from django.db import models
class cliente(models.Model):
nombre = models.CharField(max_length=200)
apellidos = models.CharField(max_length=200)
status = models.BooleanField(default=True)
def __unicode__(self):
nombreCompleto = "%s %s"%(self.nombre,self.apellidos)
return nombreCompleto
class categoriaProducto(models.Model):
nombre = models.CharField(max_length=200)
descripcion = models.TextField(max_length=400)
def __unicode__(self):
return self.nombre
class producto(models.Model):
def url(self,filename):
ruta = "MultimediaData/Producto/%s/%s"%(self.nombre,str(filename))
return ruta
nombre = models.CharField(max_length=100)
descripcion = models.TextField(max_length=300)
status = models.BooleanField(default=True)
imagen = models.ImageField(upload_to=url,null=True,blank=True)
precio = models.DecimalField(max_digits=6,decimal_places=2)
stock = models.IntegerField()
categorias = models.ManyToManyField(categoriaProducto,null=True,blank=True)
def __unicode__(self):
return self.nombre
二.admin.py
from django.contrib import admin
from demo.apps.ventas.models import cliente,producto,categoriaProducto
admin.site.register(cliente)
admin.site.register(producto)
admin.site.register(categoriaProducto)
三.views.py
from django.shortcuts import render_to_response
from django.template import RequestContext
from demo.apps.ventas.models import producto
from demo.apps.home.forms import ContactForm, LoginForm
from django.core.mail import EmailMultiAlternatives # Enviamos HTML
from django.contrib.auth import login,logout,authenticate
from django.http import HttpResponseRedirect
# Paginacion en Django
from django.core.paginator import Paginator,EmptyPage,InvalidPage
def index_view(request):
return render_to_response('home/index.html',context_instance=RequestContext(request))
def about_view(request):
mensaje = "Esto es un mensaje desde mi vista"
ctx = {'msg':mensaje}
return render_to_response('home/about.html',ctx,context_instance=RequestContext(request))
def productos_view(request,pagina):
lista_prod = producto.objects.filter(status=True) # Select * from ventas_productos where status = True
paginator = Paginator(lista_prod,5) # Cuantos productos quieres por pagina? = 3
try:
page = int(pagina)
except:
page = 1
try:
productos = paginator.page(page)
except (EmptyPage,InvalidPage):
productos = paginator.page(paginator.num_pages)
ctx = {'productos':productos}
return render_to_response('home/productos.html',ctx,context_instance=RequestContext(request))
def singleProduct_view(request,id_prod):
prod = producto.objects.get(id=id_prod)
cats = prod.categorias.all() # Obteniendo las categorias del producto encontrado
ctx = {'producto':prod,'categorias':cats}
return render_to_response('home/SingleProducto.html',ctx,context_instance=RequestContext(request))
def contacto_view(request):
info_enviado = False # Definir si se envio la informacion o no se envio
email = ""
titulo = ""
texto = ""
if request.method == "POST":
formulario = ContactForm(request.POST)
if formulario.is_valid():
info_enviado = True
email = formulario.cleaned_data['Email']
titulo = formulario.cleaned_data['Titulo']
texto = formulario.cleaned_data['Texto']
# Configuracion enviando mensaje via GMAIL
to_admin = 'alexexc2@gmail.com'
html_content = "Informacion recibida de [%s] <br><br><br>***Mensaje****<br><br>%s"%(email,texto)
msg = EmailMultiAlternatives('Correo de Contacto',html_content,'from@server.com',[to_admin])
msg.attach_alternative(html_content,'text/html') # Definimos el contenido como HTML
msg.send() # Enviamos en correo
else:
formulario = ContactForm()
ctx = {'form':formulario,'email':email,'titulo':titulo,'texto':texto,'info_enviado':info_enviado}
return render_to_response('home/contacto.html',ctx,context_instance=RequestContext(request))
def login_view(request):
mensaje = ""
if request.user.is_authenticated():
return HttpResponseRedirect('/')
else:
if request.method == "POST":
form = LoginForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
usuario = authenticate(username=username,password=password)
if usuario is not None and usuario.is_active:
login(request,usuario)
return HttpResponseRedirect('/')
else:
mensaje = "usuario y/o password incorrecto"
form = LoginForm()
ctx = {'form':form,'mensaje':mensaje}
return render_to_response('home/login.html',ctx,context_instance=RequestContext(request))
def logout_view(request):
logout(request)
return HttpResponseRedirect('/')
四.SingleProducto.html
{% extends 'base.html' %}
{% block title %} Producto {{producto.nombre}} {% endblock %}
{%block content %}
<h1> {{ producto.nombre }}</h1><br>
<img src="/media/{{ producto.imagen }}" width="150px" heigth="150px"/>
<p> {{ producto.descripcion }}</p>
<p> ${{ producto.precio }}</p>
<p> Cantidad en Existencia: {{ producto.stock }} Unidades </p>
<br>
<h5> Categorias:</h5>
{% for cat in categorias %}
<span class="label label-info"> {{cat.nombre}}</span>
{% endfor %}
<br><br>
{% if producto.stock > 0 %}
<a class="btn btn-primary" href="#"> Comprar Producto </a>
{% endif %}
<a class="btn btn-primary" href="javascript:window.history.go(-1);"> Regresar a la Lista </a>
{% endblock %}