django原生api接口1.1 创建django项目

django-admin startproject drfdemo1

1.2 创建app

django-admin startapp app

1.3 创建数据模型

app/models.py中编写如下代码:

from django.db import modelsclass studentsInfo(models.Model):    name = models.CharField(max_length=12, verbose_name='姓名')    sex = models.CharField(max_length=1, verbose_name='性别')    age = models.IntegerField(verbose_name='年龄')    classroom = models.CharField(max_length=10, verbose_name='教室')    info = models.CharField(max_length=100, verbose_name='个人简介')

1.4 配置环境

drfdemo1/settings.py:

# 后端只提供接口,不使用后台等其他功能,所以将无用功能注释掉可以减轻压力,提高性能INSTALLED_APPS = [    # 'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    # 'django.contrib.messages',    # 'django.contrib.staticfiles',    'app',]# 由于我们在使用post请求提交数据到后台的时候,django会有一个csrftoken验证,这样使用postman工具提交表单数据时就会失败,所以注释掉csrf中间件MIDDLEWARE = [    'django.middleware.security.SecurityMiddleware',    'django.contrib.sessions.middleware.SessionMiddleware',    'django.middleware.common.CommonMiddleware',    # 'django.middleware.csrf.CsrfViewMiddleware',    'django.contrib.auth.middleware.AuthenticationMiddleware',    # 'django.contrib.messages.middleware.MessageMiddleware',    'django.middleware.clickjacking.XFrameOptionsMiddleware',]# 由于是测试,所以不再使用mysql,使用sqlite3比较方便DATABASES = {    'default': {        'ENGINE': 'django.db.backends.sqlite3',        'NAME': BASE_DIR / 'db.sqlite3',    }}# 设置为中文LANGUAGE_CODE = 'zh-hans'

1.5 数据迁移

python manage.py makemigrationpython manage.py migrate

1.6 编写视图代码

app/views.py:

import jsonfrom .models import *from django.views import Viewfrom django.http import JsonResponse"""post /students/ 添加一个学生GET  /students/ 获取所有学生信息GET  /students//获取一个学生信息PUT  /students// 更新一个学生信息DELETE /students// 删除一个学生信息一个路由对应一个视图类,把5个api接口分为两个视图类来写"""# 原生接口class studentView(View):    def post(self, request):        # 1.接受客户端提交的数据        name = request.POST.get("name")        sex = request.POST.get("sex")        age = request.POST.get("age")        classroom = request.POST.get("classroom")        info = request.POST.get("info")        # 2.操作数据库,保存数据        instance = studentsInfo.objects.create(            name=name,            sex=sex,            age=age,            classroom=classroom,            info=info        )        # 3.返回结果        return JsonResponse({            "id": instance.id,            "name": instance.name,            "sex": instance.sex,            "age": instance.age,            "classroom": instance.classroom,            "info": instance.info        }, status=201, json_dumps_params={"ensure_ascii": False})    def get(self, request):        """        获取多个学生信息        """        students_list = studentsInfo.objects.values()        return JsonResponse(data=list(students_list), status=200, safe=False, json_dumps_params={"ensure_ascii": False})class studentInfoView(View):    def get(self, request, pk):        """        获取一条数据        """        try:            instance = studentsInfo.objects.get(id=pk)        except studentsInfo.DoesNotExist:            return JsonResponse(data={"message": "学生不存在"}, status=404)        else:            return JsonResponse({                "id": instance.id,                "name": instance.name,                "sex": instance.sex,                "age": instance.age,                "classroom": instance.classroom,                "info": instance.info            }, status=201, json_dumps_params={"ensure_ascii": False})    def put(self, request, pk):        # 1.接受客户端提交的数据        data = json.loads(request.body)        name = data.get("name")        sex = data.get("sex")        age = data.get("age")        classroom = data.get("classroom")        info = data.get("info")        # 2.操作数据库,修改并保存数据        try:            instance = studentsInfo.objects.get(id=pk)        except studentsInfo.DoesNotExist:            return JsonResponse(data={"message": "学生不存在"}, status=404)        else:            instance.name = name            instance.sex = sex            instance.age = age            instance.classroom = classroom            instance.info = info            instance.save()        # 3.返回结果        return JsonResponse({            "id": instance.id,            "name": instance.name,            "sex": instance.sex,            "age": instance.age,            "classroom": instance.classroom,            "info": instance.info        }, status=201, json_dumps_params={"ensure_ascii": False})    def delete(self, request, pk):        try:            studentsInfo.objects.get(id=pk).delete()        except studentsInfo.DoesNotExist:            return JsonResponse(data={"message": "您要删除的数据不存在"}, status=404)        else:            return JsonResponse(data={"message": "删除成功"})

1.7 配置路由

drfdemo1/urls.py:

from django.urls import path, includeurlpatterns = [    # path('admin/', admin.site.urls),    path('api/',include('app.urls')),]

app/urls.py:

from django.urls import path,re_pathfrom .views import *urlpatterns = [    path('students/', studentView.as_view()),    re_path(r'^students/(?P\d+)/$', studentInfoView.as_view())]

1.8 启动项目

python manage.py runserver 8000

1.9 测试api接口1.9.1 添加一个学生

返回数据:

{    "id": 13,    "name": "胡歌",    "sex": "男",    "age": "36",    "classroom": "888",    "info": "这个人很懒,什么都没有留下"}

数据库:

1.9.2 获取所有学生信息

返回数据

[    {        "id": 1,        "name": "小明",        "sex": "男",        "age": 22,        "classroom": "301",        "info": "这个人很懒,什么也没有留下"    },    {        "id": 2,        "name": "小红",        "sex": "女",        "age": 18,        "classroom": "301",        "info": "这个人很懒,什么也没有留下"    },    {        "id": 3,        "name": "张三",        "sex": "男",        "age": 25,        "classroom": "307",        "info": "这个人很懒,什么也没有留下"    },    {        "id": 4,        "name": "李四",        "sex": "男",        "age": 24,        "classroom": "308",        "info": "这个人很懒,什么也没有留下"    },    {        "id": 5,        "name": "闵麒良",        "sex": "男",        "age": 23,        "classroom": "310",        "info": "河工胡歌"    },    {        "id": 12,        "name": "孙明辉",        "sex": "男",        "age": 23,        "classroom": "333",        "info": "这个人很懒,什么都没有留下"    },    {        "id": 13,        "name": "胡歌",        "sex": "男",        "age": 36,        "classroom": "888",        "info": "这个人很懒,什么都没有留下"    }]

1.9.3 获取一条数据

返回数据

{    "id": 13,    "name": "胡歌",    "sex": "男",    "age": 36,    "classroom": "888",    "info": "这个人很懒,什么都没有留下"}

1.9.4 更新一条数据

返回数据

{    "id": 13,    "name": "胡歌",    "sex": "男",    "age": 18,    "classroom": 666,    "info": "6666666666666666"}

数据库:

1.9.5 删除一条数据

返回数据:

{    "message": "删除成功"}

数据库: