rest-framwork官方文档教程(一)
该项目是按照官网quickstart进行的,具体也可查看rest-framework官网:
https://www.django-rest-framework.org/tutorial/quickstart/#
一.安装依赖库
此处请确认你的python版本,如果你使用的是python3,那么在pip的时候和进入python命令行的时候要使用pip3和python3的命令
pip3 install django
pip3 install djangorestframework
二.创建项目
(一)quickstart
# 创建项目文件夹 mkdir tutorial cd tutorial/ # 创建一个django项目并创建一个应用 django-admin startproject tutorial . (上一个命令中最后还有一个点别丢掉,否则创建的项目目录会多一层) django-admin startapp quickstart
以上步骤完成后目录结构如下:
在这里说一下project和app的关系。一个应用是完成某件事的一个web程序,比如一个博客系统等。而一个工程包含网站的一系列配置以及多个应用。一个工程可以包括多个应用,一个应用也可以存在于多个工程
首次初始化你的数据库:
cd .. python3 manage.py migrate
此时显示:
然后创建数据库初始化的用户名密码:
python manage.py createsuperuser --email admin@example.com --username admin
三.编写项目
现在用ide打开刚才创建的工程,开始coding...
1.序列化
首先要定义一些序列化,所以来创建一些序列化的东西
创建一个py文件,具体位置为:tutorial/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,当然你也可以使用其他主键字段和其他各种关系,但Hyperlinked比较更restful化.
序列化小知识:
在程序运行的过程中,所有的变量都是在内存中,比如,定义一个dict:
d = dict(name='Bob', age=20, score=88)
可以随时修改变量,比如把name
改成'Bill'
,但是一旦程序结束,变量所占用的内存就被操作系统全部回收。如果没有把修改后的'Bill'
存储到磁盘上,下次重新运行程序,变量又被初始化为'Bob'
。
我们把变量从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
反过来,把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
2.创建视图
现在我们来创建视图,打开文件tutorial/quickstart/views.py
from django.contrib.auth.models import User,Group from rest_framework import viewsets from tutorial.quickstart.serializers import UserSerializer,GroupSerializer class UserViewSet(viewsets.ModelViewSet): """ API endpoint that allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint that allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer
与写多个视图相比,我们将具有常见行为的组成一个类叫做viewsets
3.URLs
接下来进行url的编辑,操作文件为:tutorial/urls.py
from django.contrib import admin from django.urls import path from django.conf.urls import url,include from rest_framework import routers from tutorial.quickstart import views router=routers.DefaultRouter()
#定义路由地址 router.register(r'users',views.GroupViewSet) router.register(r'groups',views.GroupViewSet)
#注册新的路由地址 urlpatterns = [ path('admin/', admin.site.urls), url(r'^',include(router.urls)), url(r'^api-auth/',include('rest_framework.urls'),namespace='rest_framework') ]
4.页码
每个分页控制多少个返回对象,在tutorial/settings.py
REST_FRAMEWORK = { 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', 'PAGE_SIZE': 10 }
5.settings
在tutorial/settings.py里的INSTALLED_APPS中添加'rest_framework'
到现在,我们的quickstart完成啦
下面来进行一些调试
6.调试接口
输入的命令
python3 manage.py runserver
此时访问http://127.0.0.1:8000/,可以看到如下界面:
访问http://127.0.0.1:8000/users/结果如下:
到这里,我们就成功创建了一个django-rest项目啦~~~~~