БФИ2203 Мячина ввит5
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
(МТУСИ)
Лабораторная работа №5
«Создание формы и представления для нового поста»
Выполнила:
студентка группы БФИ2203
Мячина Лада Андреевна
Проверил:
Фурлетов Юрий Михайлович
Москва 2023
Цель работы: создать дополнительную страницу – форму для создания статей.
Задание: создайте несколько статей через созданную форму; создайте стили, подключив CSS-файл к шаблону; добавьте проверку на то, что введенное название статьи уникально; загрузите проект на гит-репозиторий GitHub.
Ход работы:
В директорию lab5 скопировать прошлый проект blog. В файле urls.py создать ещё один адрес: article/new/.
Листинг urls.py:
from django.contrib import admin from articles import views from django.urls import path, re_path urlpatterns = [ path('admin/', admin.site.urls), path('', views.archive, name='archive'), re_path(r'^article/(?P<article_id>\d+)$', views.get_article, name='get_article'), path('article/new/', views.create_post, name='create_post'), ]
Содержимое create_post.html:
<!DOCTYPE html>
<html>
<head>
{% load static %}
<link rel="stylesheet" href="{{ STATIC_URL }}/static/articles.css">
<title>Django Public Blog - создать статью</title>
</head>
<body>
<div class="content">
<h1>Написать статью</h1>
<form method="POST">{% csrf_token %}
<input type="text" name="title" placeholder="Название статьи" value="{{ form.title }}">
<textarea name="text" placeholder="Текст статьи">{{ form.text }}</textarea>
<input type="submit" value="Сохранить">
</form>
{{ form.errors }}
</div>
</body>
</html>
Создать функцию в файле views.py
def create_post(request): #if not request.user.is_anonymous(): if request.user.is_authenticated: if request.method == "POST": # обработать данные формы, если метод POST form = { 'text': request.POST["text"], 'title': request.POST["title"] } # в словаре form будет храниться информация, введенная пользователем if form["text"] and form["title"] and not Article.objects.filter(title=form["title"]).exists(): # если поля заполнены без ошибок Article.objects.create(text=form["text"], title=form["title"], author=request.user) return redirect('get_article', article_id=article.id) # перейти на страницу поста else: # если введенные данные некорректны if Article.objects.filter(title=form["title"]).exists() and not (form["text"] ): form["errors"]= u"Название статьи не уникально!\nНе все поля заполнены!" elif Article.objects.filter(title=form["title"]).exists(): form["errors"]=u"Название статьи не уникально!" else: form["errors"]=u"Не все поля заполнены!" return render(request, 'create_post.html', {'form': form}) else: # просто вернуть страницу с формой, если метод GET return render(request, 'create_post.html', {}) else: raise Http404
Результат работы:
Уведомления об ошибке:
Пустые поля:
Ссылка на репозиторий: https://github.com/LadaMyachina/labVvIT5
