6.1 KiB
django ListView——如何创建基于函数和类的 ListView?
在本文中,我们将了解 Django 列表视图。
什么是 Django 列表视图?
Django ListView 指的是那种类型的视图,它显示了出现在模型表中的实例/元素。它用于显示数据库中的多个条目,还允许我们添加新数据。
因此,您可以推断 ListView 基于具有 GET 和 POST 选项的 API 接口。
这类似于我们在 Django REST API 系列中创建的 ItemsView。
编码列表视图的先决条件
考虑一个 Django 项目有一个应用程序 **Itemsapp。**在这里,我们将保存关于椅子、书、桌子等物品的模型信息。
模型的代码:
class ItemModel(models.Model):
id = models.IntegerField(primary_key = True)
name = models.CharField(max_length = 80, blank = False)
price = models.IntegerField
class Meta:
ordering = ['name']
def __str__(self):
return f"{self.name}:{self.price}"
然后,我们将使用终端在预设的数据库 SQLite 中创建表:
python manage.py migrate
python manage.py makemigrations
python manage.py migrate
之后,我们将有 serializers.py 文件,其中包含一个 ItemSerializer 类,用于将 DB 实例转换为 JSON。
项目序列化程序的代码:
from rest_framework import serializers
from .models import ItemModel
class ItemSerializer(serializers.ModelSerializer):
class Meta:
model = ItemModel
fields = ['id',name','price']
之后,只需通过 Python shell 或管理站点本身向表中添加一些项目。
Admin
此外,端点将仅仅是 /items ,因为列表视图关注于显示模型表的整个实例
URL 映射的代码:
- 对于基于函数的列表视图
path ('items/', ItemsView)
- 对于基于类的列表视图
path('items/',ItemView.as_view())
就这样,现在我们将学习用不同的方法创建一个 ListView。
Django ListView 背后的逻辑
在 ListView API 中,逻辑非常简单。
1.从服务器到用户的数据显示
所涉及的步骤将是:
- 从数据库获取数据
- 使用序列化器将数据转换成 JSON
- 按照原样或者通过模板(使用 JS)将 JSON 数据返回给用户
2.从用户处获取数据到服务器
这里涉及的步骤将是:
- 将 JSON 数据与请求的其余部分分开(使用 JSON 解析器)
- 转换成 Django 可读格式(python 方法)
- 对该数据执行专门的任务(添加、编辑、删除)。
在这种情况下,专用任务可以只是显示或添加来自用户的数据到 DB 中。
创建 Django 列表视图
现在让我们创建一个 Django Listview。
1。基于函数的列表视图
基于函数的 ListView 的示例代码如下:
@csrf_exempt
def ItemsView(request):
if request.method == 'GET':
items = ItemsModel.objects.all()
serializer = ItemSerializer(items, many =True)
return JsonResponse(serializer.data, safe =False)
elif request.method == 'POST':
data = JSONParser().parse(request)
serializer =ItemSerializer(data = data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data,status =201)
return JsonResponse(serializer.errors,status = 400)
请记住上一节中给出的我们用 ListView API 执行的步骤,并尝试理解代码。
- def get: 来自数据库的数据→转换为 JSON(序列化程序)→显示 JSON 数据
- def post: 解析请求以分离 JSON 数据→转换为 Python 格式→对数据执行适当的任务
这就是我们在 ItemsView 的代码中所做的。
2.基于类的列表视图
基于类的视图比函数视图更好,因为使用类代码变得更加系统化、结构化和可读。
基于类的 ListView 的示例代码如下:
class ItemsView(APIView):
def get(self,request,format =None):
items = ItemsModel.objects.all()
serializer = ItemSerializer(items, many =True)
return JsonResponse(serializer.data, safe =False)
def post(self,request,format =None):
data = JSONParser().parse(request)
serializer =ItemSerializer(data = data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data,status = status.HTTP_201_CREATED)
return JsonResponse(serializer.errors,status = status.HTTP_400_BAD_REQUEST)
同样,我们编写代码的方式也发生了变化。我们使用类方法和类内函数来编写代码。但逻辑的关键仍然是一样的。
ListView API 的实现
代码已经完成,我们现在运行它。
您可以尝试运行基于函数的视图和基于类的视图,以便更好地理解基于函数和基于类的列表视图
现在为了运行,我们将使用 POSTMAN,这是运行Django REST API的有效方法。这里是邮差的官方网站,在这里你可以看到它的好处
GET ListView
上面的图片显示了 ListView 的 GET 选项,其中显示了 ItemModel 的所有实例。
POST ListView
这张图片显示了 ListView 的 POST 选项,它允许用户向 ItemModel 中添加新的项目实例。
结论
就这样,伙计们!!Django 中的 ListView 就是这么做的。获取模型的实例并显示它们,同时从用户那里获取新的实例。
在下一篇文章中,我们将学习 Django 细节视图。
更多此类有趣话题敬请期待!!注意安全!!




