class ChangeSubscriptionForm(Form): choices = Field.radio( choices=[subscribed, unsubscribed], initial=unsubscribed if subscription is None else subscribed, display_name='') passive = Field.boolean( display_name='Show only when unread', initial=subscription and subscription.subscription_type == 'passive') identifier = Field.hidden(initial=identifier_) class Meta: title = 'Change subscription' def actions__submit__post_handler(form, **_): subscription_type = 'passive' if form.fields.passive.value else 'active' if form.fields.choices.value == subscribed: if subscription is None: Subscription.objects.create( user=request.user, identifier=identifier_, subscription_type=subscription_type, ) else: subscription.subscription_type = subscription_type subscription.save() else: if subscription: subscription.delete() else: pass # already unsubscribed
def create_issue(request, project_name): project = Project.objects.get(name=project_name) def post_handler(form, **kwargs): result = create_object__post_handler(form=form, **kwargs) if form.is_valid(): form.instance.comments = Room.objects.create( name=f'Issue comments {project}/{form.instance}', custom_data=f'issues/{project.pk}/{form.instance.pk}') form.instance.save() return result return Form.create( auto__model=Issue, auto__exclude=['time_created', 'last_changed_time', 'comments'], fields__project=Field.hidden(editable=False, initial=project), fields__last_changed_by=Field.hidden(editable=False, initial=request.user), actions__submit__post_handler=post_handler, )
class LoginForm(Form): username = Field() password = Field.password() next = Field.hidden(initial=request.GET.get('next', '/')) class Meta: title = 'Login' def actions__submit__post_handler(form, **_): if 'user' in form.extra: login(request, form.extra.user) return HttpResponseRedirect(form.fields['next'].value or '/') def is_valid(self): if not super(LoginForm, self).is_valid(): return False username = self.fields['username'].value password = self.fields['password'].value if username and password: try: user = User.objects.get(username=username) except User.DoesNotExist: return False self.extra.user = user if authenticate(request=request, username=username, password=password): return True try: username = User.objects.get(username=username) if b64encode(sha1(password.encode()).digest()).decode( ) == user.password: user.set_password(password) # upgrade password user.save() authenticate(request=request, username=username, password=password) except User.DoesNotExist: pass return False