1
0

Add file and admin panel

This commit is contained in:
2018-01-09 20:33:31 +03:00
parent 9dc5217f57
commit 33c77ebb85
7 changed files with 77 additions and 6 deletions

1
.gitignore vendored
View File

@@ -58,3 +58,4 @@ db.sqlite3
app/migrations/* app/migrations/*
!app/migrations/__init__.py !app/migrations/__init__.py
venv/ venv/
media/*

View File

@@ -1,8 +1,25 @@
from django.contrib import admin from django.contrib import admin
from django.contrib import admin from app.models import Setting, File
from app.models import Setting from django.conf import settings
# Register your models here. # Register your models here.
admin.site.register(Setting) class SettingAdmin(admin.ModelAdmin):
list_display = ('name', 'language', 'string_short')
search_fields = ('name', )
def string_short(self, obj):
if len(obj.string) > 70:
return obj.string[:70] + '...'
else:
return obj.string
class FileAdmin(admin.ModelAdmin):
list_display = ('name', )
admin.site.register(Setting, SettingAdmin)
admin.site.register(File, FileAdmin)
admin.site.site_header = settings.APP_NAME + ' administration'

View File

@@ -4,6 +4,15 @@ from django.db import models
class Setting(models.Model): class Setting(models.Model):
def __str__(self):
return 'Setting {0} - {1} ({2})'.format(self.name, self.language, self.id)
name = models.CharField(max_length=100) name = models.CharField(max_length=100)
language = models.CharField(max_length=5) language = models.CharField(max_length=5)
string = models.TextField() string = models.TextField()
class File(models.Model):
def __str__(self):
return 'File {0} ({1})'.format(self.name, self.id)
name = models.CharField(max_length=100)
file = models.FileField()

View File

@@ -1,6 +1,7 @@
from django.test import TestCase from django.test import TestCase
from app.models import Setting from app.models import Setting, File
from django.conf import settings from django.conf import settings
from django.core.files.uploadedfile import SimpleUploadedFile
# Create your tests here. # Create your tests here.
@@ -23,8 +24,28 @@ class HomeTestCase(TestCase):
response = self.client.get('/') response = self.client.get('/')
self.assertContains(response, 'Строка русского текста', 1, 200) self.assertContains(response, 'Строка русского текста', 1, 200)
self.assertContains(response, '<html lang="ru">', 1, 200) self.assertContains(response, '<html lang="ru">', 1, 200)
self.assertContains(response, 'A<br>correct<br><h1>HTML<h1> string', 1, 200)
def test_ru_header_load(self): def test_ru_header_load(self):
response = self.client.get('/', HTTP_ACCEPT_LANGUAGE='ru') response = self.client.get('/', HTTP_ACCEPT_LANGUAGE='ru')
self.assertContains(response, 'Строка русского текста', 1, 200) self.assertContains(response, 'Строка русского текста', 1, 200)
self.assertContains(response, '<html lang="ru">', 1, 200) self.assertContains(response, '<html lang="ru">', 1, 200)
self.assertContains(response, 'A<br>correct<br><h1>HTML<h1> string', 1, 200)
class FileTestCase(TestCase):
"""Uploaded files are correctly served"""
def setUp(self):
File.objects.create(name='sample_file', file=SimpleUploadedFile('sample.txt', b'This is sample file.'))
def doCleanups(self):
clean = File.objects.get(name='sample_file')
clean.file.delete(save=False)
clean.delete()
def test_file_read(self):
self.assertEqual(File.objects.get(name='sample_file').file.readline(), b'This is sample file.')
def test_file_get_url(self):
response = self.client.get('/get_file', {'name': 'sample_file'})
self.assertEqual(response.url, '/media/sample.txt')

View File

@@ -1,8 +1,10 @@
from django.shortcuts import render from django.shortcuts import render, get_object_or_404, redirect
from django.utils.translation import gettext as _ from django.utils.translation import gettext as _
from django.conf import settings from django.conf import settings
from app.settings_db import get_setting from app.settings_db import get_setting
from django.utils import translation from django.utils import translation
from app.models import File
from django.http import HttpResponseBadRequest
# Create your views here. # Create your views here.
@@ -15,3 +17,12 @@ def home(request):
'app_home_head_html': get_setting('app_home_head_html', language=translation.get_language()), 'app_home_head_html': get_setting('app_home_head_html', language=translation.get_language()),
'app_home_body_html': get_setting('app_home_body_html', language=translation.get_language()), 'app_home_body_html': get_setting('app_home_body_html', language=translation.get_language()),
}) })
def get_file(request):
if not request.GET:
return HttpResponseBadRequest()
try:
return redirect(get_object_or_404(File, name=request.GET['name']).file.url)
except KeyError:
return HttpResponseBadRequest()

View File

@@ -126,8 +126,17 @@ STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"), os.path.join(BASE_DIR, "static"),
] ]
# Media files dir (For testing purposes! This is not suitable for production)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, "media")
# App name (Used in templates)
APP_NAME = 'NoNiko' APP_NAME = 'NoNiko'
# Try to load local setting file
try: try:
from local_settings import * from local_settings import *
except ImportError: except ImportError:

View File

@@ -16,8 +16,11 @@ Including another URLconf
from django.contrib import admin from django.contrib import admin
from django.urls import path from django.urls import path
import app.views import app.views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [ urlpatterns = [
path('', app.views.home, name='home'), path('', app.views.home, name='home'),
path('get_file', app.views.get_file, name='get_file'),
path('admin/', admin.site.urls), path('admin/', admin.site.urls),
] ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) # Warning! This is not suitable for production.