Пожалуйста, как мне написать код 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, чтобы убедиться, что пользователь не использует свой старый пароль при смене пароля.