Return render не работает в другом файле python - Djanjo
Я работаю над страницей регистрации и для базовой проверки, например, если пользователь уже зарегистрирован, пароль сложный или нет и т.д. ... для этого я создал отдельный файл и если все проверки завершены, я пытаюсь перенаправить, но из вторичного файла python перенаправление и даже рендеринг не работают, они просто возвращают мне ту же страницу регистрации, но когда я использую перенаправление на том же файле views.py перенаправление работает. Это странное поведение? Или я делаю что-то не так?
[views.py]
from django.shortcuts import redirect, render
from .utils.registration import Register
# Create your views here.
def register(request):
if request.method == "POST":
name = request.POST['name']
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
# return redirect("/verification/")
Register(request=request, name=name, username=username, email=email, password=password)
def verify_account(request):
return render(request, "authorize/verify-account.html")
[registration.py]
from django.contrib import messages
from django.contrib.auth.models import User
from django.shortcuts import redirect, render
class Register:
def __init__(self, request, name, username, email, password) :
self.request = request
self.name = name
self.username = username
self.email = email
self.password = password
self.error_message = None
self.is_email = User.objects.filter(email=self.email)
self.is_username = User.objects.filter(username=self.username)
self.is_user()
def is_user(self):
if self.is_email and self.is_username:
print(1, "######################################################")
self.error_message = "Hmm.. Seems like your email and username already registered with us."
self.show_error()
elif self.is_email:
print(2, "######################################################")
self.error_message = "Grr... This email is already registered with us"
self.show_error()
elif self.is_username:
print(3, "######################################################")
self.error_message = "Grr... This username is already registered with us"
self.show_error()
else: # email and username is not in DB so register the new user
print(4, "######################################################")
# user = User
# return render(self.request, "authorize/verify-account.html")
return redirect("/verification/")
def show_error(self):
messages.error(self.request, self.error_message)
return render(self.request, "authorize/register.html")
показывает мои страницы urls.py и registration.html как необязательные
[urls.py]
from django.urls import path
from . import views
app_name = 'authorize'
urlpatterns = [
path('register/', views.register, name="register"),
path('verification/', views.verify_account, name="verify-account"),
path('login/', views.login, name="login"),
path('rest-password/', views.reset_password, name="reset_password"),
]
[register.html]
вы не возвращаете функцию перенаправления/рендеринга.
def register(request):
if request.method == "POST":
name = request.POST['name']
username = request.POST['username']
email = request.POST['email']
password = request.POST['password']
# return redirect("/verification/")
register = Register(request=request, name=name, username=username, email=email, password=password)
return register.is_user()
class Register:
def __init__(self, request, name, username, email, password) :
self.request = request
self.name = name
self.username = username
self.email = email
self.password = password
self.error_message = None
self.is_email = User.objects.filter(email=self.email)
self.is_username = User.objects.filter(username=self.username)
def is_user(self):
if self.is_email and self.is_username:
print(1, "#####################")
self.error_message = "Hmm.. Seems like your email and username already registered with us."
return self.show_error()
elif self.is_email:
print(2, "##########################")
self.error_message = "Grr... This email is already registered with us"
return self.show_error()
elif self.is_username:
print(3, "########################")
self.error_message = "Grr... This username is already registered with us"
return self.show_error()
else: # email and username is not in DB so register the new user
print(4, "###########################")
# user = User
# return render(self.request, "authorize/verify-account.html")
return redirect("/verification/")
def show_error(self):
messages.error(self.request, self.error_message)
return render(self.request, "authorize/register.html")
Но я думаю, что вы можете использовать Form для валидации данных POST, возможно, лучше и чище, чем вы сделали https://docs.djangoproject.com/fr/4.1/topics/forms/