Added basic creation and deletion buttons for RFID

This commit is contained in:
Sam Collins 2017-10-31 22:42:00 +00:00 committed by Oliver Marks
parent 8a2fa40f04
commit 8678c06108
7 changed files with 79 additions and 40 deletions

21
mhackspace/rfid/urls.py Normal file
View File

@ -0,0 +1,21 @@
from django.conf.urls import url
from mhackspace.rfid import views
access_card_patterns = ([
url(
regex=r'^$',
view=views.RfidCardsListView.as_view(),
name='index'
),
url(
regex=r'^create$',
view=views.RfidCardsUpdateView.as_view(),
name='create'
),
url(
regex=r'^delete/(?P<pk>\d+)/$',
view=views.RfidCardsDeleteView.as_view(),
name='delete'
),
], 'access_cards')

View File

@ -2,6 +2,10 @@ import logging
from rest_framework.response import Response from rest_framework.response import Response
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework import status from rest_framework import status
from django.views.generic import ListView, DeleteView, CreateView
from django.contrib.auth.mixins import LoginRequiredMixin
from mhackspace.users.models import Rfid from mhackspace.users.models import Rfid
from mhackspace.rfid.models import Device, DeviceAuth from mhackspace.rfid.models import Device, DeviceAuth
from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer from mhackspace.rfid.serializers import DeviceSerializer, AuthSerializer
@ -39,3 +43,29 @@ class AuthUserWithDeviceViewSet(viewsets.ViewSet):
serializer = AuthSerializer( serializer = AuthSerializer(
instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier}) instance={'name': device.name, 'rfid': rfid.code, 'device': device.identifier})
return Response(serializer.data, status=200) return Response(serializer.data, status=200)
class RfidCardsListView(LoginRequiredMixin, ListView):
template_name = 'users/rfid_form.html'
context_object_name = 'rfids'
paginate_by = 50
model = Rfid
def get_queryset(self):
return Rfid.objects.filter(user=self.request.user)
class RfidCardsUpdateView(LoginRequiredMixin, CreateView):
fields = ['code', 'description', ]
model = Rfid
success_url = '/users/access-cards'
def form_valid(self, form):
user = self.request.user
form.instance.user = user
return super(RfidCardsUpdateView, self).form_valid(form)
class RfidCardsDeleteView(LoginRequiredMixin, DeleteView):
model = Rfid
success_url = '/users/access-cards'

View File

@ -0,0 +1,14 @@
{% extends "base.html" %}
{% load i18n %}
{% load static %}
{% load crispy_forms_tags %}
{% load socialaccount %}
{% block title %}Delete RFID: {{ object.description }}{% endblock %}
{% block content %}
<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Delete" />
</form>
{% endblock %}

View File

@ -6,7 +6,7 @@
{% block content %} {% block content %}
{% if form %} {% if form %}
<h1>{{ user.username }}</h1> <h1>{{ user.username }}</h1>
<form class="form-horizontal" method="post" action="{% url 'users:access_card_create' %}" enctype="multipart/form-data"> <form class="form-horizontal" method="post" action="{% url 'users:access_cards:create' %}" enctype="multipart/form-data">
{% csrf_token %} {% csrf_token %}
{{ form|crispy }} {{ form|crispy }}
{{ form_blurb|crispy }} {{ form_blurb|crispy }}
@ -23,6 +23,7 @@
<th>#</th> <th>#</th>
<th>Code</th> <th>Code</th>
<th>Short Description</th> <th>Short Description</th>
<th><a class="btn btn-primary pull-right" href="{% url 'users:access_cards:create' %}">Create</a></th>
</tr> </tr>
</thead> </thead>
{% for rfid in rfids %} {% for rfid in rfids %}
@ -34,6 +35,9 @@
<td> <td>
{{ rfid.description }} {{ rfid.description }}
</td> </td>
<td>
<a href="{% url 'users:access_cards:delete' rfid.id %}">Delete</a>
</td>
</tr> </tr>
{% endfor %} {% endfor %}
</table> </table>

View File

@ -1,11 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django.conf.urls import url from django.conf.urls import include, url
from mhackspace.rfid.urls import access_card_patterns
from . import views from . import views
urlpatterns = [ urlpatterns = [
url('^access-cards/', include(access_card_patterns)),
url( url(
regex=r'^$', regex=r'^$',
view=views.UserListView.as_view(), view=views.UserListView.as_view(),
@ -25,15 +27,5 @@ urlpatterns = [
regex=r'^~update/$', regex=r'^~update/$',
view=views.UserUpdateView.as_view(), view=views.UserUpdateView.as_view(),
name='update' name='update'
), )
url(
regex=r'^-access-cards$',
view=views.RfidCardsListView.as_view(),
name='access_cards'
),
url(
regex=r'^-access-card-create$',
view=views.RfidCardsUpdateView.as_view(),
name='access_card_create'
),
] ]

View File

@ -2,17 +2,16 @@
from __future__ import absolute_import, unicode_literals from __future__ import absolute_import, unicode_literals
from django.core.urlresolvers import reverse from django.core.urlresolvers import reverse
from django.views.generic import DetailView, ListView, RedirectView, UpdateView, CreateView from django.views.generic import DetailView, ListView, RedirectView, UpdateView
from django.contrib.auth.mixins import LoginRequiredMixin from django.contrib.auth.mixins import LoginRequiredMixin
from .models import Rfid
from .models import User from .models import User
from .models import Blurb from .models import Blurb
from .models import Membership from .models import Membership
from .forms import BlurbForm, MembershipJoinForm from .forms import BlurbForm, MembershipJoinForm
class UserDetailView(LoginRequiredMixin, DetailView): class UserDetailView(LoginRequiredMixin, DetailView):
model = User model = User
# These next two lines tell the view to index lookups by username # These next two lines tell the view to index lookups by username
@ -67,27 +66,6 @@ class UserUpdateView(LoginRequiredMixin, UpdateView):
return super(UserUpdateView, self).form_valid(form) return super(UserUpdateView, self).form_valid(form)
class RfidCardsListView(LoginRequiredMixin, ListView):
template_name = 'users/rfid_form.html'
context_object_name = 'rfids'
paginate_by = 50
model = Rfid
def get_queryset(self):
return Rfid.objects.filter(user=self.request.user)
class RfidCardsUpdateView(LoginRequiredMixin, CreateView):
fields = ['code', 'description', ]
model = Rfid
success_url = '/users/-access-cards'
def form_valid(self, form):
user = self.request.user
form.instance.user = user
return super(RfidCardsUpdateView, self).form_valid(form)
class UserListView(LoginRequiredMixin, ListView): class UserListView(LoginRequiredMixin, ListView):
model = User model = User
# These next two lines tell the view to index lookups by username # These next two lines tell the view to index lookups by username