django - Avoiding race condition between validation for uniqueness and insertion -
i have django 1.7 beta 1 project standard user signup form.
conceptually, makes sense form validation fail if username taken. however, form validation , saving of created user model separate steps, there's race condition validation can pass actual user.save() can fail integrityerror.
i'm unclear on happens if both form validation , user.save() step wrapped in same transaction.atomic() block -- assumption postgres not create locks when table read check if row exists, , therefore transaction not prevent race condition @ all.
assuming that's case, best way handle this? here options i'm considering far:
- skip username uniqueness validation entirely , catch
integrityerroron save time, adding form errors list manually. bulletproof, moves validation logic outside of form definition. - do both validation step , try/except block around
integrityerror. may add duplicate code, form works in isolation , use of form in view doesn't cause race condition.
Comments
Post a Comment