Django——DRF 登录 注册

首先,在你的应用程序目录中的views.py文件中编写以下内容:

from rest_framework.decorators import api_view
from rest_framework.response import Response
from django.contrib.auth import authenticate, login
from .serializers import UserSerializer

@api_view(['POST'])
def login_view(request):
    email = request.data.get('email')
    password = request.data.get('password')
    user = authenticate(email=email, password=password)

    if user is not None:
        login(request, user)
        serializer = UserSerializer(user)
        return Response(serializer.data)
    else:
        return Response({'error': 'Invalid credentials'}, status=400)

@api_view(['POST'])
def signup_view(request):
    serializer = UserSerializer(data=request.data)

    if serializer.is_valid():
        user = serializer.save()
        login(request, user)
        return Response(serializer.data, status=201)
    else:
        return Response(serializer.errors, status=400)

在此示例中,我们使用了DRF的@api_view装饰器来定义API视图函数。在login_view函数中,我们通过request.data获取POST请求中的邮箱和密码,并使用authenticatelogin函数进行身份验证。在signup_view函数中,我们使用DRF的序列化器(Serializer)来处理用户数据,并保存新用户。

接下来,在你的应用程序目录中创建一个serializers.py文件,并编写以下内容:

from rest_framework import serializers
from django.contrib.auth import get_user_model

User = get_user_model()

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'email', 'password']
        extra_kwargs = {'password': {'write_only': True}}

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user

在此示例中,我们使用DRF的ModelSerializer来定义用户序列化器。我们指定了模型(通过get_user_model()获取用户模型)和要包含的字段列表。通过设置write_only=True,我们确保不会将密码返回给客户端。

最后,在你的应用程序目录中的urls.py文件中定义URL路由。以下是一个示例:

from django.urls import path
from . import views

urlpatterns = [
    path('login/', views.login_view, name='login'),
    path('signup/', views.signup_view, name='signup'),
]

这样就完成了登录和注册接口的开发。你可以使用工具如Postman来测试这些接口。请注意,为了保证接口的安全性,你可能需要添加额外的身份验证和输入验证等功能。

posted @ 2023-09-04 15:31  .笨蛋小韩  阅读(308)  评论(0编辑  收藏  举报