Как создать страницу входа и регистрации с использованием существующей модели в Django == 2.1 - PullRequest
0 голосов
/ 02 июля 2019

Я создаю систему управления студентами с 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 голосов
/ 02 июля 2019

Вы можете использовать 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...