在Django中激活配置文件之前对用户进行身份验证

时间:2020-02-04 11:33:18

标签: python django

我想设计一个注册过程,在该过程中,用户填写注册表单,接收详细说明下一步的电子邮件。在我手动以管理员身份登录并激活用户的个人资料之前,该用户将一直保持为非活动用户。

这是我的views.pyteachers.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(主页,关于页面的视图等):

#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 :(得分:0)

正如Kurohige的评论中所述,您的form_valid方法具有incorrect signatureHere是正确使用基于类的视图的示例。

此外,您不需要将请求用作函数参数,并且已经使用了正确的选项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')
相关问题