如何使用Django == 2.1中的现有模型制作登录和注册页面

时间:2019-07-02 09:12:06

标签: django django-models

我正在使用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,但无法使其正常工作。

1 个答案:

答案 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