Невозможно войти в мое приложение django после первой регистрации django

В своем приложении я использовал приложение django-registration с моделями учеников и учителей. В этом я регистрирую нового пользователя и захожу в первый раз, и все работает отлично. Но я не могу войти снова после выхода. Может кто-нибудь сказать мне, почему это происходит?

def accountLoginView(request):
    context= {}
    context['program_list'] = Program.objects.all()
    context.update(csrf(request))
    return render_to_response('general/account_login.html', context)

`

def accountAuthView(request):
    username = request.POST.get('username','')
#group = request.POST.get('group','')
     password = request.POST.get('password','')
     user = auth.authenticate(username=username,password=password)
     context= {}
     context.update(csrf(request))
# pdb.set_trace()
     if user is not None:
        try:
            Student.objects.get(user=request.user.id)
            is_student = True
        except Student.DoesNotExist:
            is_student = False
        try:
            Faculty.objects.get(user=request.user.id)
            is_faculty = True
        except Faculty.DoesNotExist:
            is_faculty = False
    # pdb.set_trace()
        if is_student == True:
           auth.login(request, user)
           return HttpResponseRedirect('/students')
       elif is_faculty == True:
           auth.login(request, user)
           return HttpResponseRedirect('/faculty')
class _RequestPassingFormView(FormView):
"""
A version of FormView which passes extra arguments to certain
methods, notably passing the HTTP request nearly everywhere, to
enable finer-grained processing.

"""
def get(self, request, *args, **kwargs):
    # Pass request to get_form_class and get_form for per-request
    # form control.
    form_class = self.get_form_class(request)
    form = self.get_form(form_class)
    return self.render_to_response(self.get_context_data(form=form))

def post(self, request, *args, **kwargs):
    # Pass request to get_form_class and get_form for per-request
    # form control.
    form_class = self.get_form_class(request)
    form = self.get_form(form_class)
    if form.is_valid():
        # Pass request to form_valid.
        return self.form_valid(request, form)
    else:
        return self.form_invalid(form)

def get_form_class(self, request=None):
    return super(_RequestPassingFormView, self).get_form_class()

def get_form_kwargs(self, request=None, form_class=None):
    return super(_RequestPassingFormView, self).get_form_kwargs()

def get_initial(self, request=None):
    return super(_RequestPassingFormView, self).get_initial()

def get_success_url(self, request=None, user=None):
    # We need to be able to use the request and the new user when
    # constructing success_url.
    # pdb.set_trace()
    return super(_RequestPassingFormView, self).get_success_url()

def form_valid(self, form, request=None):
    return super(_RequestPassingFormView, self).form_valid(form)

def form_invalid(self, form, request=None):
    return super(_RequestPassingFormView, self).form_invalid(form)

RegistrationView:

class RegistrationView(_RequestPassingFormView):
    """
    Base class for user registration views.

    """
    disallowed_url = 'registration_disallowed'
    form_class = REGISTRATION_FORM
    http_method_names = ['get', 'post', 'head', 'options', 'trace']
    success_url = None
    template_name = 'registration/registration_form.html'

    @method_decorator(sensitive_post_parameters('password1', 'password2'))
    def dispatch(self, request, *args, **kwargs):
        """
        Check that user signup is allowed before even bothering to
        dispatch or do other processing.

        """
        if not self.registration_allowed(request):
            return redirect(self.disallowed_url)
        return super(RegistrationView, self).dispatch(request, *args, **kwargs)

    def form_valid(self, request, form):
        new_user = self.register(request, form)
        success_url = self.get_success_url(request, new_user)

        # success_url may be a simple string, or a tuple providing the
        # full argument set for redirect(). Attempting to unpack it
        # tells us which one it is.
        try:
            to, args, kwargs = success_url
            # pdb.set_trace()
            return redirect(to, *args, **kwargs)
        except ValueError:
            # pdb.set_trace()
            return redirect(success_url)

    def registration_allowed(self, request):
        """
        Override this to enable/disable user registration, either
        globally or on a per-request basis.

        """
        return True

    def register(self, request, form):
        """
        Implement user-registration logic here. Access to both the
        request and the full cleaned_data of the registration form is
        available here.

        """
        raise NotImplementedError

1 ответ

Я считаю, что проблема заключается в строке:

Student.objects.get(user=request.user.id)

а также

Faculty.objects.get(user=request.user.id)

Вы, кажется, проверяете, равен ли объект пользователя значению идентификатора request.user / pk (которое является целым числом, а не объектом). Таким образом, ваш код говорит, что "нет студенческого объекта или факультетского объекта, эквивалентного значению ID / pk request.user. Затем, когда вы переходите к операторам if, is_student и is_faculty возвращают false, поэтому он не выполняет перенаправление.

Я не уверен, что ваша модель "Студент и преподаватель" имеет отношение OneToOneField с пользователем, и я не знаю, как называется это отношение (если оно существует). Я предполагаю, что отношения OneToOneField существуют, и это

user = models.OneToOneField(User)

С этим предположением попробуйте этот код и дайте мне знать, какую ошибку вы получите:

def accountAuthView(request):
    username = request.POST.get('username','')
     password = request.POST.get('password','')
     user = auth.authenticate(username=username,password=password)

     context= {}
     context.update(csrf(request))

     if user is not None: # if user exists
        try:
            Student.objects.get(user.id=request.user.id)
            is_student = True
        except Student.DoesNotExist:
            is_student = False
        try:
            Faculty.objects.get(user.id=request.user.id)
            is_faculty = True
        except Faculty.DoesNotExist:
            is_faculty = False

        if is_student == True:
           auth.login(request, user)
           return HttpResponseRedirect('/students')
       elif is_faculty == True:
           auth.login(request, user)
           return HttpResponseRedirect('/faculty')
       else: # what happens if the user is not student or faculty?
           auth.login(request, user)
           return HttpResponseRedirect('/notStudentOrFaculty')
Другие вопросы по тегам