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'^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')), | ||||
| ] | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue