Python全系列 教程
3567个小节阅读:5930.6k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
对单个模型数据,执行增删改查操作,要求使用restframework做API接口
在视图中实现函数 students API
xxxxxxxxxx
from django.http import JsonResponse,HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.parsers import JSONParser
from .models import Student
from .serializers import StudentSerializer
# Create your views here.
'''
对学生执行 增删改查API:
行为 请求方式 请求路径URL
增加 POST /students/
删除 DELETE /student/<int:id>/
修改 PUT /student/<int:id>/
查询一个 GET /student/<int:id>/
查询所有 GET /students/
'''
@csrf_exempt # 使得该视图函数不再需要csrf验证
def students(request):
# 判断请求方式
if request.method == 'GET':
# 查询所有
stus = Student.objects.all()
# 将查询结果转换为json字符串
# 创建序列化器对象
serializer = StudentSerializer(stus, many=True)
# 将数据返回给前端
# safe 默认是True,传递的值只能是字典或者列表 False 传递的值可以是任意类型
return JsonResponse(serializer.data, safe=False)
elif request.method == 'POST':
# 增加
# 获取前端传递的参数
data = JSONParser().parse(request)
# 将数据反序列化
serializer = StudentSerializer(data=data)
# 验证数据
if serializer.is_valid():
# 保存数据
serializer.save()
# 将数据返回给前端
return JsonResponse(serializer.data, status=201)
else:
return JsonResponse(serializer.errors, status=400)
@csrf_exempt
def student(request, id):
# 查询一个
try:
stu = Student.objects.get(pk=id)
except Student.DoesNotExist:
return JsonResponse({'error': '学生不存在'}, status=404)
# 判断请求方式
if request.method == 'GET':
# 将查询结果转换为json字符串
# 创建序列化器对象
serializer = StudentSerializer(stu)
return JsonResponse(serializer.data,status=200)
elif request.method == 'PUT':
# 修改数据
# 获取前端传递的参数
data = JSONParser().parse(request)
# 将数据反序列化,并指定要修改的对象
serializer = StudentSerializer(stu,data=data)
# 验证数据
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data,status=200)
else:
return JsonResponse(serializer.errors,status=400)
elif request.method == 'DELETE':
# 删除
stu.delete()
return HttpResponse(status=204)
xxxxxxxxxx
from django.urls import path
from rest_app import views
urlpatterns = [
path('students/', views.students),
path('students/<int:pk>/', views.student_detail),
]
get请求可以使用浏览器发送,但是post等其他http method的请求,浏览器测试起来就不方便了,本文档中使用VSCode的REST Client)来测试api 命令
xxxxxxxxxx
### 测试获取所有学生
GET http://localhost:8000/api/students/
### 测试增加一个学生
POST http://localhost:8000/api/students/
{
"name":"SQL",
"age":10,
"sex":1
}
### 测试获取单个学生
GET http://localhost:8000/api/student/5/
### 测试修改数据
PUT http://localhost:8000/api/student/4/
{
"name":"CSS",
"age":23
}
### 测试删除数据
DELETE http://localhost:8000/api/student/5/
实时学习反馈
1. HTTP服务器成功返回用户请求数据的状态码是_____:
A 200
B 201
C 202
D 204
2. 浏览器发送的请求方式是_____:
A DELETE
B POST
C PUT
D GET
答案
1=>A 2=>D