📜  Django 项目——创建一个展示产品的基本电子商务网站(1)

📅  最后修改于: 2023-12-03 15:14:44.662000             🧑  作者: Mango

Django 项目——创建一个展示产品的基本电子商务网站

本文将介绍如何使用 Django 创建一个简单的电子商务网站,用于展示产品信息并实现购买功能。Django 是一个基于 Python 的 Web 框架,可以快速开发高质量的 Web 应用,其强大的功能和易于使用的 API 使得开发变得更加高效和方便。

环境准备

在开始之前,您需要在您的机器上安装 Django,以及相关依赖的库。您可以使用 pip 包管理工具来安装这些依赖:

pip install Django
pip install django-crispy-forms
创建 Django 项目

首先,我们需要创建一个 Django 项目。在命令行中输入以下命令:

django-admin startproject myshop

这将创建一个名为 myshop 的 Django 项目。然后,进入 myshop 目录并创建一个新的应用程序:

cd myshop
python manage.py startapp products

这将创建一个名为 products 的 Django 应用程序,用于处理展示产品信息的页面和逻辑。

设计数据库模型

在我们开始实现页面和逻辑之前,我们需要定义一个数据库模型来存储产品信息。我们将创建一个名为 Product 的模型,其中包含名称、价格和描述等字段。在 products/models.py 文件中添加以下代码:

from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=200)
    price = models.DecimalField(max_digits=10, decimal_places=2)
    description = models.TextField()

这将创建一个名为 Product 的模型,其中包含三个字段:name、price 和 description。

编写视图和模板

接下来,我们需要编写视图和模板来显示产品信息。在 products/views.py 文件中添加以下代码:

from django.shortcuts import render
from .models import Product

def product_list(request):
    products = Product.objects.all()
    return render(request, 'products/list.html', {'products': products})

这将创建一个名为 product_list 的视图,用于显示所有产品信息。然后,在 templates/products 目录下创建一个名为 list.html 的模板文件,并添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>Products</h1>

  <ul>
    {% for product in products %}
      <li>{{ product.name }} - {{ product.price }}</li>
    {% endfor %}
  </ul>
{% endblock content %}

这将创建一个包含产品名称和价格的简单列表。要使模板起作用,您需要在 myshop/settings.py 文件中的 TEMPLATES 配置部分中添加以下内容:

'DIRS': [os.path.join(BASE_DIR, 'templates')],
创建购物车功能

现在我们已经可以展示产品信息了,接下来我们需要添加购物车功能。在 Django 中,使用 session 来实现购物车功能非常简单。我们将创建一个名为 cart 的 session 变量,用于存储用户选择的产品信息。

首先,我们需要在 views.py 文件中添加一个新的视图,用于将产品添加到购物车中:

from django.shortcuts import render, redirect
from .models import Product

def add_to_cart(request, product_id):
    product = Product.objects.get(id=product_id)
    cart = request.session.get('cart', {})
    cart[product.id] = cart.get(product.id, 0) + 1
    request.session['cart'] = cart
    return redirect('product_list')

这将创建一个名为 add_to_cart 的视图,用于将产品添加到购物车中。然后,在 list.html 模板中添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>Products</h1>

  <ul>
    {% for product in products %}
      <li>{{ product.name }} - {{ product.price }} <a href="{% url 'add_to_cart' product.id %}">Add to cart</a></li>
    {% endfor %}
  </ul>
{% endblock content %}

这将添加一个名为“Add to cart”的链接,用户可以单击以将产品添加到购物车中。要使链接有效,我们还需要在 urls.py 文件中添加以下内容:

from django.urls import path
from .views import product_list, add_to_cart

urlpatterns = [
    path('', product_list, name='product_list'),
    path('add-to-cart/<int:product_id>/', add_to_cart, name='add_to_cart'),
]

这将创建一个名为“add_to_cart”的 URL,用于处理添加产品到购物车中的请求。

展示购物车信息

现在,我们已经可以将产品添加到购物车中了,接下来我们需要创建一个新的视图和模板来显示购物车信息。在 views.py 文件中添加以下代码:

def view_cart(request):
    cart = request.session.get('cart', {})
    products = Product.objects.filter(id__in=cart.keys())
    cart_items = []
    for product in products:
        cart_items.append({'product': product, 'quantity': cart[str(product.id)]})
    return render(request, 'products/cart.html', {'cart_items': cart_items})

这将创建一个名为 view_cart 的视图,用于显示购物车中的产品信息。然后,在 templates/products 目录下创建一个名为 cart.html 的模板文件,并添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>Shopping Cart</h1>

  <ul>
    {% for item in cart_items %}
      <li>{{ item.product.name }} - {{ item.quantity }}</li>
    {% endfor %}
  </ul>
{% endblock content %}

这将创建一个简单的列表,其中包含产品名称和数量。要使视图和模板起作用,我们还需要在 urls.py 文件中添加以下内容:

from .views import product_list, add_to_cart, view_cart

urlpatterns = [
    path('', product_list, name='product_list'),
    path('add-to-cart/<int:product_id>/', add_to_cart, name='add_to_cart'),
    path('cart/', view_cart, name='view_cart'),
]

这将创建一个名为“view_cart”的 URL,用于处理显示购物车信息的请求。

实现结账功能

现在我们已经可以展示购物车中的产品信息了,接下来我们需要添加结账功能。我们将创建一个名为 checkout 的视图,用于处理结账,并在模板中添加一个简单的表单,用户可以在其中输入购买者的姓名和地址信息。在 views.py 文件中添加以下代码:

from .forms import CheckoutForm

def checkout(request):
    if request.method == 'POST':
        form = CheckoutForm(request.POST)
        if form.is_valid():
            request.session['cart'] = {}
            return redirect('checkout_complete')
    else:
        form = CheckoutForm()
    return render(request, 'products/checkout.html', {'form': form})

这将创建一个名为 checkout 的视图,用于处理结账请求。然后,在 forms.py 文件中创建一个名为 CheckoutForm 的表单类,并添加以下代码:

from django import forms

class CheckoutForm(forms.Form):
    name = forms.CharField(max_length=200)
    address = forms.CharField(widget=forms.Textarea)

这将创建一个名为 CheckoutForm 的表单类,其中包含购买者的姓名和地址信息。最后,在 templates/products 目录下创建一个名为 checkout.html 的模板文件,并添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>Checkout</h1>

  <form method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Place Order">
  </form>
{% endblock content %}

这将创建一个简单的表单,用户可以在其中输入购买者的姓名和地址信息以完成结账。要使视图和模板起作用,您需要在 urls.py 文件中添加以下内容:

from .views import product_list, add_to_cart, view_cart, checkout, checkout_complete

urlpatterns = [
    path('', product_list, name='product_list'),
    path('add-to-cart/<int:product_id>/', add_to_cart, name='add_to_cart'),
    path('cart/', view_cart, name='view_cart'),
    path('checkout/', checkout, name='checkout'),
    path('checkout/complete/', checkout_complete, name='checkout_complete'),
]

这将创建两个名为“checkout”和“checkout_complete”的 URL。您还需要在 urls.py 文件中添加以下内容来处理“checkout_complete” URL:

def checkout_complete(request):
    return render(request, 'products/checkout_complete.html')

这将创建一个名为 checkout_complete 的视图,用于显示为购物者感谢信息。最后,在 templates/products 目录下创建一个名为 checkout_complete.html 的模板文件,并添加以下代码:

{% extends 'base.html' %}

{% block content %}
  <h1>Thank you for your order</h1>
{% endblock content %}
总结

本文介绍了如何使用 Django 创建一个简单的电子商务网站,用于展示产品信息和实现购买功能。我们首先创建了一个数据库模型来存储产品信息,然后编写了视图和模板来显示这些信息。接下来,我们添加了购物车功能,并实现了结账功能,使用户可以购买所选产品。Django 为我们提供了强大的功能和易于使用的 API,使得开发变得更加高效和方便。如果您想深入了解 Django,请访问官方文档:https://docs.djangoproject.com/zh-hans/3.1/。