Add simple CCS upload (no JavaScript).

This commit is contained in:
Ben Sturmfels 2021-11-26 18:14:22 +11:00
parent e11e6ff451
commit 9a06def0e7
Signed by: bsturmfels
GPG key ID: 023C05E2C9C068F0
5 changed files with 80 additions and 0 deletions

View file

@ -0,0 +1,7 @@
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.upload, name='form')
]

View file

@ -0,0 +1,38 @@
import logging
import os
import random
from django.contrib import messages
from django.shortcuts import redirect, render
from .forms import UploadForm
CCS_UPLOAD_PATH = '/tmp/'
logger = logging.getLogger(__name__)
def upload(request):
if request.method == 'POST':
form = UploadForm(request.POST, request.FILES)
if form.is_valid():
file = request.FILES['file']
_handle_uploaded_file(file)
messages.add_message(request, messages.INFO, '"{}" was successfully uploaded.'.format(file.name))
return redirect('ccs_upload:form')
else:
form = UploadForm()
return render(request, 'ccs_upload/upload.html', {'form': form})
def _handle_uploaded_file(f):
filename = _hash_prefixed_filename(f.name)
path = os.path.join(CCS_UPLOAD_PATH, filename)
with open(path, 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
logger.info('Wrote uploaded file to {}.'.format(path))
def _hash_prefixed_filename(name: str) -> str:
return '{hash:x} {name}'.format(hash=random.getrandbits(32), name=name)

View file

@ -0,0 +1,34 @@
{% extends "base_conservancy.html" %}
{% block category %}Copyright Assignment{% endblock %}
{% load static %}
{% block outercontent %}
<style>
label { display: block; }
li.info {
background: #F0FFB8;
border: 1px solid #D0DD98;
}
</style>
<h1>CCS Candidate Upload</h1>
<div class="mw7 mb4">
<p>Please note that a progress bar is not shown and that large uploads may take a significant time.</p>
{% if messages %}
<ul class="messages list mv2 ">
{% for message in messages %}
<li class="{{ message.tags }} pa2">{{ message }}</li>
{% endfor %}
</ul>
{% endif %}
<form action="." method="post" enctype="multipart/form-data" class="mw7">
{% csrf_token %}
{{ form.as_p }}
<p><button type="submit" class="ph3 pv2">Next</button></p>
</form>
</div>
{% endblock %}

View file

@ -58,4 +58,5 @@ urlpatterns = [
url(r'^sustainer', include('conservancy.apps.supporter.urls')),
url(r'^coming-soon.html', static_views.index),
url(r'^fundraiser_data', fundgoal_views.view),
url(r'^ccs-upload/', include('conservancy.apps.ccs_upload.urls', namespace='ccs_upload')),
]