Django Restful(DRF)框架学习(二)第一个API接口
一、初始化项目
- 创建应用:
python manage.py startapp api
- 在
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'
]
- 进行数据迁移,生成必要的数据库:
python manage.py migrate
,这里没有设置数据库,直接用了自带的sqlite - 创建一个管理员:
python manage.py createsuperuser
二、添加依赖
- 安装框架:
pip install djangorestframework
- 到
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'
]
三、创建模型(数据库表)
- 直接在
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)
- 写好模型类,再执行
makemigrations
和migrate
,就完成了数据迁移,在这里使用了默认的sqlite小型数据库。
manage.[email protected] > 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.[email protected] > 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
- 先导入刚刚设置好的模型类:
from .models import Student
- 然后再在
admin.py
中注册
@admin.register(Student)
class BlogTypeAdmin(admin.ModelAdmin):
list_display = ('pk','name')#在后台列表下显示的字段
五、运行项目:
python manage.py runsever
六、进行测试
-
测试有两种形式,一是直接用发送请求的方式测试API,二是可以用Rest framework提供的页面直接测试。例如,先添加一个数据:
-
简单测试GET方法,用GET方法访问
http://127.0.0.1:8000/api/student/
这条URL是获取所有学生的资源,这些资源用json格式反馈给我们。例如:
[
{
"pk": 3,
"name": "小王八",
"sex": "男",
"sid": "112"
},
{
"pk": 2,
"name": "小王",
"sex": "女",
"sid": "110"
},
]
七、序列化
- 序列化的作用就是把我们要查找的实体模型从数据库中取出并通过序列化的功能转换成通用的资源格式,也就是JSON。
- REST风格下的访问方式有:
- GET:获取
- POST:新增
- PUT:修改
- DELETE:删除
- 开始编写序列化功能
- 在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"
}
八、设置视图
- REST framework为我们提供了一套功能相对丰富的视图功能(增删查改、查询、过滤、排序、分页)。
- 在视图(
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.
- 并编写模型类对应的视图类
# Create your views here.
class StudentViewSet(viewsets.ModelViewSet):
#指定结果集并设置排序
queryset = Student.objects.all().order_by('-pk')
#指定序列化的类
serializer_class = StudentSerializers
九、设置路由
- 现在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))
]
- 然后再去总路由将我们这个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 直接用浏览器测试
- 访问
http://127.0.0.1:8000/api/student/
,框架提供了易于操作的测试界面。 - 还可以通过
http://127.0.0.1:8000/api/student/3/
这种形式访问到单个资源
10.2 通过postman测试
- 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"
}
]
- post方法:
http://127.0.0.1:8000/api/student/
{
"pk": 9,
"name": "李泰",
"sex": "male",
"sid": "31100"
}
- put方法:
http://127.0.0.1:8000/api/student/9/
{
"pk": 9,
"name": "李泰",
"sex": "male",
"sid": "1"
}
- delete 方法:
http://127.0.0.1:8000/api/student/9/