Я занимаюсь простой регистрацией пользователей в моем проекте, используя таблицу Django User
. Ниже приведен код, предназначенный для перенаправления на домашнюю страницу после успешной регистрации пользователя, но, хотя я заполняю повторяющуюся (неправильную) запись для имени пользователя, он идет на домашнюю страницу вместо того, чтобы показывать ошибку на странице регистрации.
PS - Старался, чтобы вопрос был коротким, не отображался лишний код Пожалуйста, прочитайте комментарии в коде и журналах, там добавлено дополнительное объяснение
def register(request):
if request.method == 'POST':
reqdict = to_reqdict(request)
print("reqdict", reqdict) # This statement printed in the logs
username = reqdict.get('email')
first_name = reqdict.get('first_name')
last_name = reqdict.get('last_name')
raw_password = reqdict.get('password')
try:
user = User.objects.create_user(username=username,first_name=first_name,
last_name=last_name,email=username, password=raw_password)
user.save()
user = authenticate(username=username, password=raw_password)
login(request, user)
print("user.is_authenticated>>>>>", user.is_authenticated) # This does not get printed in the logs
return redirect(reverse('home')) # Only this line redirects page to home page
except IntegrityError as e:
messages.error(request, "User already exists!")
print("error", e) #This error statement has got printed in the logs
except Exception as e:
messages.error(request, "Internal server error")
print("Other error", e)
return render(request, template_name="signup.html")
else:
return render(request, template_name="signup.html")
Подробности смотрите в журналах:
System check identified no issues (0 silenced).
April 13, 2020 - 15:51:54
Django version 3.0.5, using settings 'backend.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[13/Apr/2020 18:56:33] "GET / HTTP/1.1" 200 7616 # Typed http://127.0.0.1:8000/ in the browser
[13/Apr/2020 18:56:38] "GET /register/ HTTP/1.1" 200 7916 # Opened Sign Up page, Filled up and Clicked Sign up (Submit) button
reqdict {'first_name': 'John', 'last_name': 'Doe', 'email': 'john@gmail.com', 'password': 'a', 'cpassword': 'a'} # It printed first print statement
error UNIQUE constraint failed: auth_user.username #It came to exception due to duplicate entry in the db but still got redirected to the homepage
[13/Apr/2020 18:56:57] "POST /register/ HTTP/1.1" 200 8181
[13/Apr/2020 18:56:59] "GET /home/ HTTP/1.1" 302 0 # It redirected to Home page, What makes my code goes here instead of sign up page again
[13/Apr/2020 18:56:59] "GET /?next=/home/ HTTP/1.1" 200 7616
Что происходит после того, как я перехватил исключение при переходе на домашнюю страницу, нет другой строки, кроме строки ниже, которая перенаправляет на домашнюю страницу?
return redirect(reverse('home'))
JFYI, urls.py и другое views
urlpatterns = [
path('', views.user_login, name='user_login'),
path('home/', views.index, name='home'),
path('register/', views.register, name='register'),
]
views.py
@login_required(login_url='/')
def index(request):
return render(request, template_name="home.html")
def user_login(request):
username = request.POST.get('username', None)
password = request.POST.get('password', None)
if not any([username, password]):
return render(request, template_name="login.html")
user = authenticate(request, username=username, password=password)
if user is not None:
login(request, user)
# return render(request, template_name="base.html")
return JsonResponse({"message": "Redirect to home", "code":10001, "status":True}, status=200)
else:
return JsonResponse({"message": "Incorrect username or password. Please try again.", "code":10002, "status":False}, status=403)
Пожалуйста, дайте мне знать, если что-то нужно раскрыть из кода.