您的位置:首页 > 汽车 > 新车 > 江西省赣州市瑞金市_网页设计师培训机构有吗_成都seo优化排名推广_重庆森林在线观看

江西省赣州市瑞金市_网页设计师培训机构有吗_成都seo优化排名推广_重庆森林在线观看

2024/12/22 16:53:44 来源:https://blog.csdn.net/alexsong51/article/details/144538318  浏览:    关键词:江西省赣州市瑞金市_网页设计师培训机构有吗_成都seo优化排名推广_重庆森林在线观看
江西省赣州市瑞金市_网页设计师培训机构有吗_成都seo优化排名推广_重庆森林在线观看

使用Django View视图开发REST 接口

model
from django.db import models
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator
from django.contrib.auth.models import AbstractUserdef validate_read(value):if value <= 0:raise ValidationError('阅读量必须是一个正整数。')def validate_comment(value):if value <= 0:raise ValidationError('评论量必须是一个正整数。')class BookInfo(models.Model):title = models.CharField(max_length=30, verbose_name='书籍名')pub_date = models.DateField(verbose_name='出版日期')read = models.PositiveIntegerField(verbose_name='阅读量', validators=[validate_read])comment = models.PositiveIntegerField(verbose_name='评论量',blank=True, null=True, validators=[validate_comment])class Meta:db_table = 'bookinfo'
urls
urlpatterns = [# path('admin/', admin.site.urls),path('books/', views.BookListView.as_view()),path('books/<int:pk>/', views.BookDetailView.as_view())
]
views
from django.shortcuts import render, HttpResponse"""
基于 Django View 开发REST接口GET	    /goods	    获取所有商品
POST	/goods	    增加商品
GET	    /goods/1	获取编号为1的商品
PUT	    /goods/1	修改编号为1的商品
DELETE	/goods/1	删除编号为1的商品响应数据 JSON
"""from django.views import View
from django.http import JsonResponse, HttpResponse
import jsonfrom app.models import BookInfoclass BookListView(View):# 查询所有def get(self, request):# 1.查询所有,queryset类型books = BookInfo.objects.all()# 2.遍历查询集,将模型对象变成字典book_list = []for book in books:book_dict = {'title': book.title,'pub_date': book.pub_date,'read': book.read,'comment': book.comment if book.comment else ''}book_list.append(book_dict)# 3。响应给前端# 参数safe=False是必要的,因为book_list是一个非字典对象,# 而JsonResponse默认只接受字典对象(出于安全考虑)。# 将safe设置为False可以允许传递非字典对象,如列表。return JsonResponse(book_list, safe=False)# 新增def post(self, request):# 获取前端请求体(JSON)book_dict_bytes = request.bodyprint('bytes类型:', book_dict_bytes)# 把 bytes 类型的 json数据,转换为 json strbook_dict_str = book_dict_bytes.decode()print('str类型', book_dict_str)# json.loads():将一个 JSON 格式的字符串转换成 Python 的数据类型# (通常是字典或列表,但也可能是字符串、数字、布尔值等)。data_dict = json.loads(book_dict_str)print('JSON格式的字符串转换成 Python 的数据类型:', data_dict)# 新增book = BookInfo.objects.create(**data_dict)# 准备返回数据:JsonResponse 用于返回字典或列表response_data = {'title': book.title,'pub_date': book.pub_date,'read': book.read,'comment': book.comment if book.comment else ''}return JsonResponse(response_data, status=201)class BookDetailView(View):# 查询指定def get(self, request, pk):try:book = BookInfo.objects.get(pk=pk)book_dict = {'title': book.title,'pub_date': book.pub_date,'read': book.read,'comment': book.comment if book.comment else ''}except Exception as e:return JsonResponse({'message': '没有此图书'}, status=404)return JsonResponse(book_dict)# 修改指定def put(self, request, pk):try:book = BookInfo.objects.get(pk=pk)except BookInfo.DoesNotExist:return JsonResponse({'message': '没有此图书'}, status=404)# 获取前端请求体(JSON)book_dict_bytes = request.body# 把 bytes 类型的 json数据,转换为 json strbook_dict_str = book_dict_bytes.decode()# json.loads():将一个 JSON 格式的字符串转换成 Python 的数据类型# (通常是字典或列表,但也可能是字符串、数字、布尔值等)。data_dict = json.loads(book_dict_str)print('data_dict', data_dict)# 更新对象的属性(只更新允许的字段)allowed_fields = {'title', 'pub_date', 'read', 'comment'}# 从接收到的data_dict里处理需要修改的数据# 对一个字典调用 items() 方法时,它会返回一个可迭代的视图对象,# 该对象包含了字典中的键值对(key-value pairs)。# 每个键值对都以一个元组(tuple)的形式表示,# 元组中第一个元素是键,第二个元素是与该键相关联的值。for field, value in data_dict.items():# hasattr(book, field): 这个函数检查 book 对象是否有名为 field 的属性, 返回布尔值if field in allowed_fields and hasattr(book, field):# setattr(book, field, value):这个函数用于动态地设置对象的属性。# 在这里,它将 book 对象的 field 属性设置为 value。setattr(book, field, value)book.save()# 准备返回数据:JsonResponse 用于返回字典或列表response_data = {'title': book.title,'pub_date': book.pub_date,'read': book.read,'comment': book.comment if book.comment else ''}return JsonResponse(response_data, status=200)# 删除指定def delete(self, request, pk):try:book = BookInfo.objects.get(pk=pk)except BookInfo.DoesNotExist:return JsonResponse({'message': '没有此图书'}, status=404)book.delete()return JsonResponse({'message': '删除成功'}, status=200)

getattr()

getattr() 是 Python 中的一个内置函数,它用于获取对象的属性值。如果指定的属性存在,getattr() 会返回其值;如果不存在,则可以返回一个默认值(如果提供了的话),或者抛出一个 AttributeError 异常(如果没有提供默认值)。

getattr() 函数的基本语法如下:

getattr(object, name[, default])
  • object:要获取属性的对象。

  • name:要获取的属性的名称(作为字符串)。

  • default:(可选)如果属性不存在,则返回的值。如果不提供此参数,并且属性不存在,则会抛出 AttributeError

hasattr()

hasattr() 是 Python 中的一个内置函数,用于检查对象是否具有指定的属性。它接受两个参数:一个是要检查的对象,另一个是属性名的字符串。如果对象具有该属性,hasattr() 返回 True;如果不具有,则返回 False

hasattr(object, name)
  • object:要获取属性的对象。

  • name:要获取的属性的名称(作为字符串)。

setattr()

setattr() 是 Python 的内置函数之一,其用途是设置对象的属性值。该函数接受三个参数:对象本身、属性名(需为字符串形式)以及要设置的新属性值。若指定的属性在对象中已存在,setattr() 会更新其值;若不存在,则会创建该属性并赋值。

以下是 setattr() 的基本语法:

setattr(object, name, value)
  • object:代表要设置属性的对象。
  • name:表示要设置的属性名,需以字符串形式提供。
  • value:指定属性的新值。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com