首页 > 解决方案 > 如何使用注册和登录制作 Django API

问题描述

我正在尝试在 Django 中创建一个 API,仅在用户登录时才将员工信息作为 JSON 返回。

我的问题是,如何在不使用 html 和表单的情况下进行用户注册和登录选项?有没有办法让我创建一个注册选项,接收客户端通过 JSON 发送的输入。例如,对 localhost:example/register/ 的 POST 请求包含:

{"username" : "examle", "email" : "example", "password" : "example", "password2" : "example"}?

这将如何在 views.py 中实现?

任何帮助,将不胜感激。谢谢你。

标签: djangoapi

解决方案


是的,有一种方法,Django Rest Framework 几乎包含了你需要的一切。

要回答有关登录的第一个问题,您将添加一个权限类以仅允许经过身份验证的人访问。

要回答关于注册的 API 问题,您需要在任何相关的 URL 文件中创建一个 API 端点;我把我的用户应用程序:

urlpatterns = [
    path('register/', register_user_view, name="register"),
...
]

您需要创建一个视图和序列化程序来摄取您发送的 JSON:

@api_view(['POST',])
def register_user_view(request):
    if request.method == 'POST':
        serializer = RegistrationSerializer(data=request.data)
        data = {}
        if serializer.is_valid():
            account = serializer.save()
            data['response'] = "successfully registered a new user."
            data['email'] = account.email
            data['response'] = account.username
        else:
            data = serializer.errors
            # data = serializer.data
        return Response(data)

序列化器:

class RegistrationSerializer(serializers.ModelSerializer):

    password2 = serializers.CharField(style={'input_type': 'password'}, write_only=True)

    class Meta:
        model = CustomUser
        fields = ['email', 'username', 'password', 'password2']
        extra_kwargs = {
            'password': {'write_only': True}
        }

    def save(self):
        account = CustomUser(
            email=self.validated_data['email'],
            username=self.validated_data['username'],
        )
        password = self.validated_data['password']
        password2 = self.validated_data['password2']

        if password != password2:
            raise serializers.ValidationError({'password': 'Passwords do not match!'})

        account.set_password(password)
        account.save()
        return account

推荐阅读