<python模块>djangorestframework

时间:May 22, 2019 分类:

目录:

创建项目

启动新项目

$ django-admin.py startproject myProject
$ python manage.py startapp api

将api加入到setting中

INSTALLED_APPS = [
    ...
    'api',
]

设置管理员

$ python manage.py createsuperuser

添加djangorestframework

安装依赖

$ pip install djangorestframework

在setting中配置依赖

INSTALLED_APPS = [
    ....
    'rest_framework',    
]

创建models

写一个简单的models

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)

同步数据库

$ python manage.py makemigrations
$ python manage.py migrate

在admin.py中接入

from .models import Student 

@admin.register(Student)
class BlogTypeAdmin(admin.ModelAdmin):
    list_display = ('pk', 'name') 

然后启动

$ python manage.py runserver

在127.0.0.1:8000/admin中可以加入数据

使用restful

在api目录下添加serializers.py用于序列化

说简单点就是通过实体模型从数据库中获取数据然后转化为通用格式json的资源

from rest_framework import serializers
from .models import Student

class StudentSerializers(serializers.ModelSerializer):
    class Meta:
        model = Student     #指定的模型类
        fields = ('pk', 'name', 'sex', 'sid',)  

设置视图,restfulapi中提供了很多视图,这边使用viewsets

api/views.py

from rest_framework import viewsets
from .models import Student
from .serializers import StudentSerializers
# 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.StudentViewSet)

# 注册上一级的路由地址并添加
urlpatterns = [
    url('api/', include(route.urls)),
]

在总的urls中包含这个urls即可

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('api.urls')),    #添加的路由地址
]

测试用例

查看API视图

$ curl -XGET http://127.0.0.1:8000/api/

查看所有学生

$ curl -XGET http://127.0.0.1:8000/api/student/

查看具体学生

$ curl -XGET http://127.0.0.1:8000/api/student/3/

添加学生

$ curl -XPOST http://127.0.0.1:8000/api/student/ -d "name=why&sex=boy&sid=142"

修改学生

$ curl -XPUT http://127.0.0.1:8000/api/student/5/ -d "name=why&sex=boy&sid=141"

删除学生

$ curl -XDELETE http://127.0.0.1:8000/api/student/5/