在同一页面上登录并注册和通知系统

时间:2015-10-22 19:50:46

标签: python django

我正在开发一个人们可以购买服务的网站,它还有一个通知系统,我在视图中执行此操作以显示登录和注册 index.html

Views.py

from django.middleware.csrf import get_token
from app.models import *
from app.forms import *
from django.shortcuts import render, render_to_response
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime
from ajaxuploader.views import AjaxFileUploader
from django.contrib.auth import logout as auth_logout
from django.contrib.auth import login as auth_login
from django.template.context_processors import csrf
from django.template.defaulttags import csrf_token

def index(request):
    if request.method == 'POST':
        form = RegistroUserForm(request.POST, request.FILES)
    else:
        form = RegistroUserForm()
    context = {
        'form': form
    }
    notifi = Notificaciones.objects.all()
    return render(request,'app/index.html',context)

def registro_usuario_view(request):
    if request.method == 'POST':
        # Si el method es post, obtenemos los datos del formulario
        form = RegistroUserForm(request.POST, request.FILES)

        # Comprobamos si el formulario es valido
        if form.is_valid():
            # En caso de ser valido, obtenemos los datos del formulario.
            # form.cleaned_data obtiene los datos limpios y los pone en un
            # diccionario con pares clave/valor, donde clave es el nombre del campo
            # del formulario y el valor es el valor si existe.
            cleaned_data = form.cleaned_data
            username = cleaned_data.get('username')
            password = cleaned_data.get('password')
            email = cleaned_data.get('email')
            # E instanciamos un objeto User, con el username y password
            user_model = User.objects.create_user(username=username, password=password)
            # Añadimos el email
            user_model.email = email
            # Y guardamos el objeto, esto guardara los datos en la db.
            user_model.save()
            # Ahora, creamos un objeto UserProfile, aunque no haya incluido
            # una imagen, ya quedara la referencia creada en la db.
            user_profile = UserProfile()
            # Al campo user le asignamos el objeto user_model
            user_profile.user = user_model
            # Por ultimo, guardamos tambien el objeto UserProfile
            user_profile.save()
    else:
        # Si el mthod es GET, instanciamos un objeto RegistroUserForm vacio
        form = RegistroUserForm()
    # Creamos el contexto
    context = {'form': form}
    # Y mostramos los datos
    return render(request, 'app/registro.html', context)

Forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from .models import *
from multiupload.fields import MultiFileField
from django.utils.translation import ugettext_lazy as _

class UploadForm(forms.Form):
    images = MultiFileField(min_num=1, max_num=100, max_file_size=1024*1024*5)

class RegistroUserForm(forms.Form):

    username = forms.CharField(min_length=5,widget=forms.TextInput(attrs={'class': 'form-control'}))
    email = forms.EmailField(widget=forms.EmailInput(attrs={'class': 'form-control'}))
    password = forms.CharField(min_length=5,widget=forms.PasswordInput(attrs={'class': 'form-control'}))
    password2 = forms.CharField(min_length=5,widget=forms.PasswordInput(attrs={'class': 'form-control'}))

    def clean_username(self):
        """Comprueba que no exista un username igual en la db"""
        username = self.cleaned_data['username']
        if User.objects.filter(username=username):
            raise forms.ValidationError('Nombre de usuario ya registrado.')
        return username

    def clean_email(self):
        """Comprueba que no exista un email igual en la db"""
        email = self.cleaned_data['email']
        if User.objects.filter(email=email):
            raise forms.ValidationError('Este E-mail ya se encuentra registrado.')
        return email

    def clean_password2(self):
        """Comprueba que password y password2 sean iguales."""
        password = self.cleaned_data['password']
        password2 = self.cleaned_data['password2']
        if password != password2:
            raise forms.ValidationError('Las contraseñas no coinciden.')
        return password2

Models.py

class UserProfile(models.Model):
    Usuario = models.OneToOneField(settings.AUTH_USER_MODEL)
    email = models.EmailField(blank=True,null=True)
    Cargo_Contacto = models.CharField("Cargo del cliente",max_length=50,null=True)
    Celular = models.PositiveIntegerField("Numero de celular",null=True)
    Pagina_web = models.URLField("Pagina Web",blank=True)
    Numero_de_identificacion = models.PositiveIntegerField("Numero de identificacion",null=True)
    Nombre_Empresa = models.CharField("Nombre de la empresa",max_length=50,null=True)
    Telefono = models.PositiveIntegerField("Numero de telefono",null=True)
    Extension_Telefono = models.PositiveIntegerField("Extension del telefono",null=True)
    GeneroEscoger = ((1,"Sin especificar"),(2,'Masculino'),(3,'Femenino'))
    Genero = models.IntegerField(choices=GeneroEscoger, default=1)
    Ciudades = ( (1,'Bogotá'),(2,'Medellin'),(3,'Cali'),(4,'Barranquilla'),(5,'Cartagena'),(6,'Cucuta'),(7,'Ibagué'),(8,'Bucaramanga'),(9,'Otro'))
    Ciudad = models.IntegerField('Ciudad',choices=Ciudades, default=1,)
    class Meta:
        verbose_name = 'Cliente'
        verbose_name_plural = 'Clientes'
    def __str__(self):
        return self.Usuario.username

class Notificaciones(models.Model):
    IDcliente = models.ManyToManyField(User)
    Tipo_de_notificaciones = ( (1,'Ofertas'),(2,'Error'),(3,'Informacion'))
    Tipo = models.IntegerField('Tipo de notificacion',choices=Tipo_de_notificaciones, default=3,)
    Nombre_not = models.CharField("Nombre de la notifiacion",max_length=50)
    Descripcion_not = HTMLField("Descripcion de la notificacion")
    Imagen_not = models.ImageField("Imagen de la notificacion",upload_to="notificaciones")
    Fecha_Caducidad_notificacion = models.DateTimeField("Fecha de caducidad de la notificacion",auto_now_add=False)
    Estado = models.BooleanField("Estado de la notificacion", default=False)
    class Meta:
        verbose_name = 'Notificacion'
        verbose_name_plural = 'Notificaciones'
    def __str__(self):
        return self.Nombre_not

这里是 的 urls.py

url(r'^tinymce/', include('tinymce.urls')),
    url('', include('django.contrib.auth.urls', namespace='auth')),
    url(r'^social/',include('social.apps.django_app.urls', namespace='social')),
    #url(r'^s$', 'app.views.CategoriaProductoss', name='servicios'),
    #url(r'^s/(?P<id>\d+)$', 'app.views.servicioscategoria', name='servicioscategoria'),
    url(r'^media/(?P<path>.*)$','django.views.static.serve', {'document_root':settings.MEDIA_ROOT,}),
    url(r'^$', 'app.views.index', name='Vulpini.co'),
    url(r'^login$', 'django.contrib.auth.views.login', name='Vulpini.co'),
    url(r'^logout$','django.contrib.auth.views.logout_then_login',{'template_name': 'app/registration/login.html',},name='logout'),
    url(r'start$', 'app.views.start', name="start"),
    url(r'ajax-upload$', 'app.views.import_uploader', name="my_ajax_upload"),
    url(r'^registro$', 'app.views.index', name='registro'),

我正在考虑这个应用程序,因为,我在Python和Django上真的很新,想知道是否有人可以让我对它进行一些推荐,这个想法就像Godaddy,人们购买服务和通知系统之类的Youtube或Google通知 我的问题这是错的还是对的? 有人可以帮助我 非常感谢

0 个答案:

没有答案