diff --git a/blog/forms.py b/blog/forms.py new file mode 100644 index 0000000..95951d1 --- /dev/null +++ b/blog/forms.py @@ -0,0 +1,8 @@ + +from django import forms +from .models import Post + +class PostForm(forms.ModelForm): + class Meta: + model = Post + fields = ['title', 'content'] diff --git a/blog/models.py b/blog/models.py index b8f40e3..b874374 100644 --- a/blog/models.py +++ b/blog/models.py @@ -10,8 +10,5 @@ class Post(models.Model): created_at = models.DateTimeField(default=timezone.now) updated_at = models.DateTimeField(auto_now=True) - class Meta: - verbose_name_plural = "Markdown content" - def __str__(self): return self.title diff --git a/blog/templates/blog/base.html b/blog/templates/blog/base.html index 57130bb..e6e9cce 100644 --- a/blog/templates/blog/base.html +++ b/blog/templates/blog/base.html @@ -5,7 +5,21 @@ My Blog is shiny -

My Blog

+

My Blog

+{% if request.user.username %} +

Welcome, {{ request.user.username }}!

+ Logout +

nav

+{% if template_name != 'home.html' %} + home | +{% endif %} + dashboard +{% else %} +

nav

+ Login | + Register +{% endif %} +

posts

{% block content %} {% endblock %} diff --git a/blog/templates/blog/dashboard.html b/blog/templates/blog/dashboard.html index 3e33727..aeabd3b 100644 --- a/blog/templates/blog/dashboard.html +++ b/blog/templates/blog/dashboard.html @@ -6,13 +6,25 @@

Dashboard

Welcome, {{ request.user.username }}!

+ home| Logout

Your Posts

+

Add a New Post

+
+ {% csrf_token %} + {{ form.as_p }} + +
+
diff --git a/blog/templates/blog/edit_post.html b/blog/templates/blog/edit_post.html new file mode 100644 index 0000000..c48ec74 --- /dev/null +++ b/blog/templates/blog/edit_post.html @@ -0,0 +1,15 @@ + + + + Edit Post + + +

Edit Post

+
+ {% csrf_token %} + {{ form.as_p }} + +
+ + + diff --git a/blog/templates/blog/post_detail.html b/blog/templates/blog/post_detail.html index 635c959..6dda247 100644 --- a/blog/templates/blog/post_detail.html +++ b/blog/templates/blog/post_detail.html @@ -3,6 +3,8 @@ {% block content %}

{{ post.title }}

+

Updated at: {{ post.updated_at }}

{{ post.content }}

By {{ post.author }} on {{ post.created_at }}

{% endblock %} + Back to Home diff --git a/blog/views.py b/blog/views.py index e1bedf9..77e61aa 100644 --- a/blog/views.py +++ b/blog/views.py @@ -1,16 +1,20 @@ - -from django.shortcuts import render , redirect -from .models import Post +from django.shortcuts import render, redirect, get_object_or_404 from django.contrib.auth import authenticate, login, logout from django.contrib.auth.decorators import login_required from django.contrib.auth.forms import UserCreationForm +from django.http import HttpResponseRedirect +from django.urls import reverse +from .models import Post +from .forms import PostForm + + def home(request): posts = Post.objects.all() return render(request, 'blog/home.html', {'posts': posts}) def post_detail(request, pk): - post = Post.objects.get(pk=pk) + post = get_object_or_404(Post, pk=pk) return render(request, 'blog/post_detail.html', {'post': post}) def login_view(request): @@ -27,7 +31,7 @@ def login_view(request): def logout_view(request): logout(request) - return redirect('login') + return redirect('home') @login_required def dashboard(request): @@ -43,3 +47,35 @@ def register(request): else: form = UserCreationForm() return render(request, 'blog/register.html', {'form': form}) + + +@login_required +def add_post(request): + if request.method == 'POST': + form = PostForm(request.POST) + if form.is_valid(): + post = form.save(commit=False) + post.author = request.user + post.save() + return redirect('dashboard') + else: + form = PostForm() + return render(request, 'blog/dashboard.html', {'form': form}) + +@login_required +def edit_post(request, pk): + post = get_object_or_404(Post, pk=pk, author=request.user) + if request.method == 'POST': + form = PostForm(request.POST, instance=post) + if form.is_valid(): + form.save() + return redirect('dashboard') + else: + form = PostForm(instance=post) + return render(request, 'blog/edit_post.html', {'form': form, 'post': post}) + +@login_required +def delete_post(request, pk): + post = get_object_or_404(Post, pk=pk, author=request.user) + post.delete() + return redirect('dashboard') diff --git a/django_mblog/urls.py b/django_mblog/urls.py index d11a4b2..9539e9d 100644 --- a/django_mblog/urls.py +++ b/django_mblog/urls.py @@ -26,4 +26,7 @@ urlpatterns = [ path('logout/', views.logout_view, name='logout'), path('dashboard/', views.dashboard, name='dashboard'), path('register/', views.register, name='register'), + path('add_post/', views.add_post, name='add_post'), + path('edit_post//', views.edit_post, name='edit_post'), + path('delete_post//', views.delete_post, name='delete_post'), ]