Разработка БД файлов на Django с выполнением проверки файлов на целостность

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 22:20, 1 июня 2018.
БД файлов на Django с выполнением проверки файлов на целостность
fraimed
Разработчики: Прохоров М.В.
Написана на: Python,Django
Тип ПО: Веб-приложение
Веб-сайт {{#property:P856}}

Описание

Веб-приложение позволяет поставить файлы пользователя на учет целостности. Пользователь загружает файл в БД, после этого файл считается легитимным, в БД хранятся контрольные суммы каждого файла. Чтобы проверить файлы на целостность, пользователи загружают файлы в БД. Далее производится сравнение контрольных сумм, если они не совпадают - файл модифицирован или пользователь его не поставил на учет целостности, то есть - не загрузил в БД. Что такое целостность? Целостность информации [Источник 1]— термин в информатике (криптографии, теории телекоммуникаций, теории информационной безопасности), означающий, что данные не были изменены при выполнении какой-либо операции над ними, будь то передача, хранение или отображение. С помощью контрольной суммы можно проверить, соблюдает ли данный файл целостность? Существуют следующие алгоритмы хеширования:

  • SHA-1 (secure hash algorithm 1);
  • ED2K (хеш EDonkey2000);
  • AICH (advanced intelligent corruption handler);
  • MD5 (message digest 5);
  • CRC-32 (контроль циклическим избыточным кодом);
  • BLAKE (криптографическая хеш-функция).

Ход разработки

Создаем проект

Скачиваем с официального сайта JetBrains IDE PyCharm [Источник 2] Create new project->Django->Interpreter->Create

В терминале вводим:
python manage.py createapp appkurs
Создается новое приложение под названием "appkurs".

Чтобы приложение работало, в settings.py нужно подключить приложение:

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'appkurs',
)

Чтобы мы могли подключать CSS-файлы к HTML, в settings.py нужно написать:

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

Чтобы иметь доступ к административной панели, нужно создать суперпользователя, открывем терминал и вводим:

python manage.py createsuperuser

Появится окно создание суперпользователя, выбираем имя и создаем пароль, теперь мы можем иметь доступ к административной панели

Административная панель

Чтобы работать с БД, нужно создать модели. appkurs->models.py Создадим четыре модели:

  • Легитимные файлы;
  • Контрольные суммы легитимных файлов;
  • Файлы, которые мы проверяем на целостность;
  • Контрольные суммы файлов, которые мы проверяем на целостность.
class Article(models.Model):#легитимный файл
    file_obj = models.FileField(upload_to=upload_to1('media/'))
    def __field_file__(self):
        return self.file_obj

class Article_hash(models.Model):#хеш легитимного файла
    article_hash_name = models.CharField(max_length="50")
    def __str__(self):
        return self.article_hash_name

class Article1(models.Model):#файл для сравнения
    file_obj = models.FileField(upload_to=upload_to('media1/'))
    def __field_file__(self):
        return self.file_obj

class Article_hash1(models.Model):#хеш файла для сравнения
    article_hash_name1 = models.CharField(max_length="50")
    def __str__(self):
        return self.article_hash_name1

Чтобы в административной панели отображались модели, в файле admin.py напишем:

from django.contrib import admin

# Register your models here.
from  .models import Article,Article1,Article_hash,Article_hash1
# Register your models here.
admin.site.register(Article)
admin.site.register(Article1)
admin.site.register(Article_hash)
admin.site.register(Article_hash1)

В файле form.py создадим две формы:

from django.forms import ModelForm
from .models import Article,Article1

class ArticleForm(ModelForm):
  class Meta:
    model = Article
    fields = ['file_obj']

class Article1Form(ModelForm):
  class Meta:
     model = Article1
     fields = ['file_obj']

В файле views.py напишем функцию, с помощью которой производится вычисление контрольной суммы[Источник 3] по алгоритму MD5:

def hash_func(filename):
    with open(filename, 'rb') as f:
        m = hashlib.md5()
        while True:
            data = f.read(8192)#макс 8мб
            if not data:
                break
            m.update(data)
        return (m.hexdigest())#печатаем  последовательность байтов

Для взаимодействия веб-приложения с пользователем нужно создать 4 файла html:

  • Домашняя страница(home.html);
  • Загрузка легитимного файла(home1.html);
  • Загрузка файлов для проверки на целостность(home3.html);
  • Вывод результата сравнения контрольных сумм(home4.html).

Для того, чтобы можно было загружать файлы в базу данных, в файлах "home1.html" и "home3.html" нужно создать следующие формы:

<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>

В конфигрурации urls.py мы будем обращаться к функциям из файла views.py.

from django.conf.urls import include, url
from django.contrib import admin
from django.views.generic import TemplateView

from appkurs.views import home2,home4,Upload_file,Upload_file1
urlpatterns = [
    # Examples:
    # url(r'^$', 'zorin1.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$',TemplateView.as_view(template_name='home/home.html')),
    url(r'^home1/$',Upload_file),
    url(r'^home2/$',home2),
    url(r'^home3/$',Upload_file1),
    url(r'^home4/$',home4),
]

Принцип работы веб-приложения

На домашней странице пользователь может выбрать одно из двух:

  • Загрузить легитимный файл
  • Проверить файл на целостность;
Домашняя страница

Загружаем файл и ставим его на учет целостности:

Загрузка легитимного файла

Загружаем файл, который хотим проверить на целостность:

Загрузка файлов для проверки на целостность

Если целостность соблюдена, мы увидим положительный ответ:

Вывод положительного результата сравнения контрольных сумм

В противном случае, выскочит предупреждение о нарушение целостности файла или пользователь не поставил это файл на учет целостности

Вывод отрицательного результата сравнения контрольных сумм

Демонстрация работы веб-приложения

Вывод

Django - удобный фреймворк, он позволяет с учетом безопасности и масштабируемости, быстро и легко создавать веб-приложения. Несмотря на его плюсы, у него имеются следующие недостатки: все базируется на ORM Django, Django имеет монолитную архитектуру, его компоненты развертываются совместно. В ходе курсовой работы было реализовано веб-приложение. Оно успешно определяет целостность файла, а так же производит сравнение контрольных сумм из БД с контрольной суммой проверяемого на целостность файла.

Ссылки

Источники

  1. Официальный сайт Wikipedia[Электронный ресурс] // Wikipedia. URL: https://ru.wikipedia.org/wiki/Целостность_информации (дата обращения: 01.06.2018)
  2. Официальный сайт JetBrains [Электронный ресурс] // PyCharm. URL: https://www.jetbrains.com/pycharm/ (дата обращения: 01.06.2018)
  3. Официальный сайт Wikipedia[Электронный ресурс] // Wikipedia. URL: https://ru.wikipedia.org/wiki/Контрольная_сумма (дата обращения: 01.06.2018)