From a24a2d49e74ece6a0c2b24dbfcf5f98feb1900d0 Mon Sep 17 00:00:00 2001 From: a4meen Date: Thu, 20 Oct 2022 12:02:07 +0300 Subject: [PATCH] Solving Task2 --- config/settings.py | 4 ++- files_management/controller.py | 56 ++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/config/settings.py b/config/settings.py index e332a2b..11415a1 100644 --- a/config/settings.py +++ b/config/settings.py @@ -25,7 +25,7 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True -ALLOWED_HOSTS = [] +ALLOWED_HOSTS = ['*'] # Application definition @@ -37,6 +37,8 @@ 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', + + ] MIDDLEWARE = [ diff --git a/files_management/controller.py b/files_management/controller.py index 45a329d..0167b11 100644 --- a/files_management/controller.py +++ b/files_management/controller.py @@ -1,2 +1,58 @@ from django.shortcuts import render +from ninja import Router, Schema +import re +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage + + +class TandC(Schema): + title: str + content: str = None + + # Create your views here. + +post_control = Router() + + +@post_control.get('') +def list_posts(request): + """ + Returns a list of all names of blog posts. + """ + _, filenames = default_storage.listdir("posts") + return list(sorted(re.sub(r"\.md$", "", filename) + for filename in filenames if filename.endswith(".md"))) + + +@post_control.get('/{title}') +def get_post(request, title): + """ + Retrieves a post by its title. If no such + post exists, the function returns None. + """ + try: + f = default_storage.open(f"posts/{title}.md") + return f.read().decode("utf-8") + except FileNotFoundError: + return None + + +@post_control.put('') +def save_post(request, paylod: TandC): + """ + Saves a blog post, given its title and Markdown + content. If an existing post with the same title already exists, + it is replaced. + """ + filename = f"posts/{paylod.title}.md" + if default_storage.exists(filename): + default_storage.delete(filename) + default_storage.save(filename, ContentFile(paylod.content)) + + +@post_control.delete('/{title}') +def del_post(request, title): + filename = f"posts/{title}.md" + if default_storage.exists(filename): + default_storage.delete(filename)