Аутентификация пользователя перед активацией профиля в django - PullRequest
0 голосов
/ 04 февраля 2020

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

Это то, что у меня есть в моем views.py (teachers.py):

class TeacherSignUpView(CreateView):
    model = User
    form_class = TeacherSignUpForm
    template_name = 'registration/signup_form.html'

    def get_context_data(self, **kwargs):
        kwargs['user_type'] = 'teacher'
        return super().get_context_data(**kwargs)

    def form_valid(self, form, request):
        user = form.save()
        # user.set_password(form.cl)
        login(self.request, user)
        username = form.cleaned_data.get('first_name')
        email = form.cleaned_data.get('email')
        htmly = get_template('classroom/teachers/email.html')
        d = {'username': username}
        subject, from_email, to = 'Welcome to GradientBoost', 'emmanuel@thegradientboost.com', email
        html_content = htmly.render(d)
        msg = EmailMultiAlternatives(subject, html_content, from_email, [to])
        msg.attach_alternative(html_content, 'text/html')
        msg.send()
        if request.user.is_activated:
            return redirect('teachers:app-instructor-dashboard')
        else:
            return redirect('teachers:notyet')

models.py

class User(AbstractUser):
    is_student = models.BooleanField(default=False)
    is_teacher = models.BooleanField(default=False)
    is_activated = models.BooleanField(default=False)

и classroom.py (просмотры для домашней страницы, о странице et c):

#redirects after signup
def home(request):
    if request.user.is_authenticated and request.user.is_activated:
        if request.user.is_teacher:
            return redirect('teachers:app-instructor-dashboard')
        elif request.user.is_student:
            return redirect('students:app-student-dashboard')
    return render(request, 'classroom/home.html')
#about us page
def about(request):
    return render(request, 'classroom/about-us.html')
#courses page
def courses(request):
    return render(request, 'classroom/courses.html')
#course details
def course_details(request):
    return render(request, 'classroom/course-details.html')

Однако, когда я пытаюсь зарегистрироваться, я получаю сообщение об ошибке:

TypeError at /accounts/signup/teacher/
form_valid() missing 1 required positional argument: 'request'

1 Ответ

0 голосов
/ 04 февраля 2020

Как уже упоминалось в комментариях Kurohige, ваш form_valid метод имеет неверную подпись . Здесь - пример правильного использования представлений на основе классов.

Кроме того, вам не нужен запрос в качестве аргумента функции, и вы уже используете правильный параметр login(self.request, user)

def form_valid(self, form):
    user = form.save()
    login(self.request, user)
    username = form.cleaned_data.get('first_name')
    email = form.cleaned_data.get('email')
    htmly = get_template('classroom/teachers/email.html')
    d = {'username': username}
    subject, from_email, to = 'Welcome to GradientBoost', 'emmanuel@thegradientboost.com', email
    html_content = htmly.render(d)
    msg = EmailMultiAlternatives(subject, html_content, from_email, [to])
    msg.attach_alternative(html_content, 'text/html')
    msg.send()
    if request.user.is_activated:
        return redirect('teachers:app-instructor-dashboard')
    return redirect('teachers:notyet')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...