rest-framwork官方文档教程(一)

摘要:
应用程序是一个完成某些事情的web程序,例如博客系统。一个项目包括网站的一系列配置和多个应用程序。如果修改后的“Bill”未存储在磁盘上,则下次重新运行程序时,变量将初始化为“Bob”。将变量从内存更改为可存储或可传输的过程称为序列化。在Python中,它被称为酸洗。在其他语言中,它也被称为序列化、编组、扁平化等。相反,将变量内容从序列化对象重新读取到内存中被称为反序列化或取消拾取。

该项目是按照官网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

以上步骤完成后目录结构如下:

 rest-framwork官方文档教程(一)第1张

  在这里说一下project和app的关系。一个应用是完成某件事的一个web程序,比如一个博客系统等。而一个工程包含网站的一系列配置以及多个应用。一个工程可以包括多个应用,一个应用也可以存在于多个工程

首次初始化你的数据库:

cd ..
python3 manage.py migrate

此时显示:

rest-framwork官方文档教程(一)第2张

然后创建数据库初始化的用户名密码:

python manage.py createsuperuser --email admin@example.com --username admin

rest-framwork官方文档教程(一)第3张

三.编写项目

现在用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'

rest-framwork官方文档教程(一)第4张

到现在,我们的quickstart完成啦

下面来进行一些调试

6.调试接口

输入的命令

python3 manage.py runserver

  rest-framwork官方文档教程(一)第5张

此时访问http://127.0.0.1:8000/,可以看到如下界面:

rest-framwork官方文档教程(一)第6张

访问http://127.0.0.1:8000/users/结果如下:

rest-framwork官方文档教程(一)第7张

到这里,我们就成功创建了一个django-rest项目啦~~~~~

免责声明:文章转载自《rest-framwork官方文档教程(一)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CentOS7.5的网卡配置(CentOS 6.5的虚拟主机在vmware中迁移的网卡设置)android基本架构下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

xxl-job 增加python3

xxl-job 项目中,可以定时执行python脚本,但默认都是使用linux系统自带的python2.7执行脚本,与常用且常写的python3不符。本文主要解决这个问题。 解决方案 修改直接修改 com.xxl.job.core.glue.GlueTypeEnum 这个枚举即可。比如我在这个枚举新增了一个python3,既不影响之前的python2.x脚...

升级openssl 支持TLS1.2

升级openssl 支持TLS1.2 支持TLS1.2 背景: 现在许多网站,都要求tls1.2协议以上,像github、 pip3安装包网站https://pip.pypa.io/等。 openssl现有版本不支持。需要升级openssl。 git 底层使用curl库,curl库又调用的libopenssl库。 如果希望git支持tls1.2,需要更新c...

django Rest Framework---缓存通过drf-extensions扩展来实现

 什么情况下使用缓存 1.不经常更新的数据 2.用户经常访问的一些页面,比如商品列表页、商品详情页等 3.用户经常修改的一些操作:购物车、订单中心等 关于DRF缓存扩展可以参考文档:http://chibisov.github.io/drf-extensions/docs/#caching 安装 pip install drf-extensions 使用...

REST FRAME WORK--认证 权限 Xadmin

目录 1. 认证Authentication 2. 权限Permissions 使用 全局设置 局部配置 提供的权限 举例 自定义权限 3. 限流Throttling 使用可选限流类 实例 4. 过滤Filtering 5. 排序 6. 分页Pagination可选分页器 7. 异常处理 ExceptionsREST fra...

C# 使用XML序列化对象(二)

在C# 使用XML序列化对象(一)中描述了使用XML序列化对象的最简单的实现。 现在我们来看看稍微复杂一点的情况: 现有两个类:A和B,B是A的派生类,如下所示: public classA { public inta { get; set; }...

nodejs 的序列化与反序列化

1.序列化 stringify函数的作用就是序列化对象,也就是说将对象类型转换成一个字符串类型(默认的分割符("&")和分配符("=")),先介绍它的基本用法,在下一节里我们将学习如何替换默认分配符,下面我们就通过以下例子来清楚的认识一下吧! 例1:querystring.stringify("对象") var querystring= requi...