Невозможно войти в мое приложение 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')