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!
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.
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:
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
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
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
Mở tệp myproject/settings.py
và thêm 'myapp'
và 'rest_framework'
vào danh sách INSTALLED_APPS
:
INSTALLED_APPS = [ ... 'rest_framework', 'myapp', ]
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']
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)
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')), ]
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()
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)
Cập nhật myapp/urls.py
để bao gồm endpoint tải tệp:
urlpatterns += [ path('upload/', FileUploadView.as_view(), name='file-upload'), ]
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')
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)
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ạ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.
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" }
Gửi một yêu cầu POST để đăng nhập:
POST /api/login/ { "username": "testuser", "password": "password123" }
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> }
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ó.