Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file added src/author/__init__.py
Empty file.
25 changes: 25 additions & 0 deletions src/author/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

from django.contrib import admin
from author.models import Author


@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = (
"resume_url",
"github_url",
"email",
"created_at",
"updated_at",
)

search_fields = (
"github_url",
"resume_url",
"email",
)

list_filter = (
"created_at",
"updated_at",
)
11 changes: 11 additions & 0 deletions src/author/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from django.apps import AppConfig


class AuthorConfig(AppConfig):
"""
Конфигурация приложения.
"""

default_auto_field = "django.db.models.BigAutoField"
name = "author"
verbose_name = "Автор"
9 changes: 9 additions & 0 deletions src/author/context_processors.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from django.http import HttpRequest
from author.models import Author


def author(request: HttpRequest) -> dict:
"""
Контекстный процессор для информации об авторе
"""
return {"author": Author.objects.last()}
49 changes: 49 additions & 0 deletions src/author/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Generated by Django 4.1.13 on 2024-03-20 15:57

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="Время обновления записи"
),
),
("resume_url", models.URLField(verbose_name="Ссылка на резюме")),
("github_url", models.URLField(verbose_name="Ссылка GitHub")),
(
"email",
models.EmailField(max_length=254, verbose_name="Email автора"),
),
],
options={
"verbose_name": "Информация об авторе",
"verbose_name_plural": "Информация об авторе",
},
),
]
Empty file.
19 changes: 19 additions & 0 deletions src/author/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from django.db import models
from base.models import TimeStampMixin


class Author(TimeStampMixin):
"""
Модель для хранения данных об авторе
"""

resume_url = models.URLField(verbose_name="Ссылка на резюме")
github_url = models.URLField(verbose_name="Ссылка GitHub")
email = models.EmailField(verbose_name="Email автора")

class Meta:
verbose_name = "Информация об авторе"
verbose_name_plural = "Информация об авторе"

def __str__(self) -> str:
return f'Объект "автор" (id={self.pk})'
24 changes: 24 additions & 0 deletions src/jobs/migrations/0002_job_detailed_description.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.1.13 on 2024-03-20 13:51

import ckeditor_uploader.fields
from django.db import migrations


class Migration(migrations.Migration):

dependencies = [
("jobs", "0001_initial"),
]

operations = [
migrations.AddField(
model_name="job",
name="detailed_description",
field=ckeditor_uploader.fields.RichTextUploadingField(
default="",
help_text="Подробное описание выполненной работы",
verbose_name="Подробное описание",
),
preserve_default=False,
),
]
13 changes: 13 additions & 0 deletions src/jobs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
Модели для приложения "Jobs" (выполненные работы).
"""

from ckeditor_uploader.fields import RichTextUploadingField
from django.db import models

from base.models import TimeStampMixin
Expand All @@ -23,9 +24,21 @@ class Job(TimeStampMixin):
help_text="Краткое описание выполненной работы",
)

detailed_description = RichTextUploadingField(
verbose_name="Подробное описание",
help_text="Подробное описание выполненной работы",
)

class Meta:
verbose_name = "Выполненная работа"
verbose_name_plural = "Выполненные работы"

def __str__(self) -> str:
return f'Объект "Выполненная работа" (id={self.pk})'

def summary(self) -> str:
"""
Краткое представление подробного описания работы.
:return:
"""
return self.detailed_description[:100] + "..."
6 changes: 5 additions & 1 deletion src/jobs/templates/jobs/job_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,11 @@ <h1 class="text-center pt-3 display-4">{{ blog.title }}</h1>
<p class="text-center">{{ blog.pub_date }}</p>
<p><img src="{{ blog.image.url }}" class="img-fluid" alt="{{ blog.title }}"></p>
<p>{{ blog.content }}</p>
<a href="{% url 'blogs' %}" class="btn btn-light" role="button">Вернуться в блог</a>
<h1 class="text-center pt-3 display-4">{{ job.title }}</h1>
<p class="text-center">{{ job.pub_date }}</p>
<p><img src="{{ job.image.url }}" class="img-fluid" alt="{{ job.description }}"></p>
<p>{{ job.detailed_description|safe }}</p>
<a href="{% url 'jobs' %}" class="btn btn-light" role="button">На главную</a>
</div>

{% endblock %}
10 changes: 5 additions & 5 deletions src/jobs/templates/jobs/job_list.html
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@
<section class="py-5 text-center container">
<div class="row py-lg-5">
<div class="col-lg-6 col-md-8 mx-auto">
<p class="fw-light h1">Привет!</p>
<p class="lead text-muted">Меня зовут Иван Иванов. <br />Я профессионально занимаюсь разработкой на Python.</p>

<p class="lead text-muted">Меня зовут Шутов Артемий. <br />Я профессионально занимаюсь разработкой на JavaScript.</p>
<p>
<img src="{% static 'images/my_photo.jpeg' %}" height="300" alt="Иван Иванов"/>
<img src="{% static 'images/my_photo.jpeg' %}" height="300" alt="Шутов Артемий"/>
</p>
<p>
<a href="mailto:username(att)somemailserver(dott)com" class="btn btn-primary my-2">Написать мне</a>
Expand All @@ -33,10 +33,10 @@
alt="job image"/>

<div class="card-body">
<p class="card-text">{{ job.description }}</p>
<p class="card-text">{{ job.summary|safe}}</p>
<div class="d-flex justify-content-between align-items-center">
<div class="btn-group">
<a href="#" type="button" class="btn btn-sm btn-outline-secondary">Подробнее</a>
<a href="{% url 'job' job.id %}" type="button" class="btn btn-sm btn-outline-secondary">Подробнее</a>
</div>
<small class="text-muted"><p>{{ job.created_at|date:"d E Y" }}</p></small>
</div>
Expand Down
7 changes: 7 additions & 0 deletions src/jobs/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.urls import path
from jobs.views import IndexJobsListView, IndexJobDetailView

urlpatterns = [
path("", IndexJobsListView.as_view(), name='jobs'),
path("<int:pk>/", IndexJobDetailView.as_view(), name='job')
]
6 changes: 5 additions & 1 deletion src/jobs/views.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
from django.views.generic import ListView
from django.views.generic import ListView, DetailView

from jobs.models import Job


class IndexJobsListView(ListView):
model = Job


class IndexJobDetailView(DetailView):
model = Job
2 changes: 2 additions & 0 deletions src/portfolio/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
"django.contrib.staticfiles",
# созданные приложения
"jobs.apps.JobsConfig",
"author.apps.AuthorConfig",
"blog.apps.BlogConfig",
# установленные приложения
"ckeditor",
Expand Down Expand Up @@ -73,6 +74,7 @@
"django.template.context_processors.request",
"django.contrib.auth.context_processors.auth",
"django.contrib.messages.context_processors.messages",
"author.context_processors.author"
],
},
},
Expand Down
6 changes: 3 additions & 3 deletions src/portfolio/templates/base.html
Original file line number Diff line number Diff line change
Expand Up @@ -36,9 +36,9 @@ <h4 class="text-white">Обо мне</h4>
<div class="col-sm-4 offset-md-1 py-4">
<h4 class="text-white">Мои контакты</h4>
<ul class="list-unstyled">
<li><a href="#" class="text-white">Резюме</a></li>
<li><a href="https://github.com" target="_blank" class="text-white">GitHub</a></li>
<li><a href="mailto:username(att)somemailserver(dott)com" class="text-white">Email</a></li>
<li><a href="{{ author.resume_url }}" class="text-white">Резюме</a></li>
<li><a href="{{ author.github_url }}" target="_blank" class="text-white">GitHub</a></li>
<li><a href="mailto:{{ author.email }}" class="text-white">Email</a></li>
</ul>
</div>
</div>
Expand Down
1 change: 1 addition & 0 deletions src/portfolio/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
path("admin/", admin.site.urls),
path("ckeditor/", include("ckeditor_uploader.urls")),
path("", IndexJobsListView.as_view(), name="home"),
path("job/", include("jobs.urls")),
path("blog/", include("blog.urls")),
]
urlpatterns.extend(static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT))