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请求中的邮箱和密码,并使用
authenticate
和
login
函数进行身份验证。在
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来测试这些接口。请注意,为了保证接口的安全性,你可能需要添加额外的身份验证和输入验证等功能。