Skip to content

Commit 21f6077

Browse files
authored
Merge pull request #20 from realpython/get-started-with-django-part-1
Get Started With Django Part 1: Personal Portfolio
2 parents d55ad39 + 9bed054 commit 21f6077

33 files changed

+551
-0
lines changed

rp-portfolio/blog/__init__.py

Whitespace-only changes.

rp-portfolio/blog/admin.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from django.contrib import admin
2+
from blog.models import Post, Category
3+
4+
5+
class PostAdmin(admin.ModelAdmin):
6+
pass
7+
8+
9+
class CategoryAdmin(admin.ModelAdmin):
10+
pass
11+
12+
13+
admin.site.register(Post, PostAdmin)
14+
admin.site.register(Category, CategoryAdmin)

rp-portfolio/blog/apps.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
from django.apps import AppConfig
2+
3+
4+
class BlogConfig(AppConfig):
5+
name = "blog"

rp-portfolio/blog/forms.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from django import forms
2+
3+
4+
class CommentForm(forms.Form):
5+
author = forms.CharField(
6+
max_length=60,
7+
widget=forms.TextInput(
8+
attrs={"class": "form-control", "placeholder": "Your Name"}
9+
),
10+
)
11+
body = forms.CharField(
12+
widget=forms.Textarea(
13+
attrs={"class": "form-control", "placeholder": "Leave a comment!"}
14+
)
15+
)
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# Generated by Django 2.1.4 on 2018-12-16 19:11
2+
3+
from django.db import migrations, models
4+
import django.db.models.deletion
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
initial = True
10+
11+
dependencies = [
12+
]
13+
14+
operations = [
15+
migrations.CreateModel(
16+
name='Category',
17+
fields=[
18+
('id', models.AutoField(auto_created=True, primary_key=True,
19+
serialize=False, verbose_name='ID')),
20+
('name', models.CharField(max_length=20)),
21+
],
22+
),
23+
migrations.CreateModel(
24+
name='Comment',
25+
fields=[
26+
('id', models.AutoField(auto_created=True, primary_key=True,
27+
serialize=False, verbose_name='ID')),
28+
('author', models.CharField(max_length=60)),
29+
('body', models.TextField()),
30+
('created_on', models.DateTimeField(auto_now_add=True)),
31+
],
32+
),
33+
migrations.CreateModel(
34+
name='Post',
35+
fields=[
36+
('id', models.AutoField(auto_created=True, primary_key=True,
37+
serialize=False, verbose_name='ID')),
38+
('title', models.CharField(max_length=255)),
39+
('body', models.TextField()),
40+
('created_on', models.DateTimeField(auto_now_add=True)),
41+
('last_modified', models.DateTimeField(auto_now=True)),
42+
('categories', models.ManyToManyField(related_name='posts',
43+
to='blog.Category')),
44+
],
45+
),
46+
migrations.AddField(
47+
model_name='comment',
48+
name='post',
49+
field=models.ForeignKey(
50+
on_delete=django.db.models.deletion.CASCADE,
51+
to='blog.Post'
52+
),
53+
),
54+
]

rp-portfolio/blog/migrations/__init__.py

Whitespace-only changes.

rp-portfolio/blog/models.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
from django.db import models
2+
3+
4+
class Category(models.Model):
5+
name = models.CharField(max_length=20)
6+
7+
8+
class Post(models.Model):
9+
title = models.CharField(max_length=255)
10+
body = models.TextField()
11+
created_on = models.DateTimeField(auto_now_add=True)
12+
last_modified = models.DateTimeField(auto_now=True)
13+
categories = models.ManyToManyField("Category", related_name="posts")
14+
15+
16+
class Comment(models.Model):
17+
author = models.CharField(max_length=60)
18+
body = models.TextField()
19+
created_on = models.DateTimeField(auto_now_add=True)
20+
post = models.ForeignKey("Post", on_delete=models.CASCADE)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{% extends "base.html" %}
2+
{% block page_content %}
3+
<div class="col-md-8 offset-md-2">
4+
<h1>{{ category | title }}</h1>
5+
<hr>
6+
{% for post in posts %}
7+
<h2><a href="{% url 'blog_detail' post.pk%}">{{ post.title }}</a></h2>
8+
<small>
9+
{{ post.created_on.date }} |&nbsp;
10+
Categories:&nbsp;
11+
{% for category in post.categories.all %}
12+
<a href="{% url 'blog_category' category.name %}">
13+
{{ category.name }}
14+
</a>&nbsp;
15+
{% endfor %}
16+
</small>
17+
<p>{{ post.body | slice:":400" }}...</p>
18+
{% endfor %}
19+
</div>
20+
{% endblock %}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
{% extends "base.html" %}
2+
{% block page_content %}
3+
<div class="col-md-8 offset-md-2">
4+
<h1>{{ post.title }}</h1>
5+
<small>
6+
{{ post.created_on.date }} |&nbsp;
7+
Categories:&nbsp;
8+
{% for category in post.categories.all %}
9+
<a href="{% url 'blog_category' category.name %}">
10+
{{ category.name }}
11+
</a>&nbsp;
12+
{% endfor %}
13+
</small>
14+
<p>{{ post.body | linebreaks }}</p>
15+
<h3>Leave a comment:</h3>
16+
<form action="/blog/{{ post.pk }}/" method="post">
17+
{% csrf_token %}
18+
<div class="form-group">
19+
{{ form.author }}
20+
</div>
21+
<div class="form-group">
22+
{{ form.body }}
23+
</div>
24+
<button type="submit" class="btn btn-primary">Submit</button>
25+
</form>
26+
<h3>Comments:</h3>
27+
{% for comment in comments %}
28+
<p>
29+
On {{comment.created_on.date }}&nbsp;
30+
<b>{{ comment.author }}</b> wrote:
31+
</p>
32+
<p>{{ comment.body }}</p>
33+
<hr>
34+
{% endfor %}
35+
</div>
36+
{% endblock %}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{% extends "base.html" %}
2+
3+
{% block page_content %}
4+
<div class="col-md-8 offset-md-2">
5+
<h1>Blog Index</h1>
6+
<hr>
7+
{% for post in posts %}
8+
<h2><a href="{% url 'blog_detail' post.pk%}">{{ post.title }}</a></h2>
9+
<small>
10+
{{ post.created_on.date }} |&nbsp;
11+
Categories:&nbsp;
12+
{% for category in post.categories.all %}
13+
<a href="{% url 'blog_category' category.name %}">
14+
{{ category.name }}
15+
</a>&nbsp;
16+
{% endfor %}
17+
</small>
18+
<p>{{ post.body | slice:":400" }}...</p>
19+
{% endfor %}
20+
</div>
21+
{% endblock %}

0 commit comments

Comments
 (0)