如何使用Django身份验证在用户注册时强制执行密码复杂性?

时间:2017-08-13 17:07:38

标签: django

我正在使用内置的Django身份验证应用程序。默认情况下,它没有密码复杂性,所以我试图启用它。

我确实找到了这个文档:https://docs.djangoproject.com/en/1.11/topics/auth/passwords/#module-django.contrib.auth.password_validation

但它特别指出,在创建用户时不会应用验证器,因此对我没用。

我真的很想看到一个使用这个身份验证应用程序的github项目,所以我可以看到如何在项目中正确使用它。

以下是我的forms.py和views.py文件:

forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth import password_validation

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label="Password", widget=forms.PasswordInput)
    password2 = forms.CharField(label="Repeat Password", widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ('username', 'first_name', 'email')

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError('Passwords don\'t match.')
        return cd['password2']

class UserEditForm(forms.ModelForm):
    class Meta:
        model = User
        fields = {'first_name', 'last_name', 'email'}

views.py

from __future__ import unicode_literals    
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from .forms import LoginForm, UserRegistrationForm, UserEditForm
from django.contrib.auth.decorators import login_required
from django.contrib import messages

def user_login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(username=cd['username'], password=cd['password'])
            if user is not None:
                if user.is_active:
                    login(request, user)
                    return HttpResponse('Authenticated successfully')
                else:
                    return HttpResponse('Disabled account')
            else:
                return HttpResponse('Invalid login')
    else: 
        form = LoginForm()
    return render(request, 'login.html', {'user_form': form})

def register(request):
    if request.method == 'POST':
        user_form = UserRegistrationForm(request.POST)

        if user_form.is_valid():
            # create a new user object but avoid saving it yet
            new_user = user_form.save(commit=False)
            # set the pw
            new_user.set_password(user_form.cleaned_data['password'])
            # save the user object
            new_user.save()

            cd = user_form.cleaned_data
            user = authenticate(username=cd['username'], password=cd['password'])

            login(request, user)
            return redirect('/plans/new')
    else:
        user_form = UserRegistrationForm()
    return render(request, 'registration/register.html', {'user_form': user_form})


@login_required
def edit(request):
    if request.method == 'POST':
        user_form = UserEditForm(instance=request.user, data=request.POST)
        if user_form.is_valid():
            user_form.save()
            messages.success(request, 'Profile updated successfully')
            return redirect('/plans')
        else:
            messages.error(request, 'Error updating profile.')

    else:
        user_form = UserEditForm(instance=request.user)

    return render(request, 'registration/edit.html', {'user_form': user_form})

0 个答案:

没有答案