python - Prevent repopulation and/or resubmit of Django form after using the back button -
the problem
we have following setup.
- pretty standard django class based view (inherits
createview, i'll call form on). - after successful post , form validation, object created, , user
redirect_to'ddetailviewof created record. - some users decide not happy data entered. press button.
- the html generated
createviewfetched form browser cache, , repopulated data entered. - to user, feels edit, change data , submit again.
- the result 2 records, minor differences.
what have tried?
at first thought post-redirect-get (prg) pattern django uses supposed prevent this. after investigating, seems prg meant prevent dreaded "do want resubmit form?" dialog. dead end.
after hitting button, fetched cache, have no chance of interacting user our django code. try , prevent local caching, have decorated
createview@never_cache. nothing us, page still retrieved form cache.
what considering?
we considering dirty javascript tricks onload check of window.referrer, , manual clean of form and/or notice user if referrer looks detailview mentioned earlier. of course feel totally wrong. again, semi-duplicate records in our db.
however, seems unlikely first bothered wanted ask around here on stackoverflow.
ideally, tell browser caching form big no, , browser listen. again, use @never_cache, apparently not enough. happens in chrome, safari , firefox.
looking forward insights! thanks!
maybe don't process post request when it's coming referrer other same page?
from urllib import parse class createview(...): def post(self, *args, **kwargs): referer = 'http_referer' in self.request.meta , parse.urlparse(self.request.meta['http_referer']) if referer , (referer.netloc != self.request.meta.get('http_host') or referer.path != self.request.meta.get('path_info')): return self.get(*args, **kwargs) ...
Comments
Post a Comment