Skip to content

Commit 2de9939

Browse files
authored
Merge pull request #66 from moscowpython/tech/seo_tweaks
Tech/seo tweaks
2 parents 97763cc + 43d5b45 commit 2de9939

File tree

8 files changed

+66
-0
lines changed

8 files changed

+66
-0
lines changed

landing_page/landing_page/settings.py

+4
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,16 @@
1313

1414
INSTALLED_APPS = [
1515
'mainpage.apps.MainpageConfig',
16+
1617
'django.contrib.admin',
1718
'django.contrib.auth',
1819
'django.contrib.contenttypes',
1920
'django.contrib.sessions',
2021
'django.contrib.messages',
2122
'django.contrib.staticfiles',
23+
'django.contrib.sitemaps',
24+
25+
'memoize',
2226
]
2327

2428
MIDDLEWARE = [

landing_page/landing_page/sitemap.py

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import datetime
2+
3+
from django.contrib.sitemaps import Sitemap
4+
from django.urls import reverse
5+
from mainpage.utils.github import fetch_last_commit_date_from_github_repo
6+
7+
8+
class LearnSitemap(Sitemap):
9+
changefreq = "weekly"
10+
priority = 0.5
11+
12+
def items(self) -> list[str]:
13+
return ["index", "index_advanced"]
14+
15+
def location(self, item: str) -> str:
16+
return reverse(item)
17+
18+
def lastmod(self, obj: str) -> datetime.datetime | None:
19+
return fetch_last_commit_date_from_github_repo('moscowpython', 'learnpython')

landing_page/landing_page/urls.py

+9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,16 @@
11
from django.contrib import admin
2+
from django.contrib.sitemaps.views import sitemap
23
from django.urls import include, path
34

5+
from landing_page.sitemap import LearnSitemap
6+
47
urlpatterns = [
58
path('', include('mainpage.urls')),
69
path('admin/', admin.site.urls),
10+
path(
11+
"sitemap.xml",
12+
sitemap,
13+
{"sitemaps": {"static": LearnSitemap}},
14+
name="django.contrib.sitemaps.views.sitemap",
15+
)
716
]

landing_page/mainpage/templates/mainpage/advanced.html

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<html lang="en">
66
<head>
77
<meta charset="UTF-8">
8+
<meta name="description" content="Курс программирования на python 3.11 для тех, кто уже знаком с веб-разработкой на python">
89
<meta name="viewport"
910
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
1011
<meta http-equiv="X-UA-Compatible" content="ie=edge">

landing_page/mainpage/templates/mainpage/index.html

+1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<html lang="en">
66
<head>
77
<meta charset="UTF-8">
8+
<meta name="description" content="Курс программирования на python 3.11 для любого уровня c упором на практику">
89
<meta name="viewport"
910
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
1011
<meta http-equiv="X-UA-Compatible" content="ie=edge">

landing_page/mainpage/utils/github.py

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import datetime
2+
3+
import requests
4+
from memoize import memoize
5+
6+
7+
@memoize(timeout=24 * 60 * 60)
8+
def fetch_last_commit_date_from_github_repo(
9+
owner: str,
10+
repo_name: str,
11+
timeout_msec: int = 500,
12+
) -> datetime.datetime | None:
13+
response = requests.get(
14+
f"https://api.github.com/repos/{owner}/{repo_name}/commits",
15+
timeout=timeout_msec / 1000,
16+
)
17+
if not response:
18+
return None
19+
all_commits = response.json()
20+
if not isinstance(all_commits, list) or not all_commits:
21+
return None
22+
last_commit = all_commits[0]
23+
raw_commit_date = last_commit.get("commit", {}).get("author", {}).get("date")
24+
try:
25+
last_commit_date = datetime.datetime.fromisoformat(raw_commit_date) if raw_commit_date else None
26+
except ValueError:
27+
last_commit_date = None
28+
29+
return last_commit_date

requirements-dev.txt

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ mypy==1.5.0
44
isort==5.12.0
55
pytest==7.4.0
66
pytest-django==4.5.2
7+
types-requests==2.31.0.10

requirements.txt

+2
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
Django==4.2.4
22
Pillow==10.0.0
3+
requests==2.31.0
4+
django-memoize==2.3.1

0 commit comments

Comments
 (0)