Django Restful(DRF)框架学习(二)第一个API接口

一、初始化项目

  1. 创建应用:python manage.py startapp api
  2. settings.py中的INSTALLED_APPS列表下添加APP
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'api'
]
  1. 进行数据迁移,生成必要的数据库:python manage.py migrate,这里没有设置数据库,直接用了自带的sqlite
  2. 创建一个管理员:python manage.py createsuperuser

二、添加依赖

  1. 安装框架:pip install djangorestframework
  2. settings.py中添加下载好的依赖应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework', #here
    'api'
]

三、创建模型(数据库表)

  1. 直接在models.py文件创建模型
  • 在这里创建student类(一个类对应一个表)
# Create your models here.
class Student(models.Model):
    name = models.CharField(u'姓名',max_length=100,default="no_name")
    sex = models.CharField(u'性别',max_length=50,default="male")
    sid = models.CharField(u'学号',max_length=100,default="0")

    def _unicode_(self):
        return '%d:%s'%(self.pk,self.name)
  • 写好模型类,再执行makemigrationsmigrate,就完成了数据迁移,在这里使用了默认的sqlite小型数据库。
manage.py@learnapi > makemigrations
"E:\Program Files\JetBrains\PyCharm 2017.3.2\bin\runnerw.exe" E:\Python27\python.exe "E:\Program Files\JetBrains\PyCharm 2017.3.2\helpers\pycharm\django_manage.py" makemigrations E:/Users/china/PycharmProject/learnapi
Migrations for 'api':
  api\migrations\0001_initial.py
    - Create model Student

Following files were affected 
 E:\Users\china\PycharmProject\learnapi\api\migrations\0001_initial.py
Process finished with exit code 0
manage.py@learnapi > migrate
"E:\Program Files\JetBrains\PyCharm 2017.3.2\bin\runnerw.exe" E:\Python27\python.exe "E:\Program Files\JetBrains\PyCharm 2017.3.2\helpers\pycharm\django_manage.py" migrate E:/Users/china/PycharmProject/learnapi
Operations to perform:
  Apply all migrations: admin, api, auth, contenttypes, sessions
Running migrations:
  Applying api.0001_initial... OK

Following files were affected 
 E:\Users\china\PycharmProject\learnapi\db.sqlite3
Process finished with exit code 0

四、设置admin.py

  1. 先导入刚刚设置好的模型类:from .models import Student
  2. 然后再在admin.py中注册
@admin.register(Student)
class BlogTypeAdmin(admin.ModelAdmin):
    list_display = ('pk','name')#在后台列表下显示的字段

五、运行项目:

python manage.py runsever

六、进行测试

  • 测试有两种形式,一是直接用发送请求的方式测试API,二是可以用Rest framework提供的页面直接测试。例如,先添加一个数据:
    Alt text

  • 简单测试GET方法,用GET方法访问http://127.0.0.1:8000/api/student/这条URL是获取所有学生的资源,这些资源用json格式反馈给我们。例如:

[
    {
        "pk": 3,
        "name": "小王八",
        "sex": "男",
        "sid": "112"
    },

    {
        "pk": 2,
        "name": "小王",
        "sex": "女",
        "sid": "110"
    },
]

七、序列化

  1. 序列化的作用就是把我们要查找的实体模型从数据库中取出并通过序列化的功能转换成通用的资源格式,也就是JSON。
  2. REST风格下的访问方式有:
  • GET:获取
  • POST:新增
  • PUT:修改
  • DELETE:删除
  1. 开始编写序列化功能
  • 在api这个应用下创建一个serializers.py,内容如下:
from rest_framework import serializers
from .models import Student

class StudentSerializers(serializers.ModelSerializer):
    class Meta:
        model = Student #指定的模型类
        fields = ('pk','name','sex','sid',)#需要序列化的属性
  • 在这里,model是这个序列化类中我们所要指定的模型类,而fields是我们需要获取模型类中需要序列化的属性。这样定义之后,我们获取到的内容的就是这样
{
        "pk": 2,#用django创建模型自带的主键
        "name": "小王",
        "sex": "女",
        "sid": "110"
}

八、设置视图

  1. REST framework为我们提供了一套功能相对丰富的视图功能(增删查改、查询、过滤、排序、分页)。
  2. 在视图(views.py)中导入viewsets这个类
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from .models import Student
from rest_framework import viewsets
from .serializers import StudentSerializers

from django.shortcuts import render

# Create your views here.
  1. 并编写模型类对应的视图类
# Create your views here.
class StudentViewSet(viewsets.ModelViewSet):
    #指定结果集并设置排序
        queryset = Student.objects.all().order_by('-pk')
    #指定序列化的类
        serializer_class = StudentSerializers

九、设置路由

  1. 现在api文件夹下创建一个urls.py
from django.conf.urls import include,url
from rest_framework import routers
from api import views

#定义路由
route = routers.DefaultRouter()

#注册新的路由地址(路由到某个序列化的类)
route.register(r'student',views.StudentSerializers)

#注册上一级的路由地址并添加
urlpatterns = [
    url('api/',include(route.urls))
]
  1. 然后再去总路由将我们这个api应用的路由包含进去
from django.conf.urls import url,include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url('',include('api.urls'))
]

十、进行各种请求测试

10.1 直接用浏览器测试
  1. 访问http://127.0.0.1:8000/api/student/,框架提供了易于操作的测试界面。
  2. 还可以通过http://127.0.0.1:8000/api/student/3/这种形式访问到单个资源
10.2 通过postman测试
  1. get方法:http://127.0.0.1:8000/api/student/
[
    {
        "pk": 3,
        "name": "李大仙1",
        "sex": "male",
        "sid": "3116004909"
    },
    {
        "pk": 2,
        "name": "李大仙",
        "sex": "male",
        "sid": "3116004908"
    },
    {
        "pk": 1,
        "name": "李泰萱",
        "sex": "male",
        "sid": "3116004907"
    }
]
  1. post方法:http://127.0.0.1:8000/api/student/
{
    "pk": 9,
    "name": "李泰",
    "sex": "male",
    "sid": "31100"
}
  1. put方法:http://127.0.0.1:8000/api/student/9/
{
    "pk": 9,
    "name": "李泰",
    "sex": "male",
    "sid": "1"
}
  1. delete 方法:http://127.0.0.1:8000/api/student/9/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值