viwes py

 from django.shortcuts import render,redirect
from django.http import HttpResponse
from .models import Book
from .forms import BookForm
# Create your views here.

def index(request):
    book_list = Book.objects.all()
    context ={
        'book_list':book_list
    }
    return render(request,'myapp/index.html',context)


def detail(request,book_id):
    book = Book.objects.get(id=book_id)
    return render(request,'myapp/detail.html',{'book':book})

def add_book(request):
    if request.method == "POST":
        name = request.POST.get('name',)
        desc = request.POST.get('desc',)
        price = request.POST.get('price',)
        book_image = request.FILES['book_image']

        book = Book(name=name,desc=desc,price=price,book_image=book_image)
        book.save()

    return render(request,'myapp/add_book.html')

def update(request,id):
    book = Book.objects.get(id=id)
    form = BookForm(request.POST or None, request.FILES, instance=book)
    if form.is_valid():
        form.save()
        return redirect('/')
    return render(request,'myapp/edit.html',{'form':form,'book':book})

def delete(request,id):
    if request.method=="POST":
        book = Book.objects.get(id=id)
        book.delete()
        return redirect('/')
    return render(request,'myapp/delete.html')
    

  urls py

from django.contrib import admin
from django.urls import path
from myapp import views

app_name = 'myapp'

urlpatterns = [
   
    path('',views.index,name='index'),
    #book/2
    path('book/<int:book_id>/',views.detail,name='detail'),
    path('add/',views.add_book,name='add_book'),
    path('update/<int:id>/',views.update,name='update'),
    path('delete/<int:id>/',views.delete,name='delete'),
]


models py

from django.db import models

# Create your models here.

class Book(models.Model):

    def __str__(self):
        return self.name

    name = models.CharField(max_length=100)
    desc = models.CharField(max_length=300)
    price = models.IntegerField()
    book_image = models.ImageField(default='default.jpg',upload_to='book_images/')
    



forms py

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ['name','desc','book_image','price']


admin py

from django.contrib import admin
from .models import Book
# Register your models here.

admin.site.register(Book)



Templates

index html

{% extends 'myapp/base.html' %}
{% block body %}

<div class="container">
    <div class="row">
        {% for book in book_list %}
        <div class="col-md-3">
            <div class="card">
                <img src="{‌{book.book_image.url}}" class="card-img-top" alt="">
                <div class="card-body">
                    <h5 class="card-title">{‌{book.name}}</h5>
                    <p class="card-text">${‌{book.price}}</p>
                    <a class="btn btn-warning" href="{% url 'myapp:detail' book.id %}">View Details  </a> 
                </div>
            </div>
        </div>
        {% endfor %}
    </div>
</div>





   

{% endblock %}

 

edit html

<form method="POST" enctype="multipart/form-data" >
    {% csrf_token %}
    {‌{form.as_p}}
    <input type="submit" name="" id="">
</form>


detail html

{% extends 'myapp/base.html' %}

{% block body %}

<div class="container">
    <div class="row">
        <div class="col-md-6">
                <img width="300" height="300" src="{‌{book.book_image.url}}">

        </div>
        <div class="col-md-6">
                <h2>{‌{book.name}} </h2>

                <h4>{‌{book.desc}}</h4>
                
                 <h6>{‌{book.price}}</h6>
                
                 <a class="btn btn-warning" href="{% url 'myapp:update' book.id %}">Update</a>
                 <a class="btn btn-danger" href="{% url 'myapp:delete' book.id %}">Delete</a>
                
        </div>
    </div>
</div>



{% endblock %}


delete html

<form method="POST">
    {% csrf_token %}
    Are you sure you want to delete this book?
    <input type="submit">
</form>


base html

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
    <link rel="stylesheet" href="{% static 'myapp/style.css' %}">

    <title>Document</title>
</head>
<body>
    <nav class="navbar navbar-dark bg-dark">
        <a class="navbar-brand" href="#">
          Online Book Store
        </a>
      </nav>

      {% block body %}


      {% endblock %}

</body>
</html>


add_book html

<form method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <input type="text" name="name" id="name" placeholder="Enter name of the book" >
    <input type="text" name="desc" id="desc" placeholder="Enter book description">
    <input type="text" name="price" id="price" placeholder="Enter book Price">
    <input type="file" name="book_image" id="book_image">
    <input type="submit" name="" id="">
</form>