From c9fe7ef016e4596c8c944b80c9f724d0e3ce679c Mon Sep 17 00:00:00 2001 From: zablon Date: Thu, 1 Feb 2024 06:39:37 +0300 Subject: [PATCH 1/8] Chore: PostForm --- blog/forms.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 blog/forms.py diff --git a/blog/forms.py b/blog/forms.py new file mode 100644 index 0000000..9af9b04 --- /dev/null +++ b/blog/forms.py @@ -0,0 +1,8 @@ +from .models import Post +from django import forms + + +class PostForm(forms.ModelForm): + class Meta: + model=Post + fields=['title','content'] From 851e99e0a7c943ed96bdc4bbdd996933f2a0dd22 Mon Sep 17 00:00:00 2001 From: zablon Date: Thu, 1 Feb 2024 06:40:11 +0300 Subject: [PATCH 2/8] Chore : Create Post Template --- blog/templates/blog/create_post.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 blog/templates/blog/create_post.html diff --git a/blog/templates/blog/create_post.html b/blog/templates/blog/create_post.html new file mode 100644 index 0000000..21ba363 --- /dev/null +++ b/blog/templates/blog/create_post.html @@ -0,0 +1,10 @@ +{% extends "blog/base.html" %} + +{% block content %} +

Create Post

+
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock content %} \ No newline at end of file From 6545a315a5e4e5c8756e0bca46e01c7e6b889815 Mon Sep 17 00:00:00 2001 From: zablon Date: Thu, 1 Feb 2024 06:41:30 +0300 Subject: [PATCH 3/8] Style: Create Post Link --- blog/templates/blog/base.html | 3 +++ 1 file changed, 3 insertions(+) diff --git a/blog/templates/blog/base.html b/blog/templates/blog/base.html index e33cbe6..1926f42 100644 --- a/blog/templates/blog/base.html +++ b/blog/templates/blog/base.html @@ -34,6 +34,9 @@ + From eb6953c08b4d4207989f8fa4ec9ca45dc60cd0c1 Mon Sep 17 00:00:00 2001 From: zablon Date: Thu, 1 Feb 2024 06:42:14 +0300 Subject: [PATCH 4/8] Chore: Create Post URL CPath --- blog/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/blog/urls.py b/blog/urls.py index a817f61..33de3f4 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -5,4 +5,5 @@ urlpatterns = [ path("", views.home, name="blog-home"), path("about/", views.about, name="blog-about"), + path("create-post/", views.create_post, name="create_post"), ] From 86ea69793105b8fd0913c3585d028308ba1c684c Mon Sep 17 00:00:00 2001 From: zablon Date: Thu, 1 Feb 2024 06:42:55 +0300 Subject: [PATCH 5/8] Feat: Create Post Logic View --- blog/views.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/blog/views.py b/blog/views.py index 2675c50..0c2e2b4 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,7 +1,8 @@ -from django.shortcuts import render - +from django.shortcuts import render,redirect +from django.contrib.auth.decorators import login_required from .models import Post - +from .forms import PostForm +from django.contrib import messages def home(request): context = {"posts": Post.objects.all()} @@ -10,3 +11,18 @@ def home(request): def about(request): return render(request, "blog/about.html", {"title": "About"}) + +@login_required +def create_post(request): + if request.method == 'POST': + form=PostForm(request.POST) + if form.is_valid(): + user=form.save(commit=False) + user.author=request.user + user.save() + messages.success(request, 'The post has been created successfully.') + return redirect('home') + else: + messages.error(request, 'Please correct the following errors:') + form=PostForm() + return render(request,'blog/create_post.html',{'form':form}) \ No newline at end of file From 199f1618de89c6412b08c7eec5d0cf2b2ff62f18 Mon Sep 17 00:00:00 2001 From: zablon Date: Sat, 10 Feb 2024 13:17:02 +0300 Subject: [PATCH 6/8] Chore(template): Update Post template --- blog/templates/blog/update_post.html | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 blog/templates/blog/update_post.html diff --git a/blog/templates/blog/update_post.html b/blog/templates/blog/update_post.html new file mode 100644 index 0000000..ebb5651 --- /dev/null +++ b/blog/templates/blog/update_post.html @@ -0,0 +1,10 @@ +{% extends "blog/base.html" %} + +{% block content %} +

Update Post

+
+ {% csrf_token %} + {{ form.as_p }} + +
+{% endblock content %} \ No newline at end of file From 85f6226ed54845fdb72530a4367461ce49a6af5c Mon Sep 17 00:00:00 2001 From: zablon Date: Sat, 10 Feb 2024 13:17:58 +0300 Subject: [PATCH 7/8] Chore(path): Added update post url configurations --- blog/urls.py | 1 + 1 file changed, 1 insertion(+) diff --git a/blog/urls.py b/blog/urls.py index 33de3f4..0325b7a 100644 --- a/blog/urls.py +++ b/blog/urls.py @@ -6,4 +6,5 @@ path("", views.home, name="blog-home"), path("about/", views.about, name="blog-about"), path("create-post/", views.create_post, name="create_post"), + path("update-post//", views.update_post, name="update_post"), ] From 28f219b36451a285a884d528da8475fab359e268 Mon Sep 17 00:00:00 2001 From: zablon Date: Sat, 10 Feb 2024 13:19:16 +0300 Subject: [PATCH 8/8] Chore(update-post-logic): Update post view Logic to update post --- blog/views.py | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/blog/views.py b/blog/views.py index 0c2e2b4..eb2ec10 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,4 +1,4 @@ -from django.shortcuts import render,redirect +from django.shortcuts import render,redirect,get_object_or_404 from django.contrib.auth.decorators import login_required from .models import Post from .forms import PostForm @@ -25,4 +25,25 @@ def create_post(request): else: messages.error(request, 'Please correct the following errors:') form=PostForm() - return render(request,'blog/create_post.html',{'form':form}) \ No newline at end of file + return render(request,'blog/create_post.html',{'form':form}) + +@login_required +def update_post(request, pk): + post=get_object_or_404(Post, pk=pk) + + if request.method == "POST": + form=PostForm(request.POST, instance=post) + if form.is_valid(): + user=form.save() + user.author=request.user + user.save() + messages.info(request, "Post has been updated successfully") + # Redirect To Detail Page + return redirect('') + + messages.error(request,"Please correct the following error !!") + + else : + form=PostForm(instance=post) + + return render(request, "blog/update_post.html", {'form':form})