Скриншот архива с проектом

Структура проекта

Задание
Создайте модель «Article» для веб-приложения. Модель должна содержать поля, такие как «title», «content», «date_published» и «author». Затем создайте миграции для этой модели и примените их к базе данных.
На основе модели "Article" создайте форму для добавления данных о статьях в базу данных. Форма должна включать поля для ввода "title", "content", "date_published" и "author". Реализуйте представление для обработки данных из этой формы и сохранения их в базе данных.
Функционал программы
- Добавление авторов
- вывод подробной информации об авторе
- редактирование автора
- удаление автора
- добавление статьи
- вывод информации о статье
- редактирование статьи
- удаление статьи
- регистрация и авторизация пользователей.
Фрагмент программного кода
from django.shortcuts import render, redirect, get_object_or_404
from .models import *
from .forms import *
from django.contrib.auth.views import LoginView
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login
from django.contrib.auth import logout
from django.urls import reverse_lazy
from django.views.generic.edit import FormView
# Create your views here.
class CustomLoginView(LoginView):
template_name = 'login.html'
fields = '__all__'
redirect_authenticated_user = True
def get_success_url(self):
return reverse_lazy('index')
class RegisterPage(FormView):
template_name = 'register.html'
form_class = UserCreationForm
redirect_authenticated_user = True
success_url = reverse_lazy('index')
def form_valid(self, form):
user = form.save()
if user is not None:
login(self.request, user)
return super(RegisterPage, self).form_valid(form)
def get(self, *args, **kwargs):
if self.request.user.is_authenticated:
return redirect('index')
return super(RegisterPage, self).get(*args, **kwargs)
def logout_view(request):
logout(request)
return redirect('index')
def index(request):
context = {
'title': 'Главная страница сайта'
}
return render(request, 'index.html', context)
# Представления для работы с авторами
def author_list(request):
return render(request, 'author_list.html')
def display_authors(request):
authors = Author.objects.all()
context = {
'authors': authors,
'header': 'Автор'
}
return render(request, 'author_list.html', context)
def add_author(request):
if request.method == 'POST':
form = AuthorForm(request.POST)
if form.is_valid():
form.save()
return redirect('author_list')
else:
form = AuthorForm()
context = {
'form': form,
'header': 'Автор'
}
return render(request, 'add_author.html', context)
def author_detail(request, pk):
author = get_object_or_404(Author, pk=pk)
context = {
'author': author,
}
return render(request, 'author_detail.html', context)
def edit_author(request, pk):
author = get_object_or_404(Author, pk=pk)
if request.method == 'POST':
form = AuthorForm(request.POST, instance=author)
if form.is_valid():
form.save()
return redirect('author_list')
else:
form = AuthorForm(instance=author)
context = {
'form': form,
'header': 'Редактирование автора'
}
return render(request, 'edit_author.html', context)
def delete_author(request, pk):
author = get_object_or_404(Author, pk=pk)
author.delete()
return redirect("author_list")
# Представления для работы со статьями
def article_list(request):
return render(request, 'article_list.html')
def display_articles(request):
articles = Article.objects.all()
context = {
'articles': articles,
'header': 'Статья'
}
return render(request, 'article_list.html', context)
def add_article(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm()
context = {
'form': form,
'header': 'Статья'
}
return render(request, 'add_article.html', context)
def article_detail(request, pk):
article = get_object_or_404(Article, pk=pk)
context = {
'article': article,
}
return render(request, 'article_detail.html', context)
def edit_article(request, pk):
article = get_object_or_404(Article, pk=pk)
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('article_list')
else:
form = ArticleForm(instance=article)
context = {
'form': form,
'header': 'Редактирование статьи'
}
return render(request, 'edit_article.html', context)
def delete_article(request, pk):
article = get_object_or_404(Article, pk=pk)
article.delete()
return redirect("article_list")
Пояснения по запуску программы
Приветствую! За раннее выражаю благодарность за покупку работы и подписку на мой YouTube-канал - https://www.youtube.com/channel/UC3XXxvCFq5i4laCmPE2zI9w
Для эффективной работы с приложением вам потребуется:
- редактор кода VS Code - скачать можно тут - https://code.visualstudio.com/download
- интерпретатор языка Python, скачать можно тут - https://www.python.org/downloads/ Однако скачивать версию 3.12 не советую, есть проблемы с установкой библиотек. Рекомендуемая версия - 3.11.7.
- После установки всего выше описанного, настройте VS Code для работы с Python установив необходимые расширения (см. инструкцию - https://youtu.be/j5e5gwZgMH8) .
- Запускаете приложение и пользуетесь. Также вы можете самостоятельно выложить проект на Heroku.

Телеграм
-