More UI and a basic datastructure

This commit is contained in:
nikolark committed 2012-02-02 07:55:55 +01:00
1 parent 6a4620b4d1
commit 8af1a2f2b4
10 files changed
+116 -44

No files matched your search

+12 -12
View File
@@ -1,17 +1,17 @@
from django import forms
from django.forms.widgets import RadioSelect
#from radius.models import *
#
#class TempUserForm(forms.ModelForm):
# # TODO : Move this to radius?
# class Meta:
# model = TempUser
class TempUserForm(forms.Form):
who = forms.CharField(label='Hvem')
who = forms.CharField(label='Hvem', required=True)
RANGE_CHOICES = (
('1 day', '1 dag'),
('2 days', '2 dager'),
('7 days', '1 uke (7 dager)'),
('1', '1 dag'),
('2', '2 dager'),
('7', '1 uke (7 dager)'),
)
duration = forms.ChoiceField(label='Varighet', choices=RANGE_CHOICES)
why = forms.CharField(label='Hvorfor')
duration = forms.TypedChoiceField(
label='Varighet',
coerce=int,
choices=RANGE_CHOICES,
widget=RadioSelect,
required=True)
why = forms.CharField(label='Hvorfor', required=True)
+8 -1
View File
@@ -1,3 +1,10 @@
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class TempUserLog(models.Model):
who = models.CharField(max_length=255)
why = models.CharField(max_length=255)
expires = models.DateTimeField()
issued_by = models.ForeignKey(User)
created = models.DateTimeField(auto_now_add=True)
# TODO username and pass
+1 -5
View File
@@ -4,7 +4,6 @@
# - http://stackoverflow.com/questions/1377446/html-to-pdf-for-a-django-site
# - http://stackoverflow.com/questions/2179958/django-pisa-adding-images-to-pdf-output ?
import uuid
import cStringIO as StringIO
import ho.pisa as pisa
from django.template.loader import get_template
@@ -18,10 +17,7 @@ def render_to_pdf(template_src, context_dict):
html = template.render(context)
result = StringIO.StringIO()
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("ISO-8859-1")), result)
pdf = pisa.pisaDocument(StringIO.StringIO(html.encode("UTF-8")), result)
if not pdf.err:
return HttpResponse(result.getvalue(), mimetype='application/pdf')
return HttpResponse('We had some errors<pre>%s</pre>' % escape(html))
def unique_filename():
return uuid.uuid4()
+7 -4
View File
@@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>My Title</title>
<title>Midlertidig Bruker For Trådløst Nettverk på Chateau Neuf - {{log.id}}</title>
<style type="text/css">
@page {
size: {{ pagesize }};
@@ -18,9 +18,12 @@
</head>
<body>
<div>
{% for item in mylist %}
{{ item }}
{% endfor %}
<h1>Midlertidig Bruker For Trådløst Nettverk på Chateau Neuf</h1>
Brukernavn: {{log.username}}<br />
Passord: {{ log.password }}<br />
Utstedt: {{ log.created }}<br />
Gyldig til: {{ log.expires }}<br />
<!-- LOGO -->
</div>
<div id="footerContent">
{% block page_foot %}
+19 -3
View File
@@ -3,10 +3,26 @@
{% block content %}
<h2>Liste over midlertidige brukere</h2>
<p>
Tabell her:<br />
{{ table }}
<table>
<tr>
<th>Produsert</th>
<th>Produsert av</th>
<th>For hvem</th>
<th>Utgår</th>
<th>PDF</th>
</tr>
{% for user in object_list %}
<tr>
<td>{{ user.created }}</td>
<td>{{ user.issued_by }}</td>
<td>{{ user.who }}</td>
<td>{{ user.expires|timeuntil}}</td>
<td><a href="{% url download_pdf tempuserlog_id=user.id %}">PDF-icon</a></td>
</tr>
{%endfor %}
</table>
<a href="deleted">Vis utgåtte ...</a>
</p>
<a href="{% url main.views.system %}" class="btn">« Tilbake</a>
<a href="{% url system %}" class="btn">« Tilbake</a>
{% endblock %}
+7 -5
View File
@@ -1,15 +1,17 @@
{% extends "base.html" %}
{% block content %}
{{errors}}
<h2>Lag ny midlertidig bruker</h2>
<p>
OK, du skal få lage en, men først...
</p>
<p>OK, du skal få lage en, men først...</p>
<form method="post" class="form-stacked">
{% csrf_token %}
{{ form.as_p }}
{{ form }}
<p>
<br />
<button type="submit" class="btn primary">Lag bruker og hent PDF</button>
<a href="{% url main.views.system %}" class="btn">Avbryt</a>
<a href="{% url system %}" class="btn">Avbryt</a>
</p>
</form>
{% endblock %}
+7
View File
@@ -0,0 +1,7 @@
{% extends "base.html" %}
{% block content %}
<p><a href="{% url download_pdf tempuserlog_id=tempuserlog_id %}" class="btn large primary">Last ned PDF</a></p>
<a href="{% url system %}" class="btn">Videre »</a>
{% endblock %}
+2 -2
View File
@@ -2,8 +2,8 @@
{% block content %}
<a href="{% url main.views.new %}" class="btn primary">Lag ny midlertidig bruker</a>
<a href="{% url main.views.list_users %}" class="btn">Vis midlertidige</a>
<a href="{% url new %}" class="btn primary">Lag ny midlertidig bruker</a>
<a href="{% url list_users %}" class="btn">Vis midlertidige</a>
<a href="{% url django.contrib.auth.views.logout %}" class="btn">Logg ut</a>
{% endblock %}
+18 -3
View File
@@ -1,7 +1,22 @@
from django.conf.urls.defaults import patterns, include, url
from models import *
from django.views.generic.list_detail import object_list # FIXME: subclass?
from datetime import datetime
urlpatterns = patterns('main.views',
url(r'^system/', 'system'),
url(r'^new/', 'new'),
url(r'^list/', 'list_users'),
url(r'^system/$', 'system', name='system'),
url(r'^new/$', 'new', name='new'),
url(r'^new/created/$', 'new_created', name='new_created'),
url(r'^list/page(?P<page>[0-9]+)/$',
object_list, {
'queryset': TempUserLog.objects.filter(expires__gte=datetime.now()).order_by('created').reverse(),
'template_name':'private/list.html'
}, name='list'),
url(r'^list/',
object_list, {
'queryset': TempUserLog.objects.filter(expires__gte=datetime.now()).order_by('created').reverse(),
'template_name':'private/list.html'
},
name='list_users'),
url(r'^download/(?P<tempuserlog_id>[0-9]+)/pdf$', 'download_pdf', name='download_pdf')
)
+35 -9
View File
@@ -1,7 +1,9 @@
# coding: utf-8
import simplejson as json
import datetime
from django.http import HttpResponse, HttpResponseRedirect
from django.conf import settings
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import AuthenticationForm
@@ -10,11 +12,14 @@ from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.views.decorators.csrf import csrf_protect
from django.shortcuts import get_object_or_404
from django.contrib import messages
from models import *
from forms import *
from pdf import render_to_pdf, unique_filename
from pdf import render_to_pdf
def index(request):
if request.method == "POST":
@@ -35,17 +40,38 @@ def new(request):
if request.method == "POST":
form = TempUserForm(data=request.POST)
if form.is_valid():
# generate and save the filename for the new pdf
fn = unique_filename()
download_pdf()
duration = datetime.timedelta(days=form.cleaned_data['duration'])
expires = datetime.datetime.now() + duration
log = TempUserLog(
who=form.cleaned_data['who'],
why=form.cleaned_data['why'],
expires=expires,
issued_by=request.user)
#TODO : generate username and pasword
#TODO : save in radiusdb
log.save()
messages.success(request, log.id) # Store the id in session, since we are redirecting
return HttpResponseRedirect( reverse('main.views.new_created') )
else:
form = TempUserForm(request.POST)
return render_to_response('private/new.html', locals(), context_instance=RequestContext(request))
form = TempUserForm()
return render_to_response('private/new.html', locals(), context_instance=RequestContext(request))
@login_required
def new_created(request):
# Retrieve the last id from session
storage = messages.get_messages(request)
msgs = [message for message in storage]
tempuserlog_id = msgs[0].message
return render_to_response('private/new_created.html', locals(), context_instance=RequestContext(request))
@login_required
def list_users(request):
# generic view?
users = TempUserLog.objects.all()
return render_to_response('private/list.html', locals(), context_instance=RequestContext(request))
@login_required
@@ -54,14 +80,14 @@ def system(request):
@login_required
def download_pdf(request):
# TODO Retrieve data
results = [1,2,3,4,5,'lol']
def download_pdf(request, tempuserlog_id=-1):
log = get_object_or_404(TempUserLog, pk=tempuserlog_id)
return render_to_pdf(
'pdf/new_temp_user.html',
{
'pagesize':'A4',
'mylist': results,
'log': log,
}
)