本人普通一本,正值大三,为了能有好的就业,痛定思痛戒掉游戏!鞭策自己至少一周一篇博客
- 学习目标:学校课内基础打扎实,课外学会语言框架,同时提升英语阅读水平
- 学习路线(自拟):
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项目命名为tutorial
:django-admin startproject _00_quickstart
新建一个app命名quickstart
:python 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
中包含了默认的login
和logout
视图,这是可选的,如果你的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/