Django zmienne sesyjne przekazywane z formularza

Django zmienne sesyjne przekazywane z formularza
GT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:35
0

Cześć, mam pytanie odnośnie zmiennych sesyjnych. Piszę mały projekt, który ma polegać na dodawaniu przedmiotów i ewentualnym ich skreślaniu(coś w rodzaju ToDoList).
Nie chcę zapisywać informacji standardowo w bazie danych tylko aby były one trzymane w zmiennych sesyjnych, które usuwają się w momencie zamknięcia karty w przeglądarce.
Coś tam próbowałem z pomocą google i potrafię już przechwycić dodany przedmiot i rzeczywiście po użyciu print() zwraca mi aktualnie dodany przedmiot.
Obecnie nie wiem jak przekazać dodany przedmiot przez użytkownika do templatek(mam na myśli do strony frontendowej aplikacji).

Jeżeli jesteście w stanie doradzić jak zrobić to poprawniej lub podpowiedzieć co nieco będzie mi niezmiernie miło. :)

Z góry dziękuję za pomoc. :D

edytowany 1x, ostatnio: GoT98wppl
ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
1

tworzenie zmiennej -> request.session["key"] = value
przechwycenie zmiennej -> request.session.get("key")


Robię http response status cody w martwych ciągach
GT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:35
0

@ledi12:
Dzięki za post. Kawałek mojego kodu wklejam na dole. Dopiero po użyciu metody POST mam tę zmienną, wcześniej ona nie istnieje. Jeżeli ją zadeklaruje jako sessionData=None przed if'em, to po przeładowaniu strony mi ją nadpiszę i będzie po prostu None.
Więc dalej nie rozwiązało mi to mojego problemu przekazania zmiennych. Chyba że mógłbym Ciebie prosić o dokładniejsze rozpisanie tego na moim przykładzie. :)

Kopiuj
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            request.session['form_data'] = form.cleaned_data
            sessionData = request.session['form_data']
        return redirect('/')
    context = {'shopList': shopList, 'form': form, 'products': products, 'sessionData': sessionData}
    return render(request, 'QuickShopperApp/home.html', context)
ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
1
Kopiuj
    form_cleaned = None
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            form_cleaned = form.cleaned_data
    context = {'shopList': shopList, 'form': form, 'products': products, 'formCleaned': form_cleaned}
    return render(request, 'QuickShopperApp/home.html', context)

Sproboj tak


Robię http response status cody w martwych ciągach
edytowany 2x, ostatnio: ledi12
GT
Nie pomogło, dalej jest, ponieważ dopiero po użyciu metody POST ta zmienna jest deklarowana a przy samym załadowaniu strony czyli GET, ona nie istnieje local variable 'form_cleaned' referenced before assignment
ledi12
No przy gecie nie ma prawa byc widoczna. Nie mozesz utworzyc zmiennej z danymi formularza bez wczesniejszego wyslania tego formularza. Daj form_cleaned przed ifem
GT
https://imgur.com/7E17Pwd Dostaje takie cos, prawdopodobnie dlatego że zmienna formCleaned utworzy się dopiero po wypełnieniu formularza a już przy załadowaniu strony jest ona przekazywana do templates
ledi12
edytowalem odpowiedz
GT
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 3 lata
  • Postów:35
0

@ledi12:
Tak rzeczywiście działa, koniec końców też do tego doszedłem, ale mój kod wyglądał 10razy gorzej niż Twój i miał niepotrzebne rzeczy.:D
A powiesz mi jeszcze prosze jak mogę to zrobi,ć aby te rzeczy dodawały się (może do jakiejś tablicy) i były widoczne jedna po drugiej i możliwe do edycji?
Czy to podejście i ten kod o którym rozmawialiśmy ma sens, aby to działało w taki sposób?
Dziękuję jeszcze raz za pomoc.

ledi12
Pytanie co dokładnie chcesz zrobić. Raczej unikałbym zabawy tablicami.
GT
Chciałbym stworzyć coś w rodzaju takiej aplikacji https://ihouwat.github.io/shopping-list-react-app-demo/ Aby te przedmioty które sobie dodam, były do momentu wyłączenia okna przeglądarki lub przeglądarki w telefonie.
ledi12
Zmienne sesyjne będą okej :) między nimi możesz przerzucać dane (również tablice, czy obiekty). Nie deklaruj tylko tablicy gdzieś poza metodami/klasami bo wtedy zrobisz sobie kuku.
GT
Mógłbyś doradzić jak to zrobić? Chodzi mi o logikę. Żeby mnie trochę nakierować co powinienem robić, bo nie mam pomysłu. :(
ledi12
Większość sklepów internetowych korzysta z ciasteczek i w nich trzyma dane o przedmiotach klientów. Ew możesz trzymać to w bazie.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.