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 = get_object_or_404(Post, pk=pk) return render(request, 'blog/post_detail.html', {'post': post}) def login_view(request): if request.method == 'POST': username = request.POST['username'] password = request.POST['password'] user = authenticate(request, username=username, password=password) if user is not None: login(request, user) return redirect('dashboard') else: return render(request, 'blog/login.html', {'error': 'Invalid credentials'}) return render(request, 'blog/login.html') def logout_view(request): logout(request) return redirect('home') @login_required def dashboard(request): posts = Post.objects.filter(author=request.user) return render(request, 'blog/dashboard.html', {'posts': posts}) def register(request): if request.method == 'POST': form = UserCreationForm(request.POST) if form.is_valid(): form.save() return redirect('login') 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')