Online Auction System Using Django
In this article, I am Going to Build an Online auction system Using Django. Physical auctions are limited by location but online auctions are accessible globally. It opens a broader range of buyers. It Can Connect the Seller, Buyer, and admin.
Tools & Technologies Used in this Project :
- Python
- Django
- Visual Studio Code
- HTML
- CSS
- Java Script
Implementation :
Follow the below steps to implement the discussed project :
Step 1: Download Visual Studio Code and install it in your Device.
Step 2: After Setup Visual Studio Code.Press (Cntrl + Shift + X) and Install Python & Django Extension in it.
Step 3: Open Command Promt and Create a Directory.
>Mkdir Online_Auction
>cd Online_Auction
>code .
Step 4: Open shell of VSCode and create and activate virtual environment using below commands.
virtualenv venv
venv/Scripts/activate
pip install django
Step 4: Create the Project and app using the below commands.
django-admin startproject Online_Auction
cd Online_Auction
python manage.py startapp auction
Step 5: Add app name in Settings.py file. ‘auction’ or paste the below code in Settings.py file
Python3
# Online_Auction > Online_Auction > settings.py import os # Build paths inside the project like this: os.path.join(BASE_DIR, ...) BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ # SECURITY WARNING: keep the secret key used in production secret! SECRET_KEY = '_igtoud8=l*xejhiwtfz$ce-fu*%80&^hybem91#g#)5j7td#z' # SECURITY WARNING: don't run with debug turned on in production! DEBUG = True ALLOWED_HOSTS = [] # Application definition INSTALLED_APPS = [ 'auction' , 'django.contrib.admin' , 'django.contrib.auth' , 'django.contrib.contenttypes' , 'django.contrib.sessions' , 'django.contrib.messages' , 'django.contrib.staticfiles' , ] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware' , 'django.contrib.sessions.middleware.SessionMiddleware' , 'django.middleware.common.CommonMiddleware' , 'django.middleware.csrf.CsrfViewMiddleware' , 'django.contrib.auth.middleware.AuthenticationMiddleware' , 'django.contrib.messages.middleware.MessageMiddleware' , 'django.middleware.clickjacking.XFrameOptionsMiddleware' , ] ROOT_URLCONF = 'Online_Auction.urls' TEMPLATES = [ { 'BACKEND' : 'django.template.backends.django.DjangoTemplates' , 'DIRS' : [], 'APP_DIRS' : True , 'OPTIONS' : { 'context_processors' : [ 'django.template.context_processors.debug' , 'django.template.context_processors.request' , 'django.contrib.auth.context_processors.auth' , 'django.contrib.messages.context_processors.messages' , ], }, }, ] WSGI_APPLICATION = 'Online_Auction.wsgi.application' # Database # https://docs.djangoproject.com/en/2.2/ref/settings/#databases DATABASES = { 'default' : { 'ENGINE' : 'django.db.backends.sqlite3' , 'NAME' : os.path.join(BASE_DIR, 'db.sqlite3' ), } } # Password validation # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators AUTH_PASSWORD_VALIDATORS = [ { 'NAME' : 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator' , }, { 'NAME' : 'django.contrib.auth.password_validation.MinimumLengthValidator' , }, { 'NAME' : 'django.contrib.auth.password_validation.CommonPasswordValidator' , }, { 'NAME' : 'django.contrib.auth.password_validation.NumericPasswordValidator' , }, ] # Internationalization # https://docs.djangoproject.com/en/2.2/topics/i18n/ LANGUAGE_CODE = 'en-us' TIME_ZONE = 'Asia/Kolkata' USE_I18N = True USE_L10N = True USE_TZ = True # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/2.2/howto/static-files/ STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media' ) |
Step :6 Paste the Below code in urls.py file in Online_Auction.
Python3
# Online_Auction > Online_Auction > urls.py from django.contrib import admin from django.urls import path from django.conf import settings from django.conf.urls.static import static from auction.views import * urlpatterns = [ path( 'admin/' , admin.site.urls), path('',Home,name = "home" ), path( 'user_home' ,Bidder_Home,name = "user_home" ), path( 'trainer_home' ,Auction_User,name = "trainer_home" ), path( 'login_user' ,Login_User,name = "login_user" ), path( 'contact' ,Contact,name = "conRtact" ), path( 'about' ,About,name = "about" ), path( 'contact' ,Contact,name = "contact" ), path( 'edit_profile' ,Edit_Profile,name = "edit_profile" ), path( 'edit_profile1' ,Edit_Profile1,name = "edit_profile1" ), path( 'logout' , Logout, name = "logout" ), path( 'login_admin' ,Login_Admin,name = "login_admin" ), path( 'signup' , Signup_User,name = "signup" ), path( 'change_password' ,Change_Password,name = "change_password" ), path( 'change_password1' ,Change_Password1,name = "change_password1" ), path( 'admin_home' , Admin_Home,name = "admin_home" ), path( 'add_product' , Add_Product,name = "add_product" ), path( 'new_product' , New_product,name = "new_product" ), path( 'bidder_user' , Bidder_User,name = "bidder_user" ), path( 'user_delete/<int:id>' , user_delete,name = "user_delete" ), path( 'seller_user' , Seller_User,name = "seller_user" ), path( 'user_delete_seller/<int:id>' , user_delete_seller,name = "user_delete_seller" ), path( 'all_product2' , All_product2,name = "all_product2" ), path( 'profile' , profile, name = 'profile' ), path( 'result' , result, name = 'result' ), path( 'view_auction/<int:pid>' , view_auction, name = 'view_auction' ), path( 'particpated_user(<int:pid>)' , Participated_user, name = 'particpated_user' ), path( 'profile1' , Profile1, name = 'profile1' ), path( 'status(<int:pid>)' , Change_status, name = 'status' ), path( 'winner(<int:pid>)' , Winner,name = 'winner' ), path( 'winner2(<int:pid>)' , Winner2,name = 'winner2' ), path( 'winner1(<int:pid>)' , Winner1,name = 'winner1' ), path( 'start_auction(<int:pid>)' , Start_Auction, name = 'start_auction' ), path( 'view_category' , view_category, name = 'view_category' ), path( 'view_subcategory' , view_subcategory, name = 'view_subcategory' ), path( 'view_session_date' , view_session_date, name = 'view_session_date' ), path( 'view_session_time' , view_session_time, name = 'view_session_time' ), path( 'add_category' , Add_Category, name = 'add_category' ), path( 'add_subcategory' , Add_SubCategory, name = 'add_subcategory' ), path( 'add_session_date' , Add_Session_date, name = 'add_session_date' ), path( 'add_session_time' , Add_Session_time, name = 'add_session_time' ), path( 'bidding_status' , Bidding_Status, name = 'bidding_status' ), path( 'bidding_status2' , Bidding_Status2, name = 'bidding_status2' ), path( 'all_product' , All_product, name = 'all_product' ), path( 'edit_category(<int:pid>)' , Edit_Category, name = 'edit_category' ), path( 'product_detail(<int:pid>)' , product_detail, name = 'product_detail' ), path( 'edit_subcategory(<int:pid>)' , Edit_SubCategory, name = 'edit_subcategory' ), path( 'edit_session_date(<int:pid>)' , Edit_Session_date, name = 'edit_session_date' ), path( 'edit_session_time(<int:pid>)' , Edit_Session_time, name = 'edit_session_time' ), path( 'delete_category(<int:pid>)' , delete_category, name = 'delete_category' ), path( 'delete_subcategory(<int:pid>)' , delete_subcategory, name = 'delete_subcategory' ), path( 'delete_session_date(<int:pid>)' , delete_session_date, name = 'delete_session_date' ), path( 'delete_session_time(<int:pid>)' , delete_session_time, name = 'delete_session_time' ), path( 'load-courses/' , load_courses, name = 'ajax_load_courses' ), path( 'load-courses1/' , load_courses1, name = 'ajax_load_courses1' ), path( 'product_detail2(<int:pid>)' , product_detail2, name = 'product_detail2' ), ] + static(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT) |
Step 7: Go to admin.py file and paste the below code.
Python3
#Online_Auction > auction > admin.py from django.contrib import admin from .models import * # Register your models here.' admin.site.register(Bidder) admin.site.register(Result) admin.site.register(Payment) admin.site.register(Member_fee) admin.site.register(Status) admin.site.register(Send_Feedback) admin.site.register(Auction_User) admin.site.register(Category) admin.site.register(Sub_Category) admin.site.register(Session_date) admin.site.register(Session_Time) admin.site.register(Product) admin.site.register(Aucted_Product) admin.site.register(Participant) |
Step 9: Create two folders in auction one is “templates” , second is “static”
Step 10: Open views.py file from auction_app and paste the below code.
Python3
from django.shortcuts import render from django.shortcuts import render, redirect from django.http import HttpResponse from auction_app.models import * from datetime import date today = date.today() global_var = None # Initialize it with a default value # Function to set the global variable to a dynamic value def set_global_variable(value): global global_var global_var = value # Function to access the global variable def access_global_variable(): return global_var def maxbid( id ): li = [] global maximum item = Item.objects.get( id = id ) print ( "item id-->" ,item. id ) user = User.objects. all ().values() # item = Item.objects.all().values() for i in user: a = i[ 'bid_amt' ] print ( "-->" ,a) li.append(a) maximum = max (li) print (li) print ( "maximum" ,maximum) item.max_bid = maximum item.save() print ( "Item Saved" ) return maximum # print(a) # li.append(i) # print("list-->",li) # print(max(li)) # return a def bid(request): item = Item.objects. all () # user = User.objects.all() maxbid() # print(item.item_name.values) return render(request, 'base.html' ,{ "item" :item}) def login(request): if request.method = = 'POST' : email = request.POST[ 'email' ] print (email) password = request.POST[ 'password' ] print (password) item = Item.objects. all () try : user = User.objects.get(email = email) print ( "userpass--->" ,user.password) if user is not None : if password = = user.password: global mailid # print("Mail id here--->",item.item_status) set_global_variable(email) mailid = email mail = email # print("Ye rhi dates-->",item.start_date) # print("ye print ho gyi--->",mailid) # print("outer funciton global --->",mail) return render(request, 'base.html' ,{ "item" :item, "mailid" :mailid}) else : print ( "Wrong pass" ) return HttpResponse( "Wrong Password" ) except : return HttpResponse( "email id Not exist" ) print ( "email id Not exist" ) return render(request, 'login.html' ) def register(request): if request.method = = 'POST' : name = request.POST[ 'name' ] print (name) email = request.POST[ 'email' ] print (email) phone = request.POST[ 'phone' ] print (phone) password = request.POST[ 'password' ] print (password) user = User.objects. all ().values() for i in user: flag = 0 dataemail = i[ 'email' ] if dataemail = = email: flag = 1 return HttpResponse( "Email id Already Exist" ) if flag! = 1 : new = User.objects.create(name = name,email = email,phone = phone,password = password ) new.save() print (f "User Create with email {email}" ) return HttpResponse(f "User Created Successfully with email {email}" ) return render(request, 'register.html' ) def applybid(request, id ): mail = access_global_variable() print ( "Yaha pe ye mail ai h applybid mei -->" ,mail) item = Item.objects.get( id = id ) user = User.objects.get(email = mail) print ( "user--->" ,user.email) # for i in user: # # print("i-->",i) # if i.email == mail: # print("mail id-->",i.email) if request.method = = "POST" : maximum = request.POST[ 'max_bid' ] item.max_bid = maximum user.bid_amt = maximum print ( "user.status--->" ,user.status) user.status = "Applied" print ( "user.status--->" ,user.status) item.save() user.save() print ( "Hogya save" ) maxbid( id ) return redirect( '/' ) return render(request, 'applybid.html' ,{ "item" :item, "user" :user}) def home(request): item = Item.objects. all () return render(request, 'home.html' ,{ "item" :item}) |
Step 11: Create the base.html file in templates folder and paste the below code.
HTML
<!DOCTYPE html> < html > < head > < style > table { font-family: arial, sans-serif; border-collapse: collapse; width: 100%; } td, th { border: 1px solid #dddddd; text-align: left; padding: 8px; } tr:nth-child(even) { background-color: #dddddd; } a:link, a:visited { background-color: #f44336; color: white; padding: 14px 25px; text-align: right; text-decoration: none; display: inline-block; } a:hover, a:active { background-color: Blue; } </ style > </ head > < body > < center >< h2 >Available Auction</ h2 ></ center > < a href = "{% url 'home' %}" target = "_blank" >Logout</ a > {{mailid}} < table > < thread > < tr > < th >SNo.</ th > < th >Product Name</ th > < th > Bid Amount </ th > < th >Description</ th > < th >Start Date</ th > < th >End Date</ th > < th >Action </ th > </ tr > </ thread > {% for i in item %} < tr > < td >{{forloop.counter}}</ td > < td > {{i.item_name}}</ td > < td > {{i.basic_amount}}</ td > < td > {{i.desc}}</ td > < td > {{i.start_date}}</ td > < td > {{i.end_date}}</ td > < td >< a href = "{% url 'applybid' i.id %}" target = "_blank" >Apply</ a ></ td > {% comment %} < td >< a href = "{% url 'applybid' i.id %}" >< button class = "btn btn-primary" > Apply</ button ></ a > </ td > {% endcomment %} {% endfor %} </ tr > </ table > </ body > </ html > |
Step 12: Create the home.html file in templates folder and paste the below code.
HTML
<!DOCTYPE html> < html > < head > < style > table { font-family: arial, sans-serif; border-collapse: collapse; width: 100%; } td, th { border: 1px solid #dddddd; text-align: left; padding: 8px; } tr:nth-child(even) { background-color: #dddddd; } a:link, a:visited { background-color: #f44336; color: white; padding: 14px 25px; text-align: right; text-decoration: none; display: inline-block; } a:hover, a:active { background-color: Blue; } </ style > </ head > < body > < center >< h2 >Available Auction</ h2 ></ center > < a href = "{% url 'login' %}" target = "_blank" >Login</ a > < table > < thread > < tr > < th >SNo.</ th > < th >Product Name</ th > < th > Bid Amount </ th > < th > Max Bid </ th > < th >Results </ th > </ tr > </ thread > {% for i in item %} < tr > < td >{{forloop.counter}}</ td > < td > {{i.item_name}}</ td > < td > {{i.basic_amount}}</ td > < td >{{i.max_bid}}</ td > < td ></ td > {% endfor %} </ tr > </ table > </ body > </ html > |
Step 13: Create the login.html file in templates folder and paste the below code.
HTML
<!DOCTYPE html> < html lang = "en" > < head > < meta charset = "UTF-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1.0" > < title >Login Page</ title > < style > body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; display: flex; justify-content: center; align-items: center; height: 100vh; } .container { background-color: white; padding: 20px; border-radius: 5px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.2); } input[type="text"], input[type="password"] { width: 90%; padding: 7px; margin: 8px 0; border: 1px solid #ccc; border-radius: 3px; } button { background-color: #007BFF; color: white; padding: 10px 20px; border: none; border-radius: 3px; cursor: pointer; } button:hover { background-color: #0056b3; } a { text-decoration: none; color: #007BFF; } </ style > </ head > < body > < div class = "container" > < center >< h2 >LOGIN PAGE </ h2 ></ center > < form method = "post" > {% csrf_token %} < label for = "email" >Email:</ label >< br > < input type = "text" id = "email" name = "email" required>< br >< br > < label for = "password" >Password:</ label >< br > < input type = "password" id = "password" name = "password" required>< br >< br > < center >< button type = "submit" >Login</ button ></ center > </ form > < p >Don't have an account? < a href = "{% url 'register'%}" >Register here</ a ></ p > </ div > </ body > </ html > |
Step 14: Create the register.html file in templates folder and paste the below code.
HTML
<!DOCTYPE html> < html > < head > < title >User Registration</ title > < style > body { font-family: Arial, Helvetica, sans-serif; background-color: #f2f2f2; } .container { background-color: #fff; border-radius: 5px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); padding: 20px; margin: 0 auto; max-width: 400px; } .form-group { margin-bottom: 15px; } label { display: block; font-weight: bold; } input[type="text"], input[type="email"], input[type="tel"], input[type="password"] { width: 100%; padding: 7px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 3px; } input[type="submit"] { background-color: #007BFF; color: #fff; border: none; border-radius: 3px; padding: 10px 20px; cursor: pointer; } </ style > </ head > < body > < div class = "container" > < center >< h2 >User Registration</ h2 ></ center > < form action = "" method = "POST" > {% csrf_token %} < div class = "form-group" > < label for = "name" >Name:</ label > < input type = "text" id = "name" name = "name" required> </ div > < div class = "form-group" > < label for = "email" >Email:</ label > < input type = "email" id = "email" name = "email" required> </ div > < div class = "form-group" > < label for = "phone" >Phone:</ label > < input type = "tel" id = "phone" name = "phone" required> </ div > < div class = "form-group" > < label for = "password" >Password:</ label > < input type = "password" id = "password" name = "password" required> </ div > < center >< input type = "submit" value = "Register" ></ center > </ form > </ div > </ body > </ html > |
Step 15: Create the applybid.html file in templates folder and paste the below code.
HTML
<!DOCTYPE html> < html > < head > < title >Auction Item Form</ title > < style > body { font-family: Arial, Helvetica, sans-serif; background-color: #f2f2f2; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } .form-container { background-color: #ffffff; border: 1px solid #ccc; border-radius: 5px; padding: 100px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); } .form-container h2 { text-align: center; } .form-container label, .form-container input, .form-container textarea { display: block; margin-bottom: 15px; } .form-container input, .form-container textarea { width: 100%; padding: 10px; border: 1px solid #ccc; border-radius: 3px; } .form-container input[type="submit"] { background-color: #007BFF; color: #fff; border: none; border-radius: 3px; padding: 10px 20px; cursor: pointer; } </ style > </ head > < body > < div class = "form-container" > < h2 >Auction Participation Form </ h2 > < form method = "POST" > {% csrf_token %} < div > < label for = "item_name" >Item Name:</ label > < input type = "text" id = "item_name" name = "item_name" placeholder = "{{item.item_name}}" readonly> </ div > < div > < label for = "description" >Description:</ label > < textarea id = "description" name = "description" rows = "3" placeholder = "{{item.desc}}" readonly></ textarea > </ div > < div > < label for = "basic_amount" >Basic Amount:</ label > < input type = "number" id = "basic_amount" name = "basic_amount" placeholder = "{{item.basic_amount}}" readonly> </ div > < div > < label for = "start_date" >Start Date:</ label > < input type = "text" id = "start_date" name = "start_date" placeholder = "{{item.start_date}}" readonly> </ div > < div > < label for = "end_date" >End Date:</ label > < input type = "text" id = "end_date" name = "end_date" placeholder = "{{item.end_date}}" readonly> </ div > < div > < label for = "max_bid" >Max Bid:</ label > < input type = "number" id = "max_bid" name = "max_bid" min = "{{item.basic_amount}}" required> </ div > < div > < input type = "submit" value = "Submit" > </ div > </ form > </ div > </ body > </ html > |
Step :16 Open the Shell and run the following commands
Python manage.py makemigrations
python manage.py migrate
python manage.py runserver
Step: 17 Open the Browser and run the server.
Contact Us