Trong thời đại số hóa hiện nay, việc phát triển các ứng dụng web mạnh mẽ và an toàn là điều cần thiết. Django, một trong những framework phổ biến nhất cho Python, cung cấp các công cụ mạnh mẽ để xây dựng ứng dụng web. Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một Django REST API với tính năng tải tệp và xác thực người dùng. Bạn sẽ học cách tạo một hệ thống cho phép người dùng đăng ký, đăng nhập, và tải lên các tệp an toàn, từ đó mở rộng khả năng tương tác của ứng dụng của bạn. Hãy cùng bắt đầu hành trình này để biến ý tưởng của bạn thành hiện thực!

Giới thiệu

Trong hướng dẫn này, bạn sẽ học cách tạo một Django REST API hỗ trợ xác thực người dùng và tải tệp. API này sẽ cho phép người dùng đăng ký, đăng nhập và tải tệp lên một cách an toàn.

Các yêu cầu

Trước khi bắt đầu, hãy đảm bảo rằng bạn đã cài đặt các phần mềm sau trên hệ thống của mình:

  • Python (phiên bản 3.6 hoặc cao hơn)
  • pip (trình quản lý gói Python)

Bước 1: Thiết lập Dự án Django của Bạn

1.1 Cài đặt Django và Django REST Framework

Bắt đầu bằng cách cài đặt Django và Django REST Framework bằng pip. Mở terminal và chạy lệnh sau:

pip install django djangorestframework

1.2 Tạo một Dự án Django Mới

Tạo một dự án Django mới bằng cách chạy các lệnh sau:

django-admin startproject myproject
cd myproject

1.3 Tạo một Ứng dụng Django Mới

Trong dự án của bạn, tạo một ứng dụng nơi chúng ta sẽ triển khai API:

python manage.py startapp myapp

1.4 Cấu hình Cài đặt Dự án của Bạn

Mở tệp myproject/settings.py và thêm 'myapp''rest_framework' vào danh sách INSTALLED_APPS:

INSTALLED_APPS = [
    ...
    'rest_framework',
    'myapp',
]

Bước 2: Xác thực Người dùng

2.1 Tạo một Serializer cho Người dùng

Trong myapp/serializers.py, tạo một serializer cho mô hình Người dùng để xử lý dữ liệu người dùng:

from django.contrib.auth.models import User
from rest_framework import serializers

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['id', 'username', 'email']

2.2 Tạo Các View cho Xác thực

Trong myapp/views.py, triển khai các view cho việc đăng ký và đăng nhập người dùng:

from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from rest_framework import generics
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from .serializers import UserSerializer

class RegisterView(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [AllowAny]

class LoginView(generics.GenericAPIView):
    permission_classes = [AllowAny]

    def post(self, request):
        username = request.data.get("username")
        password = request.data.get("password")
        user = authenticate(username=username, password=password)
        if user is not None:
            return Response({"message": "Login successful"})
        return Response({"message": "Invalid credentials"}, status=400)

2.3 Thiết lập URL

Trong myapp/urls.py, định nghĩa các URL cho các view đăng ký và đăng nhập:

from django.urls import path
from .views import RegisterView, LoginView

urlpatterns = [
    path('register/', RegisterView.as_view(), name='register'),
    path('login/', LoginView.as_view(), name='login'),
]

Sau đó, thêm các URL này vào tệp myproject/urls.py:

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('myapp.urls')),
]

Bước 3: Tính năng Tải tệp

3.1 Tạo một Serializer cho Tải tệp

Trong myapp/serializers.py, thêm một serializer để xử lý việc tải tệp:

from rest_framework import serializers

class FileUploadSerializer(serializers.Serializer):
    file = serializers.FileField()

3.2 Tạo một View cho Tải tệp

Thêm một view trong myapp/views.py để xử lý việc tải tệp:

from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated

class FileUploadView(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        serializer = FileUploadSerializer(data=request.data)
        if serializer.is_valid():
            file = serializer.validated_data['file']
            # Xử lý tệp (ví dụ: lưu tệp)
            return Response({"message": "File uploaded successfully"})
        return Response(serializer.errors, status=400)

3.3 Thiết lập URL cho Tải tệp

Cập nhật myapp/urls.py để bao gồm endpoint tải tệp:

urlpatterns += [
    path('upload/', FileUploadView.as_view(), name='file-upload'),
]

Bước 4: Cấu hình Cài đặt Media

4.1 Cập nhật Cài đặt cho Tệp Media

Trong myproject/settings.py, cấu hình cài đặt media để xử lý việc tải tệp:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

4.2 Phục vụ Tệp Media trong Quá trình Phát triển

Cập nhật myproject/urls.py để phục vụ các tệp media trong quá trình phát triển:

from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Bước 5: Chạy Máy chủ của Bạn

Trước khi chạy máy chủ, hãy áp dụng các lệnh di trú:

python manage.py migrate

Bây giờ khởi động máy chủ:

python manage.py runserver

Bước 6: Kiểm tra API

Bạn có thể sử dụng các công cụ như Postman hoặc cURL để kiểm tra các endpoint API của mình.

6.1 Đăng ký Người dùng

Gửi một yêu cầu POST để đăng ký một người dùng:

POST /api/register/
{
    "username": "testuser",
    "email": "[email protected]",
    "password": "password123"
}

6.2 Đăng nhập

Gửi một yêu cầu POST để đăng nhập:

POST /api/login/
{
    "username": "testuser",
    "password": "password123"
}

6.3 Tải tệp lên

Sau khi đăng nhập, bạn có thể tải tệp lên:

POST /api/upload/
Authorization: Token <your_token>
Content-Type: multipart/form-data
{
    "file": <your_file>
}

Kết luận

Chúc mừng! Bạn đã xây dựng thành công một Django REST API có tính năng xác thực người dùng và tải tệp. Bạn có thể mở rộng API này bằng cách thêm nhiều tính năng khác như xác thực JWT, giải pháp lưu trữ tệp, hoặc các endpoint bổ sung để nâng cao khả năng của nó.