如何使用Django(python)实现android的服务器端

如何使用Django(python)实现 Android 的服务器端

在这篇攻略中,我们将会详细介绍如何在 Django 中构建一个 Android 服务器端应用程序。这个过程包括以下步骤:

  1. 创建 Django 项目并配置数据库连接
  2. 创建 Django App
  3. 数据库模型(Model)设计
  4. 编写 API 视图(Views)
  5. 视图测试
  6. 使用 Django REST Framework 实现 CRUD 操作
  7. 集成 Token 认证
  8. 部署 Django 应用

下面将分别对每一步操作进行说明和示例演示。

  1. 创建 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',
    }
}
  1. 创建 Django App

在 Django 项目中,App 是用来对应应用程序的特定功能的。例如,我们可以将用户身份验证放在一个 App 中,将个人资料管理放在另一个 App 中。创建 App 的命令如下:

python manage.py startapp api
  1. 数据库模型(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)
  1. 编写 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'})
  1. 视图测试

为了检查 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)
  1. 使用 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'
        ]
  1. 集成 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]

    # ...
  1. 部署 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技术站

(0)
上一篇 2023年5月15日
下一篇 2023年5月15日

相关文章

  • django-rest-framework解析请求参数

    前言 前面的文章中编写了接口, 调通了接口文档. 接口文档可以直接填写参数进行请求, 接下来的问题是如何接受参数, 由于请求方式与参数序列化形式的不同, 接收参数的方式也有不同. 前提条件 服务端我们使用django-rest-framework编写接口. class ReturnJson(APIView): coreapi_fields=( DocPara…

    Django 2023年4月12日
    00
  • Django中Form表单之字段详解

      1、背景     平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等。Django中的form表单就能够帮我们去实现这些功能,比较便捷。   2、Django form表单的功能       1、生成页面可执行的HTML标签       2、对应户的数据进行校验       3、保留上次输入的…

    Django 2023年4月11日
    00
  • Django 生命周期

    Django 生命周期为: 用户请求发起对url的请求→ wsgiref模块→django中间件→django(视图url对应函数,模型数据库交互,html模版渲染)→django中间件 → wsgiref模块 →用户看到的页面。   from wsgiref.simple_server import make_server def RunServer(en…

    Django 2023年4月11日
    00
  • django模板语法学习(模板变量,for循环,if语句)

    首先通过django内置的模板需要达到的效果:数据加模板就形成了html页面。 如图: 总所周知,django的mvt模式,是属于前后端不分离的模式。所有得先在templates目录下新建一个personinfo.html文件 如图: 模板内容如下: <!DOCTYPE html><html lang=”en”><head&gt…

    Django 2023年4月12日
    00
  • Django 学习之CORS

    跨域 跨域指的就是“跨域资源共享(Cross-Origin Resource Sharing, CORS)”,是一个“W3C标准”,当一个资源从与该资源本身所在的服务器的不同域或者不同端口请求一个资源时,就会发起一个跨域HTTP请求。 说到跨域,肯定就要讲一下 同源策略(Same origin policy),该策略是由Netscape(网景)公司在1995…

    Django 2023年4月11日
    00
  • Django之多对多查询与操作方法详解

    Django之多对多查询与操作方法详解 在Django中,多对多关系是非常常见且重要的关系之一,学习多对多查询与操作方法对于开发Django应用程序非常有用。下面将对多对多关系的查询及操作方法进行详细讲解。 多对多查询 多对多查询的核心在于通过中间表进行查询。在Django中,对于多对多关系,会默认生成一个中间表来连接两个相关的模型类。假设有两个模型类Boo…

    Django 2023年5月16日
    00
  • Python – Django – ORM 操作表

    ORM 的对应关系: 类        —>    数据库表对象     —>    数据库行属性     —>    字段   操作数据库表     —>     创建/删除/修改表操作数据库行     —>     数据的增删改查    首先需要自己手动创建一个数据库 在 mysite 的 setting…

    Django 2023年4月10日
    00
  • Django中ORM基本应用与原理解析

    Django中ORM基本应用与原理解析 什么是ORM ORM(Object-relational mapping),即对象关系映射,是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换(ORM技术对应的是关系型数据库)。简单来说,ORM就是一种通过操作对象而非数据库表来操作数据库的技术。 Django的ORM是关系型数据库操作的一个工具…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部