如何在Django视图中查询以添加两个数字?

2024-06-17 11:44:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在view.py中进行查询,以便显示客户端输入的两个整数之和。我似乎找不到一种方法来添加客户端输入的数字并显示在服务器上。任何关于如何解决这个问题的建议都会非常有帮助。如果有任何与问题有关的疑问,请提问,我会尽量澄清

Models.py::

from django.db import models
from django.conf import settings
class Addition(models.Model):
    name = models.CharField(max_length=10)
    int1 = models.IntegerField()
    int2 = models.IntegerField()
     **Edited Section**
    @property
    def total_score(self):
        total = self.int1+self.int2
        return total

Form.py::

from django import forms
from . models import Addition
class AdditionForm(forms.ModelForm):
    class Meta:
        model = Addition
        fields = [
            'name',
            'int1',
            'int2',
        ]

Serializer.py::

from rest_framework import serializers
from . models import Addition, Subtraction
class AdditionSerializer(serializers.ModelSerializer):
    class Meta:
        model = Addition
        fields = '__all__'

View.py::

from django.shortcuts import get_list_or_404,render
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import status
from . forms import AdditionForm
from . models import Addition
from . serializers import AdditionSerializer
from .forms import SubtractionForm
from . models import Subtraction
from . serializers import SubtractionSerializer

class AdditionList(APIView):
    def get(self,request):
        additions = Addition.objects.all()
        serializer = AdditionSerializer(additions,many = True)
        return Response(serializer.data)
class AdditionListForm(APIView):
    def post(request):
        form = AdditionForm(request.POST or None)
        if form.is_valid():
            form.save()
            form =AdditionForm()
        return render(request,'add/addition_form.html',{'form':form})

Tags: djangofrompyimportselfformrestmodels
1条回答
网友
1楼 · 发布于 2024-06-17 11:44:36

如果您的问题是“我应该在哪里进行添加”,则没有“纯技术性”的答案-如果您愿意,将其放在您的视图中、表单中、序列化程序中、模型中,甚至放在第三部分包中的不同函数中,在技术上是合法和有效的

但从设计角度来看,有一个明确的答案。结构良好的应用程序separates the domain layer from the UI-域层不应依赖于UI

在Django中,UI由视图/序列化器(如果构建REST api)/模板/表单组成,域层主要与模型中的数据访问层相关联(但不一定在Model类中-某些部分最好作为独立函数或类实现)

在你的例子中,提供加法的结果显然是你的Addition模型的责任。这并不意味着您应该向模型中添加一个result数据库字段(这将打破关系模型规范化规则),只需添加一个get_result(self)方法(或者,因为这里的操作非常便宜,所以添加一个result{})。当然,您必须自定义序列化程序等,才能将此结果与数据一起返回

注意:您还可以使用Django的orm注释将添加的内容委托给您的数据库(RDBMs不是用于数据存储的jsut,它们可以对您的数据执行许多操作,通常比纯Python代码快得多)。这当然有点过分了,但由于这是一个玩具学习项目,你可能也想尝试一下,以达到教育目的

作为一般指导原则:您的域层应该提供所有的域逻辑,而对UI层一无所知,因此您可以将其用于不同的UI(传统的http/html UI、rest API、命令行脚本、本机GUI等等),UI应该只处理表示/用户交互逻辑,并将所有其他内容委托给域

相关问题 更多 >