对于数据资源的API一般要实现增、删、改、查的动作请求。如获取应用项目的部署主机信息
| 请求方法 | 请求地址 | 后端操作 |
|---|---|---|
| GET | /projecthost | 获取所有主机 |
| GET | /projecthost/ |
获取id为pk的主机 |
| POST | /projecthost | 新增主机 |
| PUT | /projecthost/ |
修改主机为pk主机 |
| DELETE | /projecthost/ |
删除id为pk的主机 |
1、创建Django项目
1.1、创建drfdemo项目
$ cd ~/project$ django-admin startproject drfdemo
1.2、创建apps应用
$ cd drfdemo
$ python mananger.py startapp apps
1.3、注册apps到项目settings.py中
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'apps',
]
2、原生方法实现增删改查API
Django创建API分为如下几个步骤:
class ProjectHost(models.Model): “”” 主机信息模型 “”” ip = models.GenericIPAddressField(verbose_name=’主机IP’), project_name = models.CharField(max_length=64, verbose_name=’项目名称’), host_user = models.CharField(max_length=32, verbose_name=’主机用户’), number = models.IntegerField(default=1001, verbose_name=’主机编号’), status = models.BooleanField(default=True, verbose_name=’主机状态’) description = models.TextField(verbose_name=’描述’)
class Meta:
db_table = 'app_hosts',
verbose_name = '主机信息表'
verbose_name_plural = verbose_name
# verbose_name: 在admin管理界面中显示中文时的名称,表示单数显示
# verbose_name_plural:表示中文复数显示
<a name="qNZJv"></a>
#### 2.2、迁移模型至数据库
```bash
$ python manage.py makemigrations # 生成迁移文件
$ python manage.py migrate # 执行数据库迁移
2.3、创建添加主机视图
一个基本的数据操作视图需要三个步骤:
- 接收客户端提交的数据
- 操作数据库,将数据入库
- 返回客户端结果 ```python from django.http.response import JsonResponse from django.views import View from apps.models import ProjectHost
class ProjectHostView(View): “”” 主机管理API接口 “”” def post(self, request): “””添加主机”””
# 1、接收客户端提交的数据
ip = request.POST.get('ip')
project_name = request.POST.get('project_name')
host_user = request.POST.get('host_user')
number = request.POST.get('number')
status = request.POST.get('status')
description = request.POST.get('description')
# 2、操作数据库,将数据入库
instance = ProjectHost.objects.create(
ip=ip,
project_name=project_name,
host_user=host_user,
number=number,
status=status,
description=description
)
# 3、返回结果
return JsonResponse(data={
"ip": instance.ip,
"project_name": instance.project_name,
"host_user": instance.host_user,
"number": instance.number,
"status": instance.status,
"description": instance.description
}, status=200)
<a name="mouGE"></a>
#### 2.4、创建路由
Django路由包含项目入口路由及应用路由,分别在项目目录和应用目录下
- 项目路由中引入应用路由drfdemo/urls.py
```python
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include("apps.urls")), # 新增
]
- 应用路由下创建urs.py,添加视图路由 ```python from django.urls import path from apps.views import ProjectHostView # 引入视图方法
urlpatterns = [ path(‘projecthost/‘, ProjectHostView.as_view()), # 添加视图路由 ]
<a name="Mv6gq"></a>
#### 2.5、postman验证
<a name="sH4cI"></a>
#### 2.6、查询、修改和删除API实现
按照上述方法,依次实现查询、修改和删除方法
```python
def get(self, request):
"""查询主机接口"""
# 1、查询数据库数据
instance = list(ProjectHost.objects.values())
# 2、返回结果
return JsonResponse(data=instance, status=200, safe=False)
def put(self, request, pk):
"""修改主机接口"""
# 1、接收客户端提交的数据
request_data = json.loads(request.body)
ip = request_data.get('ip')
project_name = request_data.get('project_name')
host_user = request_data.get('host_user')
number = request_data.get('number')
status = request_data.get('status')
description = request_data.get('description')
# 2、操作数据库,将数据入库
try:
instance = ProjectHost.objects.get(pk=pk)
instance.ip = ip
instance.project_name = project_name
instance.host_user = host_user
instance.number = number
instance.status = status
instance.description = description
instance.save()
except ProjectHost.DoesNotExist:
return JsonResponse(data={}, status=404)
# 3、返回结果
return JsonResponse(data={
"ip": instance.ip,
"project_name": instance.project_name,
"host_user": instance.host_user,
"number": instance.number,
"status": instance.status,
"description": instance.description
}, status=201)
def delete(self, request, pk):
"""删除一条主机数据"""
# 1、数据库获取查询数据
try:
instance = ProjectHost.objects.get(pk=pk)
instance.delete()
except ProjectHost.DoesNotExist:
return JsonResponse(data=None, status=404)
# 2、返回结果
return JsonResponse(data={}, status=201)
更新一条操作需要传入数据id,因此需要单独创建路由
from django.urls import path, re_path
from apps.views import ProjectHostView
urlpatterns = [
path('projecthost/', ProjectHostView.as_view()),
re_path('projecthost/(?P<pk>\d+)', ProjectHostView.as_view()), # 增加处理修改数据路由
]
