add edit,add,delete for posts

This commit is contained in:
mohamad24xx 2024-08-31 18:59:19 +03:30
parent 8ac04f8bf0
commit 39e7163a13
8 changed files with 97 additions and 10 deletions

8
blog/forms.py Normal file
View file

@ -0,0 +1,8 @@
from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']

View file

@ -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

View file

@ -6,6 +6,20 @@
</head>
<body>
<h1>My Blog</h1>
{% if request.user.username %}
<p>Welcome, {{ request.user.username }}!</p>
<a href="{% url 'logout' %}">Logout</a>
<h2>nav</h2>
{% if template_name != 'home.html' %}
<a href="{% url 'home' %}">home</a> |
{% endif %}
<a href="{% url 'dashboard' %}">dashboard</a>
{% else %}
<h2>nav</h2>
<a href="{% url 'login' %}">Login</a> |
<a href="{% url 'register' %}">Register</a>
{% endif %}
<h2>posts</h2>
{% block content %}
{% endblock %}
</body>

View file

@ -6,13 +6,25 @@
<body>
<h2>Dashboard</h2>
<p>Welcome, {{ request.user.username }}!</p>
<a href="{% url 'home' %}">home</a>|
<a href="{% url 'logout' %}">Logout</a>
<h3>Your Posts</h3>
<ul>
{% for post in posts %}
<li>{{ post.title }}</li>
<li>
{{ post.title }}
<a href="{% url 'edit_post' post.pk %}">Edit</a>
<a href="{% url 'delete_post' post.pk %}">Delete</a>
</li>
{% endfor %}
</ul>
<h3>Add a New Post</h3>
<form method="post" action="{% url 'add_post' %}">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Add Post</button>
</form>
<br/>
</body>
</html>

View file

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html>
<head>
<title>Edit Post</title>
</head>
<body>
<h2>Edit Post</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save Changes</button>
</form>
</body>
</html>

View file

@ -3,6 +3,8 @@
{% block content %}
<h2>{{ post.title }}</h2>
<p><small>Updated at: {{ post.updated_at }}</small></p>
<p>{{ post.content }}</p>
<p><small>By {{ post.author }} on {{ post.created_at }}</small></p>
{% endblock %}
<a href="{% url 'home' %}">Back to Home</a>

View file

@ -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')

View file

@ -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/<int:pk>/', views.edit_post, name='edit_post'),
path('delete_post/<int:pk>/', views.delete_post, name='delete_post'),
]