Skip to main content

会员卡接口实现

本节课我们将实现会员卡模块的接口。具体流程如下:

  1. 创建会员卡模型;
  2. 迁移模型到数据库;
  3. 创建会员卡接口,并设置权限;
  4. 创建会员卡的序列化类;
  5. 注册会员卡模型到后台;
  6. 测试会员卡接口。

创建会员卡模型

首先,我们需要在trade应用中创建会员卡模型。在models.py文件中添加以下代码:

dx_movie/trade/models.py
 from django.db import models

# Create your models here.
from django.db import models
from account.models import Profile

class Card(models.Model):
card_name = models.CharField("会员卡名称",max_length=100, unique=True)
card_price = models.DecimalField("价格", max_digits=8, decimal_places=2)
duration = models.IntegerField("有效天数")
info = models.CharField("会员卡简介",max_length=200, null=True, blank=True)
created_at = models.DateTimeField(auto_now_add=True, editable=True, verbose_name='创建时间')
updated_at = models.DateTimeField(auto_now=True, editable=True, verbose_name='更新时间')

class Meta:
db_table = 'card'
verbose_name = "会员卡信息"
verbose_name_plural = verbose_name

以上代码定义了一个Card模型,包含了会员卡的名称、价格、有效期间、简介、创建时间和修改时间等字段。

接下来将模型追加到应用。在settings.py中,找到INSTALLED_APPS, 配置如下:

dx_movie/dx_movie/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'rest_framework.authtoken',
'djoser',
'django_filters',
'movie',
'account',
'trade',
]

迁移模型

在终端中执行以下命令,将模型迁移到数据库:

python manage.py makemigrations
python manage.py migrate

创建完成后,数据库中就会新增一个card表,字段如下所示。

图63-card表字段

创建会员卡接口

trade/views.py文件中,创建会员卡的接口。代码如下:

dx_movie/trade/views.py
from rest_framework import viewsets
from rest_framework.permissions import IsAdminUser, IsAuthenticated, SAFE_METHODS
from .models import Card
from .permissions import IsAdminUserOrReadOnly
from .serializers import CardSerializer

# Create your views here.
class CardViewSet(viewsets.ModelViewSet):
queryset = Card.objects.all()
serializer_class = CardSerializer
permission_classes = [IsAdminUserOrReadOnly]

以上代码定义了一个名为CardViewSet的类,继承自viewsets.ModelViewSet。其中,queryset属性指定了该接口查询的数据是Card模型的所有数据,serializer_class属性指定了使用的序列化类是CardSerializerpermission_classes属性指定了该接口的访问权限控制类为IsAdminUserOrReadOnly,该类定义了只有管理员可以执行增删改的操作,其他用户只能进行查看操作。

CardViewSet中使用了CardSerializer, 所以需要在trade/serializers.py中创建CardSerializer类,代码如下:

dx_movie/trade/serializers.py
from rest_framework import serializers
from .models import Card, Order

class CardSerializer(serializers.ModelSerializer):

class Meta:
model = Card
fields = '__all__'

此外,CardViewSet设置了权限,我们可以模仿电影模块中的权限设置。 在dx_movie/trade/下新建一个permissions.py文件,代码如下:

dx_movie/trade/permissions.py
from rest_framework import permissions

class IsAdminUserOrReadOnly(permissions.BasePermission):
def has_permission(self, request, view):
if request.method in permissions.SAFE_METHODS:
return True
return request.user.is_superuser

注册card路由

在dx_movie/dx_movie

dx_movie/dx_movie/url.py
from trade import views as trade_views

router.register(r'cards', trade_views.CardViewSet)

注册会员卡模型到后台

trade/admin.py文件中,注册会员卡模型到后台。代码如下:

dx_movie/trade/admin.py
from django.contrib import admin
from .models import Card

admin.site.register(Card)

以上代码通过admin.site.register(Card)Card模型注册到后台。

接下里可以在后台添加会员卡数据。 访问后台登录页面:http://127.0.0.1:8000/admin

warning

注意这里端口是8000,而不是8080, 因为我们的django admin 是8000端口访问的后台。

后台登录页效果。

图63-登录后台

图63-点击会员卡信息

点击添加会员卡信息,如下图所示。

图63-添加会员卡信息

保存成功后效果如下图所示。

图63-保存会员卡

info

会员卡信息显示的是Card对象,小伙伴可以参照课程里介绍的django后台知识,来实现会员卡信息的展示。这里就不再赘述了。

测试会员卡接口

我们可以使用Postman等工具来测试会员卡接口。具体操作如下:

  1. 创建一个POST请求,URL为/api/cards/,请求体中包含会员卡的相关信息;
  2. 使用管理员用户进行测试,设置请求头中的Authorization为管理员用户的JWT Token;
  3. 发送请求,查看接口返回的会员卡信息。

图63-会员卡列表接口

/api/cards/的接口权限是IsAdminUserOrReadOnly, 所以,需要使用管理员账号才能实现增删改的操作。

图63-非管理员用户报错

使用管理员用户添加会员,运行效果如下图所示。

图63-管理员用户添加记录

希望通过这节课的学习,你已经掌握了创建会员卡模型、实现会员卡接口以及测试接口的方法。下节课我们将继续学习更多内容,敬请期待!