我想设计一个注册过程,在该过程中,用户填写注册表单,接收详细说明下一步的电子邮件。在我手动以管理员身份登录并激活用户的个人资料之前,该用户将一直保持为非活动用户。
这是我的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
(主页,关于页面的视图等):
#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'
答案 0 :(得分:0)
正如Kurohige的评论中所述,您的form_valid
方法具有incorrect signature。 Here是正确使用基于类的视图的示例。
此外,您不需要将请求用作函数参数,并且已经使用了正确的选项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')