我正在使用django开发学生管理系统。我有一个Student
模型,只有学生入学时才应由注册服务商修改。注册服务商将使用内置的django管理页面添加学生。
class Student(models.Model):
first_name = models.CharField(max_length=100, null=False, blank=False)
last_name = models.CharField(max_length=100, null=False, blank=False)
roll = models.CharField(unique=True, max_length=200, null=False, blank=False)
email = models.EmailField(unique=True, null=False, blank=False)
age = models.PositiveIntegerField(blank=True)
gender = models.CharField(choices=GENDER, default='O', max_length=1)
dob = models.DateField(null=False, help_text='YYYY-MM-DD', blank=False)
admission_type = models.CharField(choices=ADMISSION_TYPES, default='B', max_length=1)
现在,我希望能够使用此模型为学生创建登录页面和注册页面。
在注册页面上,学生输入有效的卷号和密码。
在登录页面中,他必须输入此密码和密码才能进入其仪表板。
如何有效地做到这一点?我尝试扩展AbstractUser
,但无法使其正常工作。
答案 0 :(得分:0)
您可以为此使用UserCreationForm
。例如:
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class RegisterForm(UserCreationForm):
class Meta:
model = User
fields = ['username','password1','password2']
# you can use the username as the student roll number which is unique
views.py
def register(request):
if request.method == "POST":
form = RegisterForm(request.POST or None)
if form.is_valid():
student = form.save(commit=False)
student.save()
return redirect('redirect where you want')
else:
form = RegisterForm()
return render(request, 'register_student.html', {'form': form})
register_student.html
看起来像这样,但是您可以根据需要自定义此表单。
<form action="" method="post" >
{% csrf_token %}
{{form.as_p}}
<input type='submit' value='submit'>
</form>
对于登录,您可以这样做:
在forms.py
class LoginForm(forms.Form):
username = forms.CharField(max_length=100)
password = forms.CharField(widget=forms.PasswordInput)
views.py
中的这样做:
def login(request):
if request.method == 'POST':
form = LoginForm(request.POST or None)
if form.is_valid():
roll_num = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(request,username=username, password=password)
if user and user.is_active:
login(request, user)
messages.....
return redirect('redirect where you want')
else:
messages.error(request,'invalid credentials')
else:
form = LoginForm()
return render(request, 'login_student.html', {'form': form})
您可以像制作login_student.html
一样制作register_student.html