登录用户python,如何验证用户登录?

时间:2015-10-30 16:45:32

标签: python django login

我无法使用用户登录,我不知道为什么,我可以使用admin accout登录但是,我为新用户创建了一个模型,我无法使用它进行登录。

model.py

class MiUsuario(AbstractBaseUser):
    email = models.EmailField(
            verbose_name='Dirección de e-mail',
            max_length=255,
            unique=True,
        )
    nombre_completo = models.CharField(verbose_name="Nombre Completo del usuario(a)",max_length=150, unique= True, null=True)
    nombre_de_usuario = models.CharField(verbose_name="Nombre de Usuario",max_length=15, unique= True)
    Numero_de_identificacion = models.PositiveIntegerField(verbose_name="Número de identificación",null=True)
    Pagina_web = models.URLField(verbose_name="Página Web",blank=True)
    Celular = models.PositiveIntegerField(verbose_name="Número de celular",null=True)
    Telefono = models.PositiveIntegerField(verbose_name="Número de télefono",null=True)
    Ext = models.PositiveIntegerField("Extension del télefono",null=True)
    Nombre_Empresa = models.CharField(verbose_name="Nombre de la empresa",max_length=50,null=True)
    Cargo_Contacto = models.CharField(verbose_name="Cargo del cliente",max_length=50,null=True)
    GeneroEscoger = ((1,"Sin especificar"),(2,'Masculino'),(3,'Femenino'))
    Genero = models.IntegerField(verbose_name='Genero',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(verbose_name='Ciudad',choices=Ciudades, default=1,)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = AdministracionUsuarios()

    USERNAME_FIELD = 'nombre_de_usuario'
    REQUIRED_FIELDS = ['Numero_de_identificacion','Nombre_Empresa','Telefono']

    def get_full_name(self):
        return self.nombre_completo
    def get_short_name(self):
        return self.nombre_de_usuario
    def _str_(self):
        return self.nombre_de_usuario
    def has_perm(self, perm, obj=None):
        return True
    def has_module_perms(self, app_label):
        return True
    @property
    def is_staff(self):
        return self.is_admin

然后我使用表格来确认MiUsuario中是否存在用户

form.py

class LoginUserForm(forms.Form):
    """Authentication form which uses boostrap CSS."""
    usuario = MiUsuario()
    username = forms.CharField(max_length=254,widget=forms.TextInput({'placeholder': 'Nombre de usuario'}))
    password = forms.CharField(label=_("Password"),widget=forms.PasswordInput({'placeholder':'Contraseña'}))
    def usuario():
        if  usuario.objects.filter(nombre_de_usuario!=username) and  usuario.objects.filter(password!=password):
            raise forms.ValidationError('Nombre de usuario o contraseña incorrecta')

在layout.html中调用表单后,但是当我尝试登录时,只需重新登录页面并且没有使用用户帐户的标志,但是如果我尝试使用管理员帐户,则无需麻烦 的 url.py

url(r'^login$', 'app.views.index', name='Vulpini.co'),

我该怎么做这个日志工作 的 views.py

def index(request):
    notifi = Notificaciones.objects.filter(user=request.user.id, Estado=False)
    formlog = LoginUserForm()
    if request.method == 'POST':
        form = RegistroUserForm(request.POST, request.FILES)
        if form.is_valid():
            cleaned_data = form.cleaned_data
            username = cleaned_data.get('username')
            password = cleaned_data.get('password')
            email = cleaned_data.get('email')
            user_model = MiUsuario.objects.crear_usuario(nombre_de_usuario=username,email=email, password=password)
            user_model.save()
        else:
            form = RegistroUserForm()
    else: 
        form = RegistroUserForm()
    context = {
        'formlog' : formlog,
        'form': form,
        'notifi': notifi,
    }

    return render(request,'app/index.html',context)

我的视图得到表格

1 个答案:

答案 0 :(得分:1)

您需要使用自定义用户模型在settings.py中设置AUTH_USER_MODEL,如:

AUTH_USER_MODEL = 'appname.MiUsuario'
  

更改AUTH_USER_MODEL会对数据库结构产生很大影响。它更改了可用的表,它将影响外键和多对多关系的构造。如果您打算设置AUTH_USER_MODEL,则应在创建任何迁移或首次运行manage.py migrate之前设置它。

     

不支持在创建表后更改此设置   通过makemigrations,将导致您必须手动修复您的   schema,从旧用户表中移植数据,并可能手动移植   重新申请一些迁移。

查看此link了解详情