Add simple CCS upload (no JavaScript).
This commit is contained in:
		
							parent
							
								
									e11e6ff451
								
							
						
					
					
						commit
						9a06def0e7
					
				
					 5 changed files with 80 additions and 0 deletions
				
			
		
							
								
								
									
										0
									
								
								www/conservancy/apps/ccs_upload/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								www/conservancy/apps/ccs_upload/__init__.py
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										7
									
								
								www/conservancy/apps/ccs_upload/urls.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								www/conservancy/apps/ccs_upload/urls.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | ||||||
|  | from django.conf.urls import url | ||||||
|  | 
 | ||||||
|  | from . import views | ||||||
|  | 
 | ||||||
|  | urlpatterns = [ | ||||||
|  |     url(r'^$', views.upload, name='form') | ||||||
|  | ] | ||||||
							
								
								
									
										38
									
								
								www/conservancy/apps/ccs_upload/views.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								www/conservancy/apps/ccs_upload/views.py
									
										
									
									
									
										Normal 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) | ||||||
							
								
								
									
										34
									
								
								www/conservancy/templates/ccs_upload/upload.html
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								www/conservancy/templates/ccs_upload/upload.html
									
										
									
									
									
										Normal 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 %} | ||||||
|  | @ -58,4 +58,5 @@ urlpatterns = [ | ||||||
|     url(r'^sustainer', include('conservancy.apps.supporter.urls')), |     url(r'^sustainer', include('conservancy.apps.supporter.urls')), | ||||||
|     url(r'^coming-soon.html', static_views.index), |     url(r'^coming-soon.html', static_views.index), | ||||||
|     url(r'^fundraiser_data', fundgoal_views.view), |     url(r'^fundraiser_data', fundgoal_views.view), | ||||||
|  |     url(r'^ccs-upload/', include('conservancy.apps.ccs_upload.urls', namespace='ccs_upload')), | ||||||
| ] | ] | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue