Django Session Form (временное сохранение формы)

Я создал страницу для формы отзыва. Все пользователи могут заполнить форму, но только зарегистрированные пользователи могут отправить форму. Если пользователь не вошел в систему, он будет перенаправлен на страницу входа. После входа они будут перенаправлены на страницу профиля.

Поток будет выглядеть следующим образом : Пользователь заполняет форму > нажимает кнопку submit > перенаправляется на страницу входа > пользователь входит в систему и перенаправляется на страницу профиля (при этом форма, которую он заполнил, автоматически сохраняется)

Я хочу, чтобы заполненная ими форма автоматически сохранялась после входа в систему. Как это сделать?

Моя идея состоит в том, чтобы создать сессию, которая временно сохраняет форму, а затем сохраняет в базу данных после того, как они войдут в систему. Но я запутался, как написать код

Может ли кто-нибудь объяснить, что такое сессия django? И как написать код для решения этой проблемы?

You can try something like,

1 User fills out the form and hits submit

2 in the POST view where you handle the form, use the "**is_authenticated**" function and, 
    a)if the user is authenticated you handle the form as usual...
    b)else set the contents of the form into a session variable in the views and redirect to the login page like,

request.session['review_body'] = request.post.get(the_form_body_field)

3 as per what you've said, after login it goes to profile page and form is submitted...
    a)so in views where you serve the profile page, check if the session variable containing form data's exist and has values
    b)if yes, directly save the contents from your views and clear the session data

Я использовал похожий способ, который вы можете реализовать,

поэтому в представлениях добавьте следующий код, который соответствует вашим критериям

@login_required
def myform(request):
    if request.method == 'GET':
        return render(request, 'appname/myform.html', {'form':appnameForm()})
    else:
        try:
            form = appnameform(request.POST)
            newform= form.save(commit=False)
            newform.user = request.user
            newform.save()
            return redirect('Home')
        except ValueError:
            return render(request, 'todo/myform.html', {'form':appnameform(), 'error':'Bad data passed in,Try again'})

также импортируйте на просмотры следующее:

from django.contrib.auth.decorators import login_required

и в настройках не забудьте добавить

LOGIN_URL = '/login'

Если вы хотите изучить django немного больше, я советую Zappycode.com У Ника Уолтера есть отличные курсы по Django, где он рассказывает об этом

Вот исходный код для проекта, который охватывает это, и вот видеоурок

Вернуться на верх