如何使用Django(python)实现 Android 的服务器端
在这篇攻略中,我们将会详细介绍如何在 Django 中构建一个 Android 服务器端应用程序。这个过程包括以下步骤:
- 创建 Django 项目并配置数据库连接
- 创建 Django App
- 数据库模型(Model)设计
- 编写 API 视图(Views)
- 视图测试
- 使用 Django REST Framework 实现 CRUD 操作
- 集成 Token 认证
- 部署 Django 应用
下面将分别对每一步操作进行说明和示例演示。
- 创建 Django 项目并配置数据库连接
首先需要安装 Django。在命令行中输入以下命令:
pip install django
创建 Django 项目:
django-admin startproject android_server
在 "android_server/settings.py" 文件中配置数据库设置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'database_name',
'USER': 'username',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
- 创建 Django App
在 Django 项目中,App 是用来对应应用程序的特定功能的。例如,我们可以将用户身份验证放在一个 App 中,将个人资料管理放在另一个 App 中。创建 App 的命令如下:
python manage.py startapp api
- 数据库模型(Model)设计
在 Django 中,Model 是用来定义数据结构和表之间的关系的类。我们需要通过 Model 来定义数据表。
# api/models.py
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=255)
author = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
- 编写 API 视图(Views)
APIView 是 Django 提供的视图类,用来处理 HTTP 请求,接收和发送数据。在这个步骤中,我们使用视图类来实现以下功能:
- 获取所有书籍
- 获取单个书籍
- 创建新书籍
- 更新书籍
- 删除书籍
# api/views.py
from django.http import JsonResponse
from rest_framework.views import APIView
from .models import Book
class BookView(APIView):
def get(self, request):
books = Book.objects.all()
data = [{
'id': book.id,
'name': book.name,
'author': book.author,
'created_at': book.created_at,
'updated_at': book.updated_at,
} for book in books]
return JsonResponse({'data': data})
def post(self, request):
name = request.data.get('name')
author = request.data.get('author')
book = Book.objects.create(name=name, author=author)
return JsonResponse({'data': {
'id': book.id,
'name': book.name,
'author': book.author,
'created_at': book.created_at,
'updated_at': book.updated_at,
}})
def get_object(self, book_id):
try:
return Book.objects.get(id=book_id)
except Book.DoesNotExist:
return None
def get(self, request, book_id):
book = self.get_object(book_id)
if not book:
return JsonResponse({'error': 'Book not found'})
data = {
'id': book.id,
'name': book.name,
'author': book.author,
'created_at': book.created_at,
'updated_at': book.updated_at,
}
return JsonResponse({'data': data})
def put(self, request, book_id):
book = self.get_object(book_id)
if not book:
return JsonResponse({'error': 'Book not found'})
book.name = request.data.get('name', book.name)
book.author = request.data.get('author', book.author)
book.save()
data = {
'id': book.id,
'name': book.name,
'author': book.author,
'created_at': book.created_at,
'updated_at': book.updated_at,
}
return JsonResponse({'data': data})
def delete(self, request, book_id):
book = self.get_object(book_id)
if not book:
return JsonResponse({'error': 'Book not found'})
book.delete()
return JsonResponse({'message': 'Book deleted successfully'})
- 视图测试
为了检查 API 的操作是否可以正常工作,我们需要编写测试用例来测试接口。使用以下代码测试视图:
# api/tests.py
from django.test import TestCase, Client
from django.urls import reverse
from rest_framework import status
from rest_framework.test import APITestCase, APIClient
from .models import Book
from .views import BookView
class BookModelTest(TestCase):
def setUp(self):
self.book = Book.objects.create(
name='Test book title',
author='Test book author'
)
def test_book_model(self):
old_count = Book.objects.count()
new_book = Book.objects.create(
name='New book title',
author='New book author'
)
new_count = Book.objects.count()
self.assertNotEqual(old_count, new_count)
- 使用 Django REST Framework 实现 CRUD 操作
Django REST Framework 是 Django 中一款强大且灵活的工具,可以帮助我们轻松构建 API。
# api/views.py
from rest_framework.generics import RetrieveUpdateDestroyAPIView, ListCreateAPIView
from .models import Book
from .serializers import BookSerializer
class BookListAPIView(ListCreateAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
class BookDetailAPIView(RetrieveUpdateDestroyAPIView):
queryset = Book.objects.all()
serializer_class = BookSerializer
# api/serializers.py
from rest_framework import serializers
from .models import Book
class BookSerializer(serializers.ModelSerializer):
class Meta:
model = Book
fields = [
'id', 'name', 'author', 'created_at', 'updated_at'
]
- 集成 Token 认证
我们需要将认证添加到 API 中以确保安全性。
# android_server/settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}
# api/views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
class BookView(APIView):
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
# ...
- 部署 Django 应用
为了部署 Django 应用,你可以使用 Nginx 和 Gunicorn。接下来我们使用 docker 部署:
FROM python:3.7-alpine
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /usr/src/app
RUN pip install --upgrade pip
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "android_server.wsgi", "--bind", "0.0.0.0:8000"]
以上就是基本操作步骤以及示例代码,可以根据需要进行修改。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用Django(python)实现android的服务器端 - Python技术站