小编Max*_*ulo的帖子

Django Rest Framework在url中使用dot

使用DRF(Django Rest Framework)我的一个模型有一个IP地址作为主键.

class VTE(models.Model):
  ipaddr = models.CharField(primary_key=True, max_length=16)
  ...
Run Code Online (Sandbox Code Playgroud)

问题是PK包含点,并且当组装REST URL时,点被DRF解释为格式化选项,而不是主键的一部分.请参阅下面的错误和匹配的模式.

Request URL:    http://192.168.10.121/api/vtes/172.25.128.29/

Using the URLconf defined in vtfx.urls, Django tried these URL patterns, in this order:

...
^api/ ^$ [name='api-root']
^api/ ^\.(?P<format>[a-z0-9]+)$ [name='api-root']
^api/ ^vtes/$ [name='vte-list']
^api/ ^vtes/\.(?P<format>[a-z0-9]+)$ [name='vte-list']   <---- HERE
^api/ ^vtes/(?P<pk>[^/.]+)/$ [name='vte-detail']
^api/ ^vtes/(?P<pk>[^/.]+)/\.(?P<format>[a-z0-9]+)$ [name='vte-detail']
...
Run Code Online (Sandbox Code Playgroud)

使用点作为主键的一部分是错误的吗?如果不是,它与DRF路由器组装URL的方式不一致.

有DRF方法可以解决这个问题吗?

更新:上下文

api.py:
 class VTESerializer(serializers.ModelSerializer):
     class Meta:
         model = models.VTE

 class VTEViewSet(viewsets.ModelViewSet):
     queryset = models.VTE.objects.all()
     serializer_class = VTESerializer
     permission_classes = (permissions.AllowAny,)

urls.py:
 router = routers.DefaultRouter()
 router.register(r'vtes', api.VTEViewSet) …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

8
推荐指数
1
解决办法
3143
查看次数

django rest 框架 PUT 返回 404 而不是创建对象

我希望能够使用相同的请求创建或更新对象。该操作应该是幂等的。

如果对象存在,则向 DRF 发送 PUT 请求按预期工作,但如果对象不存在,我会得到 404 而不是创建它。

模型.py:

class Btilog(models.Model):
    md5hash = models.CharField(primary_key=True, max_length=32)
    vteip = models.ForeignKey('vte.VTE')
    timestamp = models.DateTimeField(blank=False)
    source = models.TextField()
    code = models.CharField(max_length=10, blank=False)
    msg = models.TextField(blank=False)
Run Code Online (Sandbox Code Playgroud)

api.py:

class BtilogSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.Btilog

class BtilogVSet(viewsets.ModelViewSet):
    queryset = models.Btilog.objects.all()
    serializer_class = BtilogSerializer
    permission_classes = (permissions.AllowAny,)
Run Code Online (Sandbox Code Playgroud)

网址.py:

...
router = routers.DefaultRouter()
router.register(r'btilog', api.BtilogVSet)

urlpatterns = patterns('',
    url(r'^api/', include(router.urls)),
    ...
)
Run Code Online (Sandbox Code Playgroud)

失败的请求

http --form PUT http://192.168.10.121:8888/logger/api/btilog/60c6b9e99c43c0bf4d8bc22d671169b1/ vteip='172.25.128.85' 'code'='Test' 'md5hash'='60c6b9e99c43c0bf4d8bc22d671169b1' 'timestamp'='2015-05-31T13:34:01' msg='Test' source='Test'
HTTP/1.0 404 NOT FOUND
Allow: …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

5
推荐指数
1
解决办法
3679
查看次数

用Highstock显示缺失数据的差距

使用Highstock绘制排序时间系列: [[timestamp, value], ...]

数据源以不规则的间隔进行采样.结果,两点之间的距离(在时间轴上)变化.

如果两个相邻点分开超过5分钟,我想在图表中显示间隙.

使用该gapSize选项不起作用,因为它不允许将间隙的"大小"指定为时间的函数.

显示差距已经是Highstock的一部分,我只需要一种方法将其指定为固定的时间(5分钟).想法?

顺便说一下,情节很好.

javascript highcharts highstock

5
推荐指数
1
解决办法
1078
查看次数

滑翔伞比赛中的最短路径

我是一名滑翔伞飞行员。滑翔伞比赛被定义为一组虚拟浮标。飞行通过所有浮标的飞行员首先获胜。

浮标由两个参数定义:

  • 点的坐标
  • 半径

这在3D空间中定义了一个圆柱体,但为简单起见,让我们将问题保留在2D中。比赛可能看起来像这样(近似图): 种族 A = 1000m; B = 3000m; C = 2000m;D = 500m

飞行员应该在A圈内开始,然后在B和C圈内飞行(或者至少“触摸”它),然后在D圈内结束。

您如何计算最佳(最短)路径?

结果应该是构成最短路径一部分的所有线段的坐标。

algorithm optimization shortest-path coordinates

5
推荐指数
1
解决办法
111
查看次数

运行命令直到返回代码大于 x

在 bash 脚本中,我需要运行一个命令,直到返回值大于 127。

现在,我在子 shell 中运行该命令,输出到 /dev/null 并打印返回代码以便能够将其与测试进行比较:

while [ `command >/dev/null 2>&1; echo $?` -lt 128 ]; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)

有更优雅的解决方案吗?看起来原生支持的唯一用例是测试 RC == 0 是否。

bash shell while-loop

2
推荐指数
1
解决办法
1054
查看次数

如何用django实现级联模型更新?

拥有以下型号:

class Comercio(models.Model):
    nombre = models.CharField(max_length=50)
    modify_date = models.DateTimeField(auto_now=True, auto_now_add=True)

class Menu(models.Model):
    comercio = models.ForeignKey(Comercio, blank=False)
    # Other fields here
    nombre = models.CharField(max_length=32)

class Item(models.Model):
    menu = models.ForeignKey(Menu, blank=False)
    # Other fields here
    nombre = models.CharField(max_length=32)
Run Code Online (Sandbox Code Playgroud)

每当相关的菜单或项目之一发生变化时,在Comercio上更新"modify_date"的正确方法是什么?

django

1
推荐指数
1
解决办法
1804
查看次数