[django-rest-framework]00.quickstart,快速开始!

本人普通一本,正值大三,为了能有好的就业,痛定思痛戒掉游戏!鞭策自己至少一周一篇博客

  • 学习目标:学校课内基础打扎实,课外学会语言框架,同时提升英语阅读水平
  • 学习路线(自拟):vue -> djangorestframework -> goland
  • 毕业前想:用前后端分离建成自己的小站,做一款网络游戏(爱好而已)

关于本篇djangorestframwork

内容皆会上传到我的github上:https://github.com/BadbadLoli/django-rest-framework-study

本篇参照官网教程:https://www.django-rest-framework.org/tutorial/quickstart/

学习为主,如有纰漏请大神指正


环境

操作系统:win10

python3.6.8

django2.2.4

djangorestframwork 3.10.2

快速开始

我们现在创建一个简单的API,可以允许管理员用户(admin user)去查看/编辑users组和groups

项目准备

创建新的django项目命名为tutorialdjango-admin startproject _00_quickstart

新建一个app命名quickstartpython manage.py startapp quickstart

第一次同步你的数据库:python manage.py migrate

创建一个超级管理员:python manage.py createsuperuser

Serializers

然后我们要在quickstart里定义(新建)serializers(这个不知道怎么翻译比较好。。)

./quickstart/serializers.py

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'groups']


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ['url', 'name']

在本例中,我们使用的是HyperlinkedModelSerializer的超链接关系。您还可以使用主键和其他各种关系,但是超链接是一种很好的RESTful设计

Views

接着,我们最好写一些视图函数

./quickstart/views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer


class UserViewset(viewsets.ModelViewSet):
    # 允许查看和编辑users
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewset(viewsets.ModelViewSet):
    # 允许查看和编辑groups
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

djangorestframework只是将所有常见的行为分组到称为viewset的类中。

如果需要的话,我们可以很容易地将这些视图分解为单独的视图,但是使用viewset可以很好地组织视图逻辑,并且非常简洁。

URLs

现在我们连接上url

./_00_qucikstart/urls.py

from django.urls import path, include
from rest_framework import routers
from quickstart import views

router = routers.DefaultRouter()
router.register('users', views.UserViewset)
router.register('groups', views.GroupViewset)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因为我们使用的是viewset而不是view,所以只需要将viewset注册到router类里,drf就可以自动生成API URL conf

如果我们需要对API URL有更多的控制,可以简单的用常规的基于类的视图,并显式的编写URL conf

最后我们在browsable API 中包含了默认的loginlogout视图,这是可选的,如果你的API需要身份验证,并且你希望使用可浏览的API,那么这是非常有用的

Pagination

Pagenation允许你控制每页返回多少对象,要启动它,就得在settings.py里进行设置

./_00_qucikstart/settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

Settings

告诉django你使用的是drf,这里并不需要注册我们创建的app quickstart

./_00_qucikstart/settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
]

测试我们的API

查看成果咯 python manage.py runserver

打开网址 http://127.0.0.1:8000/
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章