【悟凡】真正意义上的净土重生:只保留核心逻辑
This commit is contained in:
80
backend/users/views.py
Normal file
80
backend/users/views.py
Normal file
@@ -0,0 +1,80 @@
|
||||
from rest_framework import serializers, status, views
|
||||
from rest_framework.response import Response
|
||||
from django.contrib.auth import authenticate, get_user_model
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class LoginSerializer(serializers.Serializer):
|
||||
username = serializers.CharField()
|
||||
password = serializers.CharField()
|
||||
|
||||
|
||||
class LoginView(views.APIView):
|
||||
def post(self, request):
|
||||
serializer = LoginSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
username = serializer.validated_data['username']
|
||||
password = serializer.validated_data['password']
|
||||
|
||||
user = authenticate(username=username, password=password)
|
||||
if not user:
|
||||
return Response(
|
||||
{'detail': '用户名或密码错误'},
|
||||
status=status.HTTP_401_UNAUTHORIZED
|
||||
)
|
||||
|
||||
# 简单 Token(生产环境应该用 JWT)
|
||||
import uuid
|
||||
token = uuid.uuid4().hex
|
||||
|
||||
# 实际项目中应该存储 token 到数据库/缓存
|
||||
# 这里简化处理
|
||||
|
||||
return Response({
|
||||
'token': token,
|
||||
'user': {
|
||||
'id': user.id,
|
||||
'username': user.username,
|
||||
'email': user.email
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
class RegisterSerializer(serializers.Serializer):
|
||||
username = serializers.CharField()
|
||||
email = serializers.EmailField()
|
||||
password = serializers.CharField()
|
||||
|
||||
|
||||
class RegisterView(views.APIView):
|
||||
def post(self, request):
|
||||
serializer = RegisterSerializer(data=request.data)
|
||||
if not serializer.is_valid():
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
try:
|
||||
user = User.objects.create_user(
|
||||
username=serializer.validated_data['username'],
|
||||
email=serializer.validated_data['email'],
|
||||
password=serializer.validated_data['password']
|
||||
)
|
||||
|
||||
import uuid
|
||||
token = uuid.uuid4().hex
|
||||
|
||||
return Response({
|
||||
'token': token,
|
||||
'user': {
|
||||
'id': user.id,
|
||||
'username': user.username,
|
||||
'email': user.email
|
||||
}
|
||||
}, status=status.HTTP_201_CREATED)
|
||||
except Exception as e:
|
||||
return Response(
|
||||
{'detail': str(e)},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
Reference in New Issue
Block a user