首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用Django REST框架读取数据、应用函数并返回结果?

如何使用Django REST框架读取数据、应用函数并返回结果?
EN

Stack Overflow用户
提问于 2016-08-23 09:46:29
回答 2查看 1.2K关注 0票数 3

考虑一个计算"y = ax + b“的简单任务,其中"a”和"b“由模型给出,"x”由用户通过API请求给出,如http://someurl.com/api/15,其中x=15。

通常,API会以JSON格式返回"a“和"b”。但是,相反,我想在服务器上求解这个方程,并且只返回"y“。但是,我不知道如何从URL获取"x“,以及将最后一个函数返回"y”到JSON的位置。有什么想法吗?

models.py:

代码语言:javascript
代码运行次数:0
运行
复制
from django.db import models

class SimpleEquation(models.Model):
    a = models.IntegerField()
    b = models.IntegerField()

serializers.py:

代码语言:javascript
代码运行次数:0
运行
复制
from rest_framework import serializers
from .models import SimpleEquation

class SimpleEquationSerializer(serializers.ModelSerializer):
    class Meta:
        model = SimpleEquation
        fields = ('a','b') # Should return 'y' instead

views.py:

代码语言:javascript
代码运行次数:0
运行
复制
from rest_framework import generics
from .serializers import SimpleEquationSerializer

class Results(generics.ListAPIView):
    queryset = SimpleEquation.objects.all()[0]
    serializer_class = SimpleEquationSerializer

到目前为止我的哑巴函数:

代码语言:javascript
代码运行次数:0
运行
复制
def the_function(request):
    x = SOME_REQUEST_GET_METHOD
    pars = SimpleEquation.objects.all()[0]
    a = pars.a
    b = pars.b
    y = a*x + b
    return y
EN

回答 2

Stack Overflow用户

发布于 2016-08-23 10:11:32

使用Serializer Method Field

代码语言:javascript
代码运行次数:0
运行
复制
from rest_framework import serializers
from .models import SimpleEquation

class SimpleEquationSerializer(serializers.ModelSerializer):

    y = serializers.SerializerMethodField('get_y')

    class Meta:
        model = SimpleEquation
        fields = ('y')

    def get_y(self, obj):
        x =  self.context['request'].x
        y = obj.a*x + obj.b  # obj comes from the queryset from view
        return y
票数 5
EN

Stack Overflow用户

发布于 2016-08-23 10:11:31

URL dispatcher将捕获该值并将其传递给视图。像这样的东西可能会起作用:

URLconf

代码语言:javascript
代码运行次数:0
运行
复制
from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^regression/[+-]?\d+.\d+?/$', views.regression),
]

views.py

代码语言:javascript
代码运行次数:0
运行
复制
def regression(request, x)
    x = float(x)
    pars = SimpleEquation.objects.all()[0]
    a = pars.a
    b = pars.b
    y = a*x + b
    return y
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39091108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档