This is the files I'm working on. How do I restrict user to access this page? I want only admin to access this page. I've tried to use the custom decorators but it shows error for class-based-view. I'm a beginner so anyone can help??
views.py
class student_register(CreateView):
model = User
form_class = StudentSignUpForm
template_name = 'registration/student_register.html'
def form_valid(self, form_class):
user = form_class.save()
# login(self.request, user)
return redirect('datapage')
forms.py
class StudentSignUpForm(UserCreationForm):
first_name = forms.CharField(required=True)
last_name = forms.CharField(required=True)
phone_number = forms.CharField(required=True)
semester = forms.CharField(required=True)
email = forms.EmailField(required=True)
class Meta(UserCreationForm.Meta):
model = User
@transaction.atomic
def save(self):
user = super().save(commit=False)
user.is_student = True
user.first_name = self.cleaned_data.get('first_name')
user.last_name = self.cleaned_data.get('last_name')
user.email = self.cleaned_data.get('email')
user.username = self.cleaned_data.get('username')
user.password1 = self.cleaned_data.get('password1')
user.password2 = self.cleaned_data.get('password2')
user.save()
student = Student.objects.create(user=user)
student.phone_number=self.cleaned_data.get('phone_number')
student.semester=self.cleaned_data.get('semester')
student.save()
return user
urls.py
urlpatterns = [
path("loginrequest/", views.login_request, name="login"),
path("logoutrequest", views.logout_request, name="logout"),
path('student_register/', student_register.as_view(), name='student_register'),
path('teacher_register/',views.teacher_register.as_view(), name='teacher_register'),
]
student_register.html
<div class="container my-3">
<div class="form-group">
<h3>Register here!</h3>
<br>
<form method="POST" class="post-form" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
{{ form.media}}
<button type="submit" class="btn btn-success">Register</button>
</form>
</div>
You can use the UserPassesTestMixin
as
class StudentRegisterView(, CreateView):
model = User
form_class = StudentSignUpForm
template_name = 'registration/student_register.html'
def form_valid(self, form_class):
user = form_class.save()
# login(self.request, user)
return redirect('datapage')
You should use Mixins instead UserPassesTestMixin
should be appropriate
class IsAdmin(UserPassesTestMixin):
def test_func(self):
return self.request.user.is_admin
def handle_no_permission(self):
return redirect('someview')
class StudentRegister(IsAdmin, CreateView):
...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.