django_md_blog/blog/views.py

82 lines
2.5 KiB
Python

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