summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorraylu <raylu@cmu.edu>2011-05-12 21:37:52 -0400
committerraylu <raylu@cmu.edu>2011-05-12 21:37:52 -0400
commit25167a7fa5adc08c3bbf79c730d6a0bb45e50efb (patch)
treeca1c61bd0a6fa6a85f00ac188a32979ee17df170
parentbc9cbd2cc9286bfe86b57c8ec44fec657c6c1236 (diff)
downloadpyc-25167a7fa5adc08c3bbf79c730d6a0bb45e50efb.tar.xz
Basic file uploading
-rw-r--r--pyc/grader/views.py20
-rw-r--r--pyc/settings.py3
-rw-r--r--pyc/templates/lab.html4
-rw-r--r--pyc/templates/submit.html10
-rw-r--r--pyc/urls.py1
5 files changed, 37 insertions, 1 deletions
diff --git a/pyc/grader/views.py b/pyc/grader/views.py
index c4fb082..21ea22f 100644
--- a/pyc/grader/views.py
+++ b/pyc/grader/views.py
@@ -1,4 +1,6 @@
from django.shortcuts import render_to_response
+from django.template import RequestContext
+
from grader.models import Lab
def index(request):
@@ -14,3 +16,21 @@ def lab(request, lab_id):
'lab' : lab,
'submissions' : submissions,
})
+
+from django.contrib.auth.decorators import login_required
+@login_required
+def submit(request, lab_id):
+ from django.http import HttpResponseRedirect
+ if request.method == 'POST':
+ form = SubmissionForm(request.POST, request.FILES)
+ if form.is_valid():
+ return HttpResponseRedirect('/user/1/')
+ else:
+ form = SubmissionForm()
+ return render_to_response('submit.html', {
+ 'form' : form,
+ }, context_instance=RequestContext(request))
+
+from django import forms
+class SubmissionForm(forms.Form):
+ file = forms.FileField()
diff --git a/pyc/settings.py b/pyc/settings.py
index 1e53bdd..75d27be 100644
--- a/pyc/settings.py
+++ b/pyc/settings.py
@@ -51,7 +51,7 @@ USE_L10N = True
# Absolute filesystem path to the directory that will hold user-uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
-MEDIA_ROOT = ''
+MEDIA_ROOT = path.expanduser('~/submissions')
# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash.
@@ -127,6 +127,7 @@ INSTALLED_APPS = (
)
LOGIN_REDIRECT_URL = '/'
+LOGIN_URL = '/login'
# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
diff --git a/pyc/templates/lab.html b/pyc/templates/lab.html
index f07a082..2d7316d 100644
--- a/pyc/templates/lab.html
+++ b/pyc/templates/lab.html
@@ -17,4 +17,8 @@ Lab {{ lab.id }} due {{ lab.due }} at 11:59:59 PDT (UTC-7):
</tr>
{% endfor %}
</table>
+
+<p>
+<a href="/submit/{{ lab.id }}/">Submit</a> your solution
+</p>
{% endblock %}
diff --git a/pyc/templates/submit.html b/pyc/templates/submit.html
new file mode 100644
index 0000000..e8746d5
--- /dev/null
+++ b/pyc/templates/submit.html
@@ -0,0 +1,10 @@
+{% extends 'base.html' %}
+{% block body %}
+<p>
+<form method="POST" enctype="multipart/form-data">
+{{ form }}
+<input type="submit">
+{% csrf_token %}
+</form>
+</p>
+{% endblock %}
diff --git a/pyc/urls.py b/pyc/urls.py
index 9f30735..8132990 100644
--- a/pyc/urls.py
+++ b/pyc/urls.py
@@ -6,6 +6,7 @@ admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', 'grader.views.index', name='index'),
url(r'^lab/(?P<lab_id>\d+)/$', 'grader.views.lab'),
+ url(r'^submit/(?P<lab_id>\d+)/$', 'grader.views.submit'),
url(r'^login/$', 'django.contrib.auth.views.login', {'template_name': 'login.html'}),
url(r'^logout/$', 'django.contrib.auth.views.logout', {'next_page': '/'}),