Skip to content

Commit 262afaa

Browse files
renzonrenzon
authored andcommitted
Added sitemap and robots
close #1037
1 parent 94c5a35 commit 262afaa

File tree

7 files changed

+101
-9
lines changed

7 files changed

+101
-9
lines changed

Pipfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ python-decouple = "*"
1818
raven = "*"
1919
Pillow = "*"
2020
ipython = "*"
21+
django-sitemaps = "*"
2122

2223
[dev-packages]
2324
faker = "*"
@@ -30,4 +31,4 @@ pytest-freezegun = "*"
3031
pytest-mock = "*"
3132

3233
[requires]
33-
python_version = "3.7"
34+
python_version = "3.7"

Pipfile.lock

Lines changed: 46 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import pytest
2+
from django.test import Client
3+
from django.urls import reverse
4+
5+
6+
@pytest.fixture
7+
def resp_sitemap(client: Client, db):
8+
return client.get(reverse('core:sitemap'), secure=True)
9+
10+
11+
def test_sitemap_status_code(resp_sitemap):
12+
assert resp_sitemap.status_code == 200
13+
14+
15+
@pytest.fixture
16+
def resp_robots(client: Client, db):
17+
return client.get(reverse('core:robots'), secure=True)
18+
19+
20+
def test_robots_status_code(resp_robots):
21+
assert resp_robots.status_code == 200

pythonpro/core/urls.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
from django.urls import path
2+
from django_sitemaps import robots_txt
23

34
from . import views
45

56
app_name = 'core'
67
urlpatterns = [
78
path('', views.index, name='index'),
9+
path('sitemap.xml', views.sitemap, name='sitemap'),
10+
path('robots.txt', robots_txt(timeout=86400), name='robots'),
811
path('tech-talks', views.teck_talks, name='tech_talks'),
912
path('podcast', views.podcast, name='podcast'),
1013
path('obrigado', views.thanks, name='thanks'),

pythonpro/core/views.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
1+
from django.conf import settings
12
from django.contrib.auth.decorators import login_required
23
from django.contrib.auth.views import PasswordChangeView
34
from django.shortcuts import render
4-
from django.urls import reverse_lazy
5+
from django.urls import reverse_lazy, reverse
56
from django.views.generic import UpdateView
7+
from django_sitemaps import Sitemap
68

79
from pythonpro.core.forms import UserEmailForm
810
from pythonpro.core.models import User
11+
from pythonpro.promos.facade import find_all_videos
912

1013

1114
def index(request):
@@ -29,6 +32,22 @@ def profile(request):
2932
return render(request, 'core/profile_detail.html', {})
3033

3134

35+
def sitemap(request):
36+
map = Sitemap(
37+
build_absolute_uri=request.build_absolute_uri,
38+
)
39+
40+
for section in 'core:index core:podcast core:tech_talks modules:index'.split():
41+
map.add(reverse(section), changefreq='weekly')
42+
43+
for video in find_all_videos():
44+
map.add(video.get_absolute_url(), changefreq='monthly')
45+
46+
return map.response(
47+
pretty_print=settings.DEBUG,
48+
)
49+
50+
3251
class _ProfileUpdateName(UpdateView):
3352
model = User
3453
fields = ('first_name',)

pythonpro/promos/facade.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from pythonpro.promos.models import Video as _Video
2+
3+
4+
def find_all_videos():
5+
return _Video.objects.all()

pythonpro/promos/models.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
from django.db import models
2+
from django.urls import reverse
23

34

45
class Video(models.Model):
56
title = models.CharField(max_length=100)
67
vimeo_id = models.CharField(max_length=100)
78
slug = models.SlugField(max_length=100, unique=True)
9+
10+
def get_absolute_url(self):
11+
return reverse('promos:video', kwargs={'slug': self.slug})

0 commit comments

Comments
 (0)