首页 > 解决方案 > 集成时事通讯注册的 Django 服务器错误

问题描述

我在将我的 mailchimp 注册集成到我的 Django 服务器时遇到问题。我使用 Django 作为服务器,然后使用 react native 将它连接到我的前端。转到此网址(http://127.0.0.1:8000/subscribe_email)时,我收到以下错误:

AssertionError at /subscribe_email
'MailSubscriptionAPIView' should either include a `serializer_class` attribute, or override the `get_serializer_class()` method.

我究竟做错了什么?我只想能够使用 post 方法来订阅用户。

这是我的意见.py

# Mailchimp Settings
MAILCHIMP_API_KEY = settings.MAILCHIMP_API_KEY
MAILCHIMP_DATA_CENTER = settings.MAILCHIMP_DATA_CENTER
MAILCHIMP_LIST_ID = settings.MAILCHIMP_EMAIL_LIST_ID


class MailSubscriptionAPIView(GenericAPIView):

    def subscribe_email(email):

        mailchimp = Client()
        mailchimp.set_config({
            "api_key": MAILCHIMP_API_KEY,
            "server": MAILCHIMP_DATA_CENTER
        })
        member_info = {
            "email_address": email,
            "status": "subscribed",
        }
        try:
            mailchimp.lists.add_list_member(MAILCHIMP_LIST_ID, member_info)
        except ApiClientError as error:
            print(error.text)

    def post(self, request, *args, **kwargs):
        email = request.data['email']
        MailSubscriptionAPIView.subscribe_email(email)
        return Response({
                "status_code": status.HTTP_200_OK,
                "message": "Mail added to mailchimp"
            })

网址.py

urlpatterns = [
    path('', include(router.urls)),
    path('subscribe_email', MailSubscriptionAPIView.as_view(), name= 'subscribe-email' ),
]

任何帮助表示赞赏!

标签: djangoserializationdjango-rest-framework

解决方案


在创建GenricAPIView时,您应该提供一个序列化程序类。序列化器可以在里面以多种方式使用GenricAPIView,一个简单的例子是:

class MailSubscriptionAPIView(GenericAPIView):
    # Here, MailSerializer is a made-up name
    # You should create a serializer class that serializes
    # the model or some custom fields that you need
    serializer_class = MailSerializer

    def subscribe_email(email):

        mailchimp = Client()
        mailchimp.set_config({
            "api_key": MAILCHIMP_API_KEY,
            "server": MAILCHIMP_DATA_CENTER
        })
        member_info = {
            "email_address": email,
            "status": "subscribed",
        }
        try:
            mailchimp.lists.add_list_member(MAILCHIMP_LIST_ID, member_info)
        except ApiClientError as error:
            print(error.text)

    def post(self, request, *args, **kwargs):
        email = request.data['email']
        MailSubscriptionAPIView.subscribe_email(email)
        return Response({
                "status_code": status.HTTP_200_OK,
                "message": "Mail added to mailchimp"
            })

考虑到您有一个名为 的模型Mail,Serializer 类应该是这样的:

from rest_framework.serializers import ModelSerializer

# Considering that you have a model called Mail

class MailSerializer(ModelSerializer):
    class Meta:
        model = Mail
        fields = "__all__"

推荐阅读