🚀 Django Blog CRUD (Step-by-Step)
1️⃣ Model (models.py)
👉 Idi mana database structure
👉 Title, content, image, date store avutayi
2️⃣ Forms (forms.py)
from django.shortcuts import render, redirect, get_object_or_404
from .models import Blog
from .forms import BlogForm
# READ (List)
def blog_list(request):
blogs = Blog.objects.all().order_by('-created_at')
return render(request, 'blog_list.html', {'blogs': blogs})
# CREATE
def blog_create(request):
form = BlogForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
return redirect('blog_list')
return render(request, 'blog_form.html', {'form': form})
# UPDATE
def blog_update(request, pk):
blog = get_object_or_404(Blog, pk=pk)
form = BlogForm(request.POST or None, request.FILES or None, instance=blog)
if form.is_valid():
form.save()
return redirect('blog_list')
return render(request, 'blog_form.html', {'form': form})
# DELETE
def blog_delete(request, pk):
blog = get_object_or_404(Blog, pk=pk)
if request.method == "POST":
blog.delete()
return redirect('blog_list')
return render(request, 'blog_confirm_delete.html', {'blog': blog})
4️⃣ URLs (urls.py)
<h1>All Blogs</h1>
<a href="{% url 'blog_create' %}">Create New Blog</a>
{% for blog in blogs %}
<div>
<h2>{{ blog.title }}</h2>
<p>{{ blog.content|truncatewords:20 }}</p>
{% if blog.image %}
<img src="{{ blog.image.url }}" width="200">
{% endif %}
<br>
<a href="{% url 'blog_update' blog.pk %}">Edit</a>
<a href="{% url 'blog_delete' blog.pk %}">Delete</a>
</div>
<hr>
{% endfor %}
📄 blog_form.html
<h1>Blog Form</h1>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Save</button>
</form>
📄 blog_confirm_delete.html
<h2>Are you sure you want to delete "{{ blog.title }}"?</h2>
<form method="POST">
{% csrf_token %}
<button type="submit">Yes, Delete</button>
</form>
<a href="{% url 'blog_list' %}">Cancel</a>
6️⃣ Media Settings (IMPORTANT)
# settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
# main urls.py
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Comments
Post a Comment