Skip to content
This repository was archived by the owner on Aug 12, 2020. It is now read-only.

Commit 674c79d

Browse files
committed
Added token functionality
1 parent 07f7a8a commit 674c79d

File tree

8 files changed

+66
-22
lines changed

8 files changed

+66
-22
lines changed

fileupload/admin.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from fileupload.models import File
1+
from fileupload.models import File, SingleUseToken
22
from django.contrib import admin
33

44
admin.site.register(File)
5+
admin.site.register(SingleUseToken)

fileupload/migrations/0001_initial.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
# -*- coding: utf-8 -*-
2-
# Generated by Django 1.9 on 2015-12-19 13:27
2+
# Generated by Django 1.9 on 2015-12-19 14:19
33
from __future__ import unicode_literals
44

55
from django.db import migrations, models
6+
import django.db.models.deletion
7+
import django.utils.timezone
8+
import fileupload.models
69

710

811
class Migration(migrations.Migration):
@@ -21,4 +24,18 @@ class Migration(migrations.Migration):
2124
('slug', models.SlugField(blank=True)),
2225
],
2326
),
27+
migrations.CreateModel(
28+
name='SingleUseToken',
29+
fields=[
30+
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
31+
('token', models.CharField(default=fileupload.models.get_new_token, max_length=200)),
32+
('create_date', models.DateTimeField(default=django.utils.timezone.now)),
33+
('expiry_date', models.DateTimeField(default=django.utils.timezone.now)),
34+
],
35+
),
36+
migrations.AddField(
37+
model_name='file',
38+
name='token',
39+
field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, to='fileupload.SingleUseToken'),
40+
),
2441
]

fileupload/models.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
1-
# encoding: utf-8
1+
import os
2+
import uuid
3+
24
from django.db import models
5+
from django.utils import timezone
6+
7+
def get_new_token():
8+
return uuid.uuid1()
9+
10+
# Create your models here.
11+
class SingleUseToken(models.Model):
12+
token = models.CharField(default=get_new_token, max_length=200)
13+
create_date = models.DateTimeField(default=timezone.now)
14+
expiry_date = models.DateTimeField(default=timezone.now)
315

416
class File(models.Model):
517
"""This is a small demo using just two fields. The slug field is really not
@@ -8,8 +20,9 @@ class File(models.Model):
820
problems installing pillow, use a more generic FileField instead.
921
1022
"""
11-
file = models.FileField()
12-
slug = models.SlugField(max_length=50, blank=True)
23+
file = models.FileField()
24+
slug = models.SlugField(max_length=50, blank=True)
25+
token = models.ForeignKey(SingleUseToken, on_delete=models.CASCADE)
1326

1427
def __unicode__(self):
1528
return self.file.name

fileupload/serialize.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ def serialize(instance, file_attr='file'):
3131
'type': mimetypes.guess_type(obj.path)[0] or 'image/png',
3232
'thumbnailUrl': obj.url,
3333
'size': obj.size,
34-
'deleteUrl': reverse('upload-delete', args=[instance.pk]),
34+
'deleteUrl': reverse('upload-delete', args=[instance.token.token,instance.pk]),
3535
'deleteType': 'DELETE',
3636
}

fileupload/static/js/app.js

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,10 @@
1111

1212
/*jslint nomen: true, regexp: true */
1313
/*global window, angular */
14-
15-
(function () {
14+
function createControllers(url, urlview) {
1615
'use strict';
1716

18-
19-
var isOnGitHub = window.location.hostname === 'blueimp.github.io',
20-
url = '/upload/angular/',
21-
urlview = '/upload/view/';
17+
var demo_settings = false
2218

2319
angular.module('demo', [
2420
'blueimp.fileupload'
@@ -32,7 +28,7 @@
3228
'/cors/result.html?%s'
3329
);
3430

35-
if (isOnGitHub) {
31+
if (demo_settings) {
3632
// Demo settings:
3733
angular.extend(fileUploadProvider.defaults, {
3834
// Enable image resizing, except for Android and Opera,
@@ -53,7 +49,7 @@
5349
$scope.options = {
5450
url: url
5551
};
56-
if (!isOnGitHub) {
52+
if (!demo_settings) {
5753
$scope.loadingFiles = true;
5854
$http.get(urlview)
5955
.then(
@@ -102,5 +98,4 @@
10298
}
10399
}
104100
]);
105-
106-
}());
101+
};

fileupload/templates/fileupload/file_angular_form.html

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@
4343

4444
<!-- The file upload form used as target for the file upload widget -->
4545
<form id="fileupload" action="." method="POST" enctype="multipart/form-data" data-ng-app="demo" data-ng-controller="DemoFileUploadController" data-file-upload="options" data-ng-class="{'fileupload-processing': processing() || loadingFiles}"> {% csrf_token %}
46-
<!-- Redirect browsers with JavaScript disabled to the origin page -->
47-
<noscript><input type="hidden" name="redirect" value="http://blueimp.github.io/jQuery-File-Upload/"></noscript>
46+
<input type="hidden" name="token" multiple ng-disabled="disabled" value="{{ token.pk }}">
4847
<!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
4948
<div class="row fileupload-buttonbar">
5049
<div class="col-lg-7">
@@ -169,6 +168,11 @@ <h3 class="title"></h3>
169168
<script src="{% static "js/jquery.fileupload-angular.js" %}"></script>
170169
<!-- The main application script -->
171170
<script src="{% static "js/app.js" %}"></script>
171+
<script>
172+
(function (){
173+
createControllers("{% url 'upload-angular' token.token %}", "{% url 'upload-view' token.token %}")
174+
}());
175+
</script>
172176
<script src="{% static "js/csrf.js" %}"></script>
173177
</body>
174178
</html>

fileupload/urls.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
urlpatterns = [
66
url(r'^new/$', views.FileCreateView.as_view(), name='upload-new'),
7-
url(r'^angular/$', views.AngularVersionCreateView.as_view(), name='upload-angular'),
8-
url(r'^delete/(?P<pk>\d+)$', views.FileDeleteView.as_view(), name='upload-delete'),
9-
url(r'^view/$', views.FileListView.as_view(), name='upload-view'),
7+
url(r'^(?P<token_id>[a-z0-9\-]+)$', views.AngularVersionCreateView.as_view(), name='upload-angular'),
8+
url(r'^(?P<token_id>[a-z0-9\-]+)/delete/(?P<pk>\d+)$', views.FileDeleteView.as_view(), name='upload-delete'),
9+
url(r'^(?P<token_id>[a-z0-9\-]+)/view/$', views.FileListView.as_view(), name='upload-view'),
1010
]

fileupload/views.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from django.http import HttpResponse
55
from django.views.generic import CreateView, DeleteView, ListView
6-
from .models import File
6+
from django.shortcuts import get_object_or_404
7+
from .models import File, SingleUseToken
78
from .response import JSONResponse, response_mimetype
89
from .serialize import serialize
910

@@ -12,7 +13,20 @@ class FileCreateView(CreateView):
1213
model = File
1314
fields = "__all__"
1415

16+
def dispatch(self, *args, **kwargs):
17+
print(kwargs['token_id'])
18+
self.token = get_object_or_404(SingleUseToken, token=kwargs['token_id'])
19+
return super(FileCreateView, self).dispatch(*args, **kwargs)
20+
21+
# Adds the token to the context
22+
def get_context_data(self, *args, **kwargs):
23+
context_data = super(FileCreateView, self).get_context_data(
24+
*args, **kwargs)
25+
context_data.update({'token': self.token})
26+
return context_data
27+
1528
def form_valid(self, form):
29+
print("Valid")
1630
self.object = form.save()
1731
files = [serialize(self.object)]
1832
data = {'files': files}

0 commit comments

Comments
 (0)