REST其实是短语——“Representational State Transfer”的缩写,中文翻译为“表现层状态转化”。这里的表现层指的是“资源”(Resources)的表现层,所谓资源就是网络上的一个具体信息,我们可以用一个URI(统一资源定位符)来指向它。
我们把“资源”具体呈现出来的形式叫做它的“表现层”,比如文本可以用txt、XML、JSON格式表现,图片可以用JPG、PNG格式表现。
由于HTTP是无状态协议,所有的状态都保存在服务器端。因此客户端必须通过某种手段让服务器端发生“状态转化”,而实际应用环境中这种转化常常是建立在表现层之上的(因为在服务器和客户端之间只能传递该资源的“表现层”),因此称之为“表现层状态转化”。
而在HTTP协议中有4个动词来代表基本操作:
下面将展示如何使用Django REST Framework来实现一个获取博客后台信息的RESTful API服务。
sudo pip3 install django
sudo pip3 install djangorestframework
sudo pip3 install django-filter
# 项目名称为django_rest_framework_test
django-admin startproject django_rest_framework_test
cd django_rest_framework_test/
python3 manage.py startapp blog
# 目录结构
.
└── django_rest_framework_test
├── blog
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── tests.py
│ └── views.py
├── django_rest_framework_test
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py
# blog/models.py
from django.db import models
class User(models.Model):
name = models.CharField(max_length=32)
mail = models.EmailField()
class Entry(models.Model):
STATUS_DRAFT = "draft"
STATUS_PUBLIC = "public"
STATUS_SET = (
(STATUS_DRAFT, "草稿"),
(STATUS_PUBLIC, "公开"),
)
title = models.CharField(max_length=128)
body = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
status = models.CharField(choices=STATUS_SET, default=STATUS_DRAFT, max_length=8)
author = models.ForeignKey(User, related_name='entries')
下面将选择集成好的SQlite3作为数据库,对django_rest_framework_test/settings.py文件中的INSTALLED_APPS增加一个元素——’blog’。
# 基于当前的model创建新的迁移策略文件
python3 manage.py makemigrations
# 执行迁移动作
python3 manage.py migrate
这样在manage.py的目录下就生成了一个数据库文件db.sqlite3,这样以后都不用再写一句SQL语句。当然你也可以改用MySQL或者Postgres,只用修改settings文件中的DATABASES即可。
首先要在blog/admin.py文件中添加要进行管理的模型,如下:
from django.contrib import admin
from .models import User, Entry
@admin.register(User)
class UserAdmin(admin.ModelAdmin):
pass
@admin.register(Entry)
class Entry(admin.ModelAdmin):
pass
# 注册一个管理员账号
python manage.py createsuperuser
Username (leave blank to use 'kimihiro_n'): dev
Email address:
Password:你的密码
Password (again):你的密码
Superuser created successfully.
# 启动服务器
python3 manage.py runserver
在浏览器的地址栏输入“http://localhost:8000/admin”,输入账号密码即可。
新增一名用户
新增一条博客