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/

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