From 4180203bd13d53d1c7bc5792d7f9915cb2a96bac Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Wed, 6 Jul 2022 22:35:59 +0100 Subject: [PATCH 1/2] Add post create view --- flangr/posts/urls.py | 1 + flangr/posts/views.py | 17 ++++++++++++++++- flangr/templates/posts/post_form.html | 10 ++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 flangr/templates/posts/post_form.html diff --git a/flangr/posts/urls.py b/flangr/posts/urls.py index 2223c6b..7dc96a0 100644 --- a/flangr/posts/urls.py +++ b/flangr/posts/urls.py @@ -5,4 +5,5 @@ from . import views app_name = "posts" urlpatterns = [ path("post/", views.PostDetailView.as_view(), name="post_detail"), + path("post/new", views.PostCreateView.as_view(), name="post_create"), ] diff --git a/flangr/posts/views.py b/flangr/posts/views.py index 4e867aa..c571a5d 100644 --- a/flangr/posts/views.py +++ b/flangr/posts/views.py @@ -1,7 +1,8 @@ -from django.views.generic import DetailView +from django.views.generic import DetailView, CreateView from django.views.generic.edit import ModelFormMixin from django.forms import modelform_factory from django.http import HttpResponseRedirect +from django.urls import reverse from django.contrib.auth.mixins import LoginRequiredMixin @@ -32,3 +33,17 @@ class PostDetailView(LoginRequiredMixin, DetailView, ModelFormMixin): return self.form_valid(form) else: return self.form_invalid(form) + + +class PostCreateView(LoginRequiredMixin, CreateView): + model = Post + fields = ("title", "body", "img") + + def get_success_url(self): + return reverse("posts:post_detail", kwargs={"pk": self.object.pk}) + + def form_valid(self, form): + self.object = form.save(commit=False) + self.object.user = self.request.user + self.object.save() + return HttpResponseRedirect(self.get_success_url()) diff --git a/flangr/templates/posts/post_form.html b/flangr/templates/posts/post_form.html new file mode 100644 index 0000000..cac2d5e --- /dev/null +++ b/flangr/templates/posts/post_form.html @@ -0,0 +1,10 @@ +{% extends "base.html" %} + +{% block content %} +

Upload a new picture

+
+ {% csrf_token %} + {{ form }} + +
+{% endblock content %} From 4e8af9b0a5a5d22ef6cbd9f68fa1a8edffed0851 Mon Sep 17 00:00:00 2001 From: Maximilian Friedersdorff Date: Thu, 7 Jul 2022 22:01:50 +0100 Subject: [PATCH 2/2] Write a unit test for the post create view --- flangr/posts/tests.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/flangr/posts/tests.py b/flangr/posts/tests.py index 57b981f..6ec3171 100644 --- a/flangr/posts/tests.py +++ b/flangr/posts/tests.py @@ -106,3 +106,15 @@ class PostViewsTests(TestCase): url = reverse("posts:post_detail", kwargs={"pk": self.post.pk}) c.post(url, {"comment": ""}) self.assertFalse(self.post.comments.all().exists()) + + def test_can_post_a_post(self): + c = Client() + c.login(username="someone", password="secret") + url = reverse("posts:post_create") + with open( + os.path.join(os.path.dirname(__file__), "test_data", "test_img.png"), + mode="rb", + ) as f: + c.post(url, {"title": "title", "body": "body", "img": File(f)}) + + self.assertEqual(Post.objects.count(), 2)