add edit,add,delete for posts
This commit is contained in:
parent
8ac04f8bf0
commit
39e7163a13
8
blog/forms.py
Normal file
8
blog/forms.py
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
from django import forms
|
||||||
|
from .models import Post
|
||||||
|
|
||||||
|
class PostForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = Post
|
||||||
|
fields = ['title', 'content']
|
|
@ -10,8 +10,5 @@ class Post(models.Model):
|
||||||
created_at = models.DateTimeField(default=timezone.now)
|
created_at = models.DateTimeField(default=timezone.now)
|
||||||
updated_at = models.DateTimeField(auto_now=True)
|
updated_at = models.DateTimeField(auto_now=True)
|
||||||
|
|
||||||
class Meta:
|
|
||||||
verbose_name_plural = "Markdown content"
|
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
|
@ -5,7 +5,21 @@
|
||||||
<title>My Blog is shiny</title>
|
<title>My Blog is shiny</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>My Blog</h1>
|
<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 %}
|
{% block content %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</body>
|
</body>
|
||||||
|
|
|
@ -6,13 +6,25 @@
|
||||||
<body>
|
<body>
|
||||||
<h2>Dashboard</h2>
|
<h2>Dashboard</h2>
|
||||||
<p>Welcome, {{ request.user.username }}!</p>
|
<p>Welcome, {{ request.user.username }}!</p>
|
||||||
|
<a href="{% url 'home' %}">home</a>|
|
||||||
<a href="{% url 'logout' %}">Logout</a>
|
<a href="{% url 'logout' %}">Logout</a>
|
||||||
<h3>Your Posts</h3>
|
<h3>Your Posts</h3>
|
||||||
<ul>
|
<ul>
|
||||||
{% for post in posts %}
|
{% 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 %}
|
{% endfor %}
|
||||||
</ul>
|
</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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
|
15
blog/templates/blog/edit_post.html
Normal file
15
blog/templates/blog/edit_post.html
Normal 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>
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h2>{{ post.title }}</h2>
|
<h2>{{ post.title }}</h2>
|
||||||
|
<p><small>Updated at: {{ post.updated_at }}</small></p>
|
||||||
<p>{{ post.content }}</p>
|
<p>{{ post.content }}</p>
|
||||||
<p><small>By {{ post.author }} on {{ post.created_at }}</small></p>
|
<p><small>By {{ post.author }} on {{ post.created_at }}</small></p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
<a href="{% url 'home' %}">Back to Home</a>
|
||||||
|
|
|
@ -1,16 +1,20 @@
|
||||||
|
from django.shortcuts import render, redirect, get_object_or_404
|
||||||
from django.shortcuts import render , redirect
|
|
||||||
from .models import Post
|
|
||||||
from django.contrib.auth import authenticate, login, logout
|
from django.contrib.auth import authenticate, login, logout
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.forms import UserCreationForm
|
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):
|
def home(request):
|
||||||
posts = Post.objects.all()
|
posts = Post.objects.all()
|
||||||
return render(request, 'blog/home.html', {'posts': posts})
|
return render(request, 'blog/home.html', {'posts': posts})
|
||||||
|
|
||||||
def post_detail(request, pk):
|
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})
|
return render(request, 'blog/post_detail.html', {'post': post})
|
||||||
|
|
||||||
def login_view(request):
|
def login_view(request):
|
||||||
|
@ -27,7 +31,7 @@ def login_view(request):
|
||||||
|
|
||||||
def logout_view(request):
|
def logout_view(request):
|
||||||
logout(request)
|
logout(request)
|
||||||
return redirect('login')
|
return redirect('home')
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def dashboard(request):
|
def dashboard(request):
|
||||||
|
@ -43,3 +47,35 @@ def register(request):
|
||||||
else:
|
else:
|
||||||
form = UserCreationForm()
|
form = UserCreationForm()
|
||||||
return render(request, 'blog/register.html', {'form': form})
|
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')
|
||||||
|
|
|
@ -26,4 +26,7 @@ urlpatterns = [
|
||||||
path('logout/', views.logout_view, name='logout'),
|
path('logout/', views.logout_view, name='logout'),
|
||||||
path('dashboard/', views.dashboard, name='dashboard'),
|
path('dashboard/', views.dashboard, name='dashboard'),
|
||||||
path('register/', views.register, name='register'),
|
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'),
|
||||||
]
|
]
|
||||||
|
|
Loading…
Reference in a new issue