乐趣区

「Django开发」django美多商城项目完整开发4.0第11篇:收货地址,安装(附代码文档) 技术风格,专业语调。字数40-60个字。

「Django 开发」Django 美多商城项目完整开发 4.0 第 11 篇:收货地址,安装(附代码文档)

在前面的文章中,我们已经完成了美多商城的基本功能的开发,包括用户注册、登录、商品浏览、搜索、购物车等。在本文章中,我们将继续开发收货地址的功能。

收货地址是一个非常重要的功能,它允许用户在下单时选择他们的收货地址,并且可以管理多个收货地址。在本文章中,我们将会详细介绍如何开发这个功能。

  1. 创建收货地址模型

首先,我们需要创建一个新的模型来存储收货地址的信息。我们可以在 apps.py 文件中添加如下代码:

“`python
from django.db import models
from django.contrib.auth.models import User

class Address(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=100)
phone = models.CharField(max_length=100)
address = models.CharField(max_length=500)
zip_code = models.CharField(max_length=100)
is_default = models.BooleanField(default=False)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
“`

这里我们创建了一个 Address 模型,它有以下字段:

接下来,我们需要创建一个新的 URL 和视图来处理收货地址的管理。我们可以在 urls.py 文件中添加如下代码:

“`python
from django.urls import path
from .views import AddressListView, AddressCreateView, AddressUpdateView, AddressDeleteView

urlpatterns = [
path(‘address/’, AddressListView.as_view(), name=’address_list’),
path(‘address/create/’, AddressCreateView.as_view(), name=’address_create’),
path(‘address//update/’, AddressUpdateView.as_view(), name=’address_update’),
path(‘address//delete/’, AddressDeleteView.as_view(), name=’address_delete’),
]
“`

这里我们创建了四个新的 URL,分别对应了 AddressListView、AddressCreateView、AddressUpdateView、AddressDeleteView 这四个视图。

然后,我们需要创建这四个视图,分别在 views.py 文件中添加如下代码:

“`python
from django.shortcuts import render, get_object_or_404, redirect
from django.views.generic import ListView, CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .forms import AddressForm
from .models import Address
from django.contrib.auth.mixins import LoginRequiredMixin

class AddressListView(LoginRequiredMixin, ListView):
model = Address
template_name = ‘address_list.html’
context_object_name = ‘addresses’
paginate_by = 10

def get_queryset(self):
    queryset = super().get_queryset()
    queryset = queryset.filter(user=self.request.user)
    queryset = queryset.order_by('-created_at')
    return queryset

class AddressCreateView(LoginRequiredMixin, CreateView):
model = Address
form_class = AddressForm
template_name = ‘address_create.html’
success_url = reverse_lazy(‘address_list’)

def form_valid(self, form):
    form.instance.user = self.request.user
    return super().form_valid(form)

class AddressUpdateView(LoginRequiredMixin, UpdateView):
model = Address
form_class = AddressForm
template_name = ‘address_update.html’
success_url = reverse_lazy(‘address_list’)

class AddressDeleteView(LoginRequiredMixin, DeleteView):
model = Address
template_name = ‘address_delete.html’
success_url = reverse_lazy(‘address_list’)

def get_object(self):
    obj = super().get_object()
    if obj.user != self.request.user:
        raise Http404
    return obj

“`

这里我们创建了四个新的视图,分别对应了 AddressListView、AddressCreateView、AddressUpdateView、AddressDeleteView 这四个视图。

  1. 创建收货地址列表页面

接下来,我们需要创建一个新的 HTML 文件来显示收货地址列表。我们可以在 templates 文件夹中创建一个新的文件,并在 address_list.html 文件中添加如下代码:

“`html
{% extends ‘base.html’ %}

{% block content %}

收货地址列表

{% if addresses %}

{% for address in addresses %}

{% endfor %}

收货人 电话 地址 邮编 默认 操作
{{address.name}} {{address.phone}} {{address.address}} {{address.zip_code}} {{address.is_default}} 编辑
删除

{% if addresses.paginator.num_pages > 1 %}

退出移动版