Wpis z mikrobloga

Robię aplikację w Django, która często komunikuje się z bazą. Dla uproszczenia przyjmijmy, że za każdym razem gdy ktoś wchodzi na konkretną stronę moja aplikacja zwiększa licznik odwiedzin tej strony o 1.

Powiedzmy, że mam takie 7 linijek kodu: https://pastebin.com/eqh6tDYu

Jak łatwo się domyślić przy większej liczbie wywołań, a nawet już przy dwóch jednoczesnych wyświetleniach strony coś może pójść nie tak:

wywołanie1 pobiera licznik z bazy: views=4
wywołanie1 zwiększa licznik o 1
wywołanie2 pobiera licznik z bazy: views=4 | już tu jest źle, aktualny licznik wynosi 5, ale nie został zapisany do bazy

wywołanie1 zapisuje licznik do bazy: views=5
wywołanie2 zwiększa licznik o 1
wywołanie2 chce zapisać do bazy: views=5 | a powinno być 6

Chyba wiadomo o co mi chodzi. Jak tym się ładnie zająć, jak zapewnić integralność bazy? Jakie są do tego mechanizmy w Django?
Jeżeli to ma jakieś znaczenie to jako bazy używam Postrgresa.

#programowanie #python #django
  • 11