diff --git a/.env.sample b/.env.sample index c40a8a4..269b392 100644 --- a/.env.sample +++ b/.env.sample @@ -3,7 +3,7 @@ DEBUG=True # секретный ключ Django (можно сгенерировать, например, на https://djecrety.ir) SECRET_KEY=secret_key # список хостов/доменов, для которых может работать сайт -ALLOWED_HOSTS=0.0.0.0,localhost,127.0.0.1 +ALLOWED_HOSTS=0.0.0.0,localhost,127.0.0.1,[::1] # реквизиты подключения к СУБД PostgreSQL # наименование БД diff --git a/src/author/__init__.py b/src/author/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/author/admin.py b/src/author/admin.py new file mode 100644 index 0000000..33d5a47 --- /dev/null +++ b/src/author/admin.py @@ -0,0 +1,21 @@ +from django.contrib import admin + +from author.models import Author + + +@admin.register(Author) +class AuthorAdmin(admin.ModelAdmin): + list_display = ( + "skill_info", + "github_info", + "email_info", + "created_at", + "updated_at", + ) + + search_fields = ("email",) + + list_filter = ( + "created_at", + "updated_at", + ) diff --git a/src/author/apps.py b/src/author/apps.py new file mode 100644 index 0000000..ed859f9 --- /dev/null +++ b/src/author/apps.py @@ -0,0 +1,7 @@ +from django.apps import AppConfig + + +class AuthorConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "author" + verbose_name = "Автор" diff --git a/src/author/migrations/0001_initial.py b/src/author/migrations/0001_initial.py new file mode 100644 index 0000000..b169681 --- /dev/null +++ b/src/author/migrations/0001_initial.py @@ -0,0 +1,61 @@ +# Generated by Django 4.1.7 on 2023-03-03 17:08 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Author", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "created_at", + models.DateTimeField( + auto_now_add=True, verbose_name="Время создания записи" + ), + ), + ( + "updated_at", + models.DateTimeField( + auto_now=True, verbose_name="Время обновления записи" + ), + ), + ( + "skill_info", + models.URLField( + help_text="Ссылка на резюме", verbose_name="Резюме" + ), + ), + ( + "github_info", + models.URLField( + help_text="Ссылка на github", verbose_name="GitHub" + ), + ), + ( + "email_info", + models.EmailField( + help_text="Email автора", max_length=254, verbose_name="Email" + ), + ), + ], + options={ + "verbose_name": "Данные об авторе", + "verbose_name_plural": "Данные об авторе", + }, + ), + ] diff --git a/src/author/migrations/__init__.py b/src/author/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/author/models.py b/src/author/models.py new file mode 100644 index 0000000..4f73f3a --- /dev/null +++ b/src/author/models.py @@ -0,0 +1,30 @@ +from django.db import models + +from base.models import TimeStampMixin + + +class Author(TimeStampMixin): + """ + Модель для хранения данных об авторе. + """ + + skill_info = models.URLField( + verbose_name="Резюме", + help_text="Ссылка на резюме", + ) + github_info = models.URLField( + verbose_name="GitHub", + help_text="Ссылка на github", + ) + + email_info = models.EmailField( + verbose_name="Email", + help_text="Email автора", + ) + + class Meta: + verbose_name = "Данные об авторе" + verbose_name_plural = "Данные об авторе" + + def __str__(self) -> str: + return f'Объект "Автор" (id={self.pk})' diff --git a/src/author/templates/author/author_detail.html b/src/author/templates/author/author_detail.html new file mode 100644 index 0000000..eaa756b --- /dev/null +++ b/src/author/templates/author/author_detail.html @@ -0,0 +1,7 @@ +{% block author %} +
+{# endblock %} \ No newline at end of file diff --git a/src/author/templates/author/author_list.html b/src/author/templates/author/author_list.html new file mode 100644 index 0000000..13b8ff6 --- /dev/null +++ b/src/author/templates/author/author_list.html @@ -0,0 +1,7 @@ +{% block author %} + +{% endblock %} \ No newline at end of file diff --git a/src/author/tests.py b/src/author/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/src/author/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/src/author/urls.py b/src/author/urls.py new file mode 100644 index 0000000..2a5b74f --- /dev/null +++ b/src/author/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from author.views import AuthorListView +from author.views import AuthorDetailView + +urlpatterns = [ + path("", AuthorListView.as_view(), name="authors"), + path("{{ blog.pub_date }}
-{{ blog.content }}
- Вернуться в блог +{{ job.pub_date }}
+{{ job.content|safe }}
+ Главная{{ job.description }}
+{{ job.summary|safe }}
diff --git a/src/jobs/tests.py b/src/jobs/tests.py index e69de29..876b894 100644 --- a/src/jobs/tests.py +++ b/src/jobs/tests.py @@ -0,0 +1,35 @@ +from django.test import TestCase + +from jobs.models import Job + + +class JobsTestCase(TestCase): + """ + Тестирование функций блога. + """ + + def setUp(self) -> None: + """ + Настройка перед тестированием. + + :return: + """ + + Job.objects.create( + description="Job №1 description", + content="Job №1 content. " * 100, + image="Job №1 image path", + ) + + def test_job_messages_creation(self) -> None: + """ + Тестирование моделей для работ. + + :return: + """ + + job = Job.objects.get(description="Job №1 description") + + content = "Job №1 content. " * 100 + self.assertEqual(job.summary(), content[:100] + "...") + self.assertEqual(str(job), f'Объект "Выполненная работа" (id={job.pk})') diff --git a/src/jobs/urls.py b/src/jobs/urls.py new file mode 100644 index 0000000..b29312f --- /dev/null +++ b/src/jobs/urls.py @@ -0,0 +1,9 @@ +from django.urls import path + +from jobs.views import IndexJobsListView +from jobs.views import JobsDetailView + +urlpatterns = [ + path("", IndexJobsListView.as_view(), name="jobs"), + path("