Web Development
Python Django REST API Development
Pham Van D
Backend Developer
9 tháng 1, 202509-01
8p
1,156 lượt xem1k
#Python#Django#REST API#Backend
Python Django REST API Development
Xây dựng REST API mạnh mẽ với Django REST Framework.
Setup Project
Bash
pip install django djangorestframework
django-admin startproject myapi
cd myapi
python manage.py startapp users
Models và Serializers
Python
# models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
class User(AbstractUser):
email = models.EmailField(unique=True)
phone = models.CharField(max_length=15, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
class Post(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
author = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
ordering = ['-created_at']
Python
# serializers.py
from rest_framework import serializers
from .models import User, Post
class UserSerializer(serializers.ModelSerializer):
password = serializers.CharField(write_only=True)
class Meta:
model = User
fields = ['id', 'username', 'email', 'phone', 'password']
def create(self, validated_data):
password = validated_data.pop('password')
user = User.objects.create_user(**validated_data)
user.set_password(password)
user.save()
return user
class PostSerializer(serializers.ModelSerializer):
author = UserSerializer(read_only=True)
class Meta:
model = Post
fields = ['id', 'title', 'content', 'author', 'created_at']
ViewSets và Authentication
Python
# views.py
from rest_framework import viewsets, permissions, status
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework_simplejwt.tokens import RefreshToken
from django.contrib.auth import authenticate
class UserViewSet(viewsets.ModelViewSet):
queryset = User.objects.all()
serializer_class = UserSerializer
permission_classes = [permissions.IsAuthenticated]
@action(detail=False, methods=['post'], permission_classes=[permissions.AllowAny])
def register(self, request):
serializer = self.get_serializer(data=request.data)
if serializer.is_valid():
user = serializer.save()
refresh = RefreshToken.for_user(user)
return Response({
'user': UserSerializer(user).data,
'tokens': {
'refresh': str(refresh),
'access': str(refresh.access_token),
}
}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
permission_classes = [permissions.IsAuthenticated]
def perform_create(self, serializer):
serializer.save(author=self.request.user)
Best Practice: Luôn validate input data và handle errors properly!
Kết luận
Django REST Framework cung cấp tools mạnh mẽ để build API scalable.
Pham Van D
Backend Developer chuyên Python/Django với 6+ năm kinh nghiệm.