Я пытаюсь понять обработку запроса Django.поток запросов Django
Моя цель - перенаправить пользователя сразу после его входа в систему, но когда я запустил этот код, я вижу, что моя база данных не была заполнена записью, которую я хочу, и при перенаправлении выбрано исключение DoesNotExist
.
При замене HttpResponseRedirect()
с кодом HttpResponse()
действует тот же код.
Либо мне не хватает части кода, либо Django рассматривает возможность перенаправления части более раннего запроса и выполнения перенаправления, но не обновления.
Неужели кто-нибудь сталкивался с этим вопросом раньше? версия
Джанго - 1,4
Регистрация вид (не обновление базы данных) -
try:
email_id = request.GET.__getitem__('email_id')
name = request.GET.__getitem__('name')
try:
Person.objects.create(email_id=email_id, name=name)
request.session['email_id'] = email_id
return HttpResponseRedirect('/myaccount/')
except IntegrityError:
return render_to_response('signup.html')
except MultiValueDictKeyError:
return render_to_response('signup.html')
Регистрация вид (обновление базы данных правильно) -
try:
email_id = request.GET.__getitem__('email_id')
name = request.GET.__getitem__('name')
try:
Person.objects.create(email_id=email_id, name=name)
request.session['email_id'] = email_id
return HttpResponse('This Works!!')
except IntegrityError:
return render_to_response('signup.html')
except MultiValueDictKeyError:
return render_to_response('signup.html')
MyAccount состязаться ж -
# Custom function that decodes the email_id from the session
email_id = return_email_id(request)
user = Person.objects.get(email_id=email_id)
name = user.name
return render_to_response('myaccount.html', {'name': name})
EDIT:
Код для return_email_id():
def return_email_id(request):
try:
check_session(request)
session_cookie = request.COOKIES['sessionid']
session_object = Session.objects.get(pk=session_cookie)
get_email_id = session_object.get_decoded()['email_id']
return HttpResponse(get_email_id)
except PermissionDenied:
raise PermissionDenied()
def check_session(request):
if request.session.get('email_id'):
return True
else:
raise PermissionDenied()
Помимо всего прочего, прекратите использовать методы с двойным подчеркиванием, такие как '__getitem__'. Практически никогда нет веских оснований для этого, и, конечно же, не один из кода, который вы опубликовали. GET - это объект типа dict, поэтому используйте метод 'get()'. –
И проблема, похоже, связана с вашей функцией 'return_email_id', возможно, вам стоит опубликовать код для этого. –
@ DanielRoseman - Спасибо. Я буду использовать '__getitem__' для использования' get() '. –