Skip to content
Open

1 #1

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
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
*.pyc
__pycache__
myvenv
db.sqlite3
.DS_Store
*.log
11 changes: 11 additions & 0 deletions .idea/cloud.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions .idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

826 changes: 826 additions & 0 deletions .idea/workspace.xml

Large diffs are not rendered by default.

30 changes: 30 additions & 0 deletions django/.idea/gjango.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions django/.idea/inspectionProfiles/profiles_settings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions django/.idea/libraries/Django_Lib.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions django/.idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions django/.idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions django/.idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1,249 changes: 1,249 additions & 0 deletions django/.idea/workspace.xml

Large diffs are not rendered by default.

Empty file added django/blog/__init__.py
Empty file.
5 changes: 5 additions & 0 deletions django/blog/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.contrib import admin
from .models import Post, Comment

admin.site.register(Post)
admin.site.register(Comment)
13 changes: 13 additions & 0 deletions django/blog/forms.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from django import forms
from .models import Post, Comment


class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ('title', 'text',)

class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('text',)
27 changes: 27 additions & 0 deletions django/blog/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
from django.conf import settings
import django.utils.timezone


class Migration(migrations.Migration):

dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]

operations = [
migrations.CreateModel(
name='Post',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('title', models.CharField(max_length=200)),
('text', models.TextField()),
('created_date', models.DateTimeField(default=django.utils.timezone.now)),
('published_date', models.DateTimeField(blank=True, null=True)),
('author', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
],
),
]
26 changes: 26 additions & 0 deletions django/blog/migrations/0002_comment.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
import django.utils.timezone


class Migration(migrations.Migration):

dependencies = [
('blog', '0001_initial'),
]

operations = [
migrations.CreateModel(
name='Comment',
fields=[
('id', models.AutoField(verbose_name='ID', primary_key=True, serialize=False, auto_created=True)),
('author', models.CharField(max_length=200)),
('text', models.TextField()),
('created_date', models.DateTimeField(default=django.utils.timezone.now)),
('approved_comment', models.BooleanField(default=False)),
('post', models.ForeignKey(related_name='comments', to='blog.Post')),
],
),
]
20 changes: 20 additions & 0 deletions django/blog/migrations/0003_auto_20170706_1508.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models, migrations
from django.conf import settings


class Migration(migrations.Migration):

dependencies = [
('blog', '0002_comment'),
]

operations = [
migrations.AlterField(
model_name='comment',
name='author',
field=models.ForeignKey(to=settings.AUTH_USER_MODEL),
),
]
Empty file.
37 changes: 37 additions & 0 deletions django/blog/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from django.db import models
from django.utils import timezone


class Post(models.Model):
author = models.ForeignKey('auth.User')
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)

def publish(self):
self.published_date = timezone.now()
self.save()

def __str__(self):
return self.title

def approved_comments(self):
return self.comments.filter(approved_comment=True)


class Comment(models.Model):
post = models.ForeignKey('blog.Post', related_name='comments')
author = models.ForeignKey('auth.User')
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
approved_comment = models.BooleanField(default=False)

def approve(self):
self.approved_comment = True
self.save()

def __str__(self):
return self.text
56 changes: 56 additions & 0 deletions django/blog/static/css/blog.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
.page-header {
background-color: #f5ff80;
margin-top: 0;
padding: 20px 20px 20px 40px;
}

.page-header h1, .page-header h1 a, .page-header h1 a:visited, .page-header h1 a:active {
color: #ffffff;
font-size: 36pt;
text-decoration: none;
}

.content {
margin-left: 40px;
}

h1, h2, h3, h4 {
font-family: 'Lobster', cursive;
}

.date {
float: right;
color: #828282;
}

.save {
float: right;
}

.post-form textarea, .post-form input {
width: 100%;
}

.top-menu, .top-menu:hover, .top-menu:visited {
color: #ffffff;
float: right;
font-size: 26pt;
margin-right: 20px;
}

.post {
margin-bottom: 70px;
}

.post h1 a, .post h1 a:visited {
color: #000000;
}

.btn-default {
float: right;
margin-right: 10px;
}

.comment {
margin: 20px 0px 20px 20px;
}
9 changes: 9 additions & 0 deletions django/blog/templates/blog/add_comment_to_post.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{% extends 'blog/base.html' %}

{% block content_post %}
<h1>New comment</h1>
<form method="POST" class="post-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Send</button>
</form>
{% endblock %}
24 changes: 24 additions & 0 deletions django/blog/templates/blog/base.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{% extends 'header.html' %}

{% block content %}
{% load staticfiles %}

<link rel="stylesheet" href="{% static 'css/blog.css' %}">
<div>
<h1><a href={% url "posts:post_list" %}>Posts</a></h1>
{% if user.is_authenticated %}
{% if user.is_superuser %}
<a href="{% url 'posts:post_draft_list' %}"><span class="glyphicon glyphicon-edit"></span></a>
{% endif %}
<a href="{% url 'posts:post_new' %}"><span class="glyphicon glyphicon-plus"></span></a>
{% endif %}
</div>
<div class="content container">
<div class="row">
<div class="col-md-8">
{% block content_post %}
{% endblock %}
</div>
</div>
</div>
{% endblock %}
46 changes: 46 additions & 0 deletions django/blog/templates/blog/post_detail.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{% extends 'blog/base.html' %}

{% block content_post %}
<div class="post">
<h1>{{ post.title }}
{% if post.author.pk == user.pk or user.is_superuser%}
<a class="btn btn-default" href="{% url 'posts:post_remove' pk=post.pk %}"><span
class="glyphicon glyphicon-remove"></span></a>
<a class="btn btn-default" href="{% url 'posts:post_edit' pk=post.pk %}"><span
class="glyphicon glyphicon-pencil"></span></a>
{% if not post.published_date %}
<a class="btn btn-default" href="{% url 'posts:post_publish' pk=post.pk %}">Publish</a>
{% endif %}
{% endif %}
</h1>
<p>{{ post.text|linebreaksbr }}</p>
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
</div>
<hr>
<h1>Comments:<a class="btn btn-default" href="{% url 'posts:add_comment_to_post' pk=post.pk %}">Add comment</a></h1>
<div>
{% for comment in post.comments.all %}
{% if user.is_authenticated or comment.approved_comment %}
<div class="comment">
<div class="date">
{{ comment.created_date }}
{% if not comment.approved_comment %}
<a class="btn btn-default" href="{% url 'post:comment_remove' pk=comment.pk %}"><span
class="glyphicon glyphicon-remove"></span></a>
<a class="btn btn-default" href="{% url 'posts:comment_approve' pk=comment.pk %}"><span
class="glyphicon glyphicon-ok"></span></a>
{% endif %}
</div>
<strong>{{ comment.author }}</strong>
<p>{{ comment.text|linebreaks }}</p>
</div>
{% endif %}
{% empty %}
<p>No comments here yet :(</p>
{% endfor %}
</div>
{% endblock %}
Loading