def organization_form(request, org_id): if org_id != "new": org = get_object_or_404(Organization, pk=org_id) else: org = None if request.method == 'POST': form = OrganizationForm(data=request.POST, instance=org) if form.is_valid(): # form.instance.owner = form.instance.owner or request.user old_org = bool(form.instance.pk) form.instance.save(owner=request.user) form.instance.users.add(request.user) # form.instance.save() if old_org: return HttpResponseRedirect(reverse("org_management")) else: return HttpResponseRedirect( reverse("zone_form", kwargs={ "zone_id": "new", "org_id": form.instance.pk })) else: form = OrganizationForm(instance=org) return {'form': form}
def organization_form(request, org_id): if org_id != "new": org = get_object_or_404(Organization, pk=org_id) else: org = None if request.method == "POST": form = OrganizationForm(data=request.POST, instance=org) if form.is_valid(): # form.instance.owner = form.instance.owner or request.user old_org = bool(form.instance.pk) form.instance.save(owner=request.user) form.instance.users.add(request.user) # form.instance.save() if old_org: return HttpResponseRedirect(reverse("org_management")) else: return HttpResponseRedirect(reverse("zone_form", kwargs={"zone_id": "new", "org_id": form.instance.pk})) else: form = OrganizationForm(instance=org) return {"form": form}
def organization_form(request, id=None): if id != "new": org = get_object_or_404(Organization, pk=id) if not org.is_member(request.user): return HttpResponseNotAllowed("You do not have permissions for this organization.") else: org = None if request.method == 'POST': form = OrganizationForm(data=request.POST, instance=org) if form.is_valid(): # form.instance.owner = form.instance.owner or request.user old_org = bool(form.instance.pk) form.instance.save(owner=request.user) form.instance.users.add(request.user) # form.instance.save() if old_org: return HttpResponseRedirect(reverse("homepage")) else: return HttpResponseRedirect(reverse("zone_form", kwargs={"id": "new", "org_id": form.instance.pk}) ) else: form = OrganizationForm(instance=org) return { 'form': form }
def register(request, backend, success_url=None, form_class=None, disallowed_url='registration_disallowed', template_name='registration/registration_form.html', extra_context=None): """ Allow a new user to register an account. The actual registration of the account will be delegated to the backend specified by the ``backend`` keyword argument (see below); it will be used as follows: 1. The backend's ``registration_allowed()`` method will be called, passing the ``HttpRequest``, to determine whether registration of an account is to be allowed; if not, a redirect is issued to the view corresponding to the named URL pattern ``registration_disallowed``. To override this, see the list of optional arguments for this view (below). 2. The form to use for account registration will be obtained by calling the backend's ``get_form_class()`` method, passing the ``HttpRequest``. To override this, see the list of optional arguments for this view (below). 3. If valid, the form's ``cleaned_data`` will be passed (as keyword arguments, and along with the ``HttpRequest``) to the backend's ``register()`` method, which should return the new ``User`` object. 4. Upon successful registration, the backend's ``post_registration_redirect()`` method will be called, passing the ``HttpRequest`` and the new ``User``, to determine the URL to redirect the user to. To override this, see the list of optional arguments for this view (below). **Required arguments** None. **Optional arguments** ``backend`` The dotted Python import path to the backend class to use. ``disallowed_url`` URL to redirect to if registration is not permitted for the current ``HttpRequest``. Must be a value which can legally be passed to ``django.shortcuts.redirect``. If not supplied, this will be whatever URL corresponds to the named URL pattern ``registration_disallowed``. ``form_class`` The form class to use for registration. If not supplied, this will be retrieved from the registration backend. ``extra_context`` A dictionary of variables to add to the template context. Any callable object in this dictionary will be called to produce the end result which appears in the context. ``success_url`` URL to redirect to after successful registration. Must be a value which can legally be passed to ``django.shortcuts.redirect``. If not supplied, this will be retrieved from the registration backend. ``template_name`` A custom template to use. If not supplied, this will default to ``registration/registration_form.html``. **Context:** ``form`` The registration form. Any extra variables supplied in the ``extra_context`` argument (see above). **Template:** registration/registration_form.html or ``template_name`` keyword argument. """ backend = get_backend(backend) if not backend.registration_allowed(request): return redirect(disallowed_url) if form_class is None: form_class = backend.get_form_class(request) do_subscribe = request.REQUEST.get("email_subscribe") == "on" if request.method == 'POST': form = form_class(data=request.POST, files=request.FILES) org_form = OrganizationForm(data=request.POST, instance=Organization()) # Could register if form.is_valid() and org_form.is_valid(): assert form.cleaned_data.get("username") == form.cleaned_data.get("email"), "Should be set equal in the call to clean()" try: # Create the user new_user = backend.register(request, **form.cleaned_data) # Add an org. Must create org before adding user. org_form.instance.owner = new_user org_form.save() org = org_form.instance org.add_member(new_user) # Now add a zone, and link to the org zone = Zone(name=org_form.instance.name + " Sharing Network") zone.save() org.add_zone(zone) # Finally, try and subscribe the user to the mailing list # (silently; don't return anything to the user) if do_subscribe: contact_subscribe(request, form.cleaned_data['email']) # no "return" org.save() if success_url is None: to, args, kwargs = backend.post_registration_redirect(request, new_user) return redirect(to, *args, **kwargs) else: return redirect(success_url) except IntegrityError as e: if e.message=='column username is not unique': form._errors['__all__'] = _("An account with this email address has already been created. Please login at the link above.") else: raise e # GET, not POST else: form = form_class() org_form = OrganizationForm() if extra_context is None: extra_context = {} context = RequestContext(request) for key, value in extra_context.items(): context[key] = callable(value) and value() or value return render_to_response( template_name, { 'form': form, "org_form" : org_form, "subscribe": do_subscribe, }, context_instance=context, )
def register(request, backend, success_url=None, form_class=None, disallowed_url='registration_disallowed', template_name='registration/registration_form.html', extra_context=None): """ Allow a new user to register an account. The actual registration of the account will be delegated to the backend specified by the ``backend`` keyword argument (see below); it will be used as follows: 1. The backend's ``registration_allowed()`` method will be called, passing the ``HttpRequest``, to determine whether registration of an account is to be allowed; if not, a redirect is issued to the view corresponding to the named URL pattern ``registration_disallowed``. To override this, see the list of optional arguments for this view (below). 2. The form to use for account registration will be obtained by calling the backend's ``get_form_class()`` method, passing the ``HttpRequest``. To override this, see the list of optional arguments for this view (below). 3. If valid, the form's ``cleaned_data`` will be passed (as keyword arguments, and along with the ``HttpRequest``) to the backend's ``register()`` method, which should return the new ``User`` object. 4. Upon successful registration, the backend's ``post_registration_redirect()`` method will be called, passing the ``HttpRequest`` and the new ``User``, to determine the URL to redirect the user to. To override this, see the list of optional arguments for this view (below). **Required arguments** None. **Optional arguments** ``backend`` The dotted Python import path to the backend class to use. ``disallowed_url`` URL to redirect to if registration is not permitted for the current ``HttpRequest``. Must be a value which can legally be passed to ``django.shortcuts.redirect``. If not supplied, this will be whatever URL corresponds to the named URL pattern ``registration_disallowed``. ``form_class`` The form class to use for registration. If not supplied, this will be retrieved from the registration backend. ``extra_context`` A dictionary of variables to add to the template context. Any callable object in this dictionary will be called to produce the end result which appears in the context. ``success_url`` URL to redirect to after successful registration. Must be a value which can legally be passed to ``django.shortcuts.redirect``. If not supplied, this will be retrieved from the registration backend. ``template_name`` A custom template to use. If not supplied, this will default to ``registration/registration_form.html``. **Context:** ``form`` The registration form. Any extra variables supplied in the ``extra_context`` argument (see above). **Template:** registration/registration_form.html or ``template_name`` keyword argument. """ backend = get_backend(backend) if not backend.registration_allowed(request): return redirect(disallowed_url) if form_class is None: form_class = backend.get_form_class(request) do_subscribe = request.REQUEST.get("email_subscribe") == "on" if request.method == 'POST': form = form_class(data=request.POST, files=request.FILES) org_form = OrganizationForm(data=request.POST, instance=Organization()) # Could register if form.is_valid() and org_form.is_valid(): assert form.cleaned_data.get("username") == form.cleaned_data.get("email"), "Should be set equal in the call to clean()" try: # Create the user new_user = backend.register(request, **form.cleaned_data) # Add an org. Must create org before adding user. org_form.instance.owner = new_user org_form.save() org = org_form.instance org.add_member(new_user) # Now add a zone, and link to the org zone = Zone(name=org_form.instance.name + " Default Zone") zone.save() org.add_zone(zone) # Finally, try and subscribe the user to the mailing list # (silently; don't return anything to the user) if do_subscribe: contact_subscribe(request, form.cleaned_data['email']) # no "return" org.save() if success_url is None: to, args, kwargs = backend.post_registration_redirect(request, new_user) return redirect(to, *args, **kwargs) else: return redirect(success_url) except IntegrityError as e: if e.message=='column username is not unique': form._errors['__all__'] = _("An account with this email address has already been created. Please login at the link above.") else: raise e # GET, not POST else: form = form_class() org_form = OrganizationForm() if extra_context is None: extra_context = {} context = RequestContext(request) for key, value in extra_context.items(): context[key] = callable(value) and value() or value return render_to_response( template_name, { 'form': form, "org_form" : org_form, "subscribe": do_subscribe, }, context_instance=context, )