Пожалуйста, как мне написать код try и except для проверки пароля; так, чтобы каждая проверка возвращала пользователю свое собственное сообщение?

views.py Проблема у меня возникла в представлении функции регистрации. Что мне написать внутри блока except, чтобы показать пользователю сообщение об ошибке в соответствии с заданным validationError.

Например: если ошибка "Общий пароль", то пользователю должно быть показано только сообщение об общем пароле, а если это другие ошибки, то пользователю должны быть показаны их независимые сообщения

Заранее спасибо.

from django.shortcuts import render,redirect
from  django.contrib import messages
from django.contrib.auth import authenticate,login,logout
#from django.contrib.auth.models import User
from django.core.mail import send_mail
from .models import User 
from django.contrib.auth.password_validation import validate_password,UserAttributeSimilarityValidator,CommonPasswordValidator,MinimumLengthValidator,NumericPasswordValidator

# Create your views here.

def signup(request):

    if request.method == "POST":
        username = request.POST.get("username")
        fname = request.POST.get("fname")
        lname = request.POST.get("lname")
        email = request.POST.get("email")
        password = request.POST.get("password")
        password2 = request.POST.get("password2")



        if password:
            try:
                new = validate_password(password,password_validators=None)
                
            except:
                messages.error(request, )
                return redirect('home')


    






        




                
        #if User.objects.filter(email=email):
            #messages.error(request, "E-mail already exist!")
            #return redirect('home')

        #if len(username) > 15:
            #messages.error(request, "Length of username too long!")
            #return redirect('home')

        #if password != password2:
            #messages.error(request, "Passwords do not match!")
            #return redirect('home')

        #if not password.isalnum():
            #messages.error(request, "Password must be alphanumeric!")
            #return redirect('home')
          

        user = User.objects.create_user(username=username,first_name=fname,last_name=lname,email=email,password=password)


        # Welcome E-mail

        #subject = 'Welcome to ADi meals mobile!'
        #message = 'Hello {fname}, welcome to ADi meals mobile!\nThank you for visiting our website.\n We have also sent you a confirmation email, please confirm your email address to login into your account.\n\nThanking you\nVictoria Oluwaseyi\nC.E.O'
        #from_email = settings.EMAIL_HOST_USER
        #to_list = [user.email]
        #send_mail(subject,message,from_email,to_list,fail_silently=True)


        messages.success(request,"Your account has been successfully created!")
        #user.is_active = True
        return redirect('authentication:signin')

         
    return render(request,'authentication/signup.html')

Вы можете создать другую функцию, в которую вы передаете имя пользователя, email и пароль, в которой вы обрабатываете их и возвращаете строковое значение, которое вы можете дать в качестве сообщения в возврате вашей исходной функции.

Пример:

def checkFields(user, email, pwd, pwd2):

        #if User.objects.filter(email=email):
            #message = "email already exists"
            #return message

        #if len(user) > 15:
            #message = "Length of username is too long"
            #return message

        #if pwd != pwd2:
            #message = "Passwords do not match"
            #return message

        #if not pwd.isalnum():
            #message = "Password must be alphanumeric"
        
        #return message

def signup(request):

    if request.method == "POST":
        username = request.POST.get("username")
        fname = request.POST.get("fname")
        lname = request.POST.get("lname")
        email = request.POST.get("email")
        password = request.POST.get("password")
        password2 = request.POST.get("password2")

        custom_message = checkFields(username, email, password, password2)

        if password:
            try:
                new = validate_password(password,password_validators=None)
                
            except:
                if custom_message != None:
                    messages.error(request, custom_message)
                else: 
                    messages.error(request, 'somethign went wrong')
                return redirect('home')

            #
            #The rest of your code here....
            #

Надеюсь, это поможет.

Вот что я сделал. Для проверки каждого вводимого пароля и возврата однословного сообщения при каждой проверке используйте блоки try и except, и вы даже можете добавить функцию passwordchange, чтобы убедиться, что пользователь не использует свой старый пароль при смене пароля.

Вернуться на верх