Skip to main content

Django extensions for Hyperview mobile apps

Project description

django-hyperview

Django extensions for Hyperview mobile apps

Installation and Setup

Install with pip

python -m pip install django-hyperview

Configure

Add the app, once installed, to your INSTALLED_APPS

INSTALLED_APPS = [
    ...
    "django_hv",
    ...
]

Optionally, you can add the HyperviewMiddleware middleware to your settings.

MIDDLEWARE = [
    ...
    "django_hv.middleware.HyperviewMiddleware",
]

Usage

xml-based form fields

As with Django, you can dynamically create your xml-based forms with this package.

from .models import Contact

from django_hv.forms import ModelForm
from django_hv import widgets


class ContactForm(ModelForm):
    class Meta:
        model = Contact
        fields = ("first_name", "last_name", "phone_number", "email")
        widgets = {
            "first_name": widgets.TextField(attrs={"placeholder": "First name"}),
            "last_name": widgets.TextField(attrs={"placeholder": "Last name"}),
            "phone_number": widgets.TextField(attrs={"placeholder": "Phone number"}),
            "email": widgets.TextField(attrs={"placeholder": "Email address"}),
        }

In your view you can initiate the form as usual:

def contact_new(request):
    context = {"form": ContactForm(request.POST or None)}
    if request.method == "GET":
        response = render(request, "new.xml", context)
    elif request.method == "POST":
        form = ContactForm(request.POST)
        if form.is_valid():
            context["saved"] = True
            context["contact"] = form.save()
        response = render(request, "form_fields.xml", context)
    return hv_repond(response)

And the xml template, you can render the form as follows:

{% load hv_tags %}
<view xmlns="https://hyperview.org/hyperview" style="edit-group">
{% if saved %}
  <behavior trigger="load" once="true" action="dispatch-event" event-name="contact-updated" />
  <behavior trigger="load" once="true" action="reload" href="{{ contact.detail_url }}" />
{% endif %}
{% hv_csrf_token request %}
{{ form }}
</view>

Note that you can create a CSRF token if you load the template tags of this package: {% hv_csrf_token request %}. It needs the request as an argument since Django requires that object to create a token.

Hyperview response

You can use this package for your views.

from .models import Contact
from .forms import ContactForm

from django_hv.http import hv_repond


def contact_detail(request, id):
    response = render(request, "show.xml", {"contact": Contact.objects.get(id=id)})
    return hv_repond(response)

def contact_new(request):
    ...
    return HyperviewResponse(request, "new.xml", context={}) 

Check if the request comes from a Hypermedia client

For this to work, you need to add HyperviewMiddleware to MIDDLEWARE.

def contact_detail(request, id):
    template = "show.xml" if request.hv else "show.html"
    response = render(request, template, {"contact": Contact.objects.get(id=id)})
    return hv_repond(response)

The property request.hv checks if the request has a specific header that is passed by the Hypermedia client.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-hyperview-0.0.2.tar.gz (7.5 kB view hashes)

Uploaded Source

Built Distribution

django_hyperview-0.0.2-py3-none-any.whl (10.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page