小编Saq*_*Ali的帖子

JSON中的Big Integer被Angular破坏而不是被CURL破坏?

我使用Django Rest Framework创建了一个Django REST API .

我使用3个不同的客户来点击这个应用程序:

  • 卷曲(用于调试目的)
  • Swagger接口(用于调试目的)
  • 我的Angular应用程序

我有一个令人困惑的问题,即API返回的数据被Swagger和Angular损坏,而不是被Curl破坏.

我的Django模型看起来像这样:

class MyModel1(CachingMixin, models.Model):
    id = models.BigIntegerField(default=make_id, primary_key=True)
    name = models.CharField(max_length=50, null=False, blank=False,)
Run Code Online (Sandbox Code Playgroud)

这里make_id()描述上面引用的方法.我最近从标准的Django分配和自动递增的主键实现了这一变化.作为改变的一部分,我将id从IntegerFielda 转换为a BigIntegerField.

我有一些其他Django视图代码(我在这里没有显示)创建一个名为的端点GetMyModel1ByName.该端点返回一个序列化的实例MyModel1.这是卷曲,显示当我点击该端点时会发生什么.它完美地运作:

$ curl http://localhost:4212/api/getMyModel1ByName/?name=my-name
{"id": 10150133855458395, "name": "my-name"}
Run Code Online (Sandbox Code Playgroud)

现在,当我从Chrome的开发者控制台访问同一个端点时会发生什么:

> $http = angular.element(document.body).injector().get('$http');
> $http.get("http://localhost:4212/api/getMyModel1ByName/?name=my-name").then(function(response) { console.log(JSON.stringify(response.data)) }).catch(function (error) { console.log(error.data) });
{"id":10150133855458396, "name":"my-name"}
Run Code Online (Sandbox Code Playgroud)

正如您所见,curl将ID报告为10150133855458395.这是正确的.这就是数据库中的内容.但Angular将其报告为1015013385545839 6.最后的数字是错误的.差异是1.这是非常令人惊讶的!

这是一个真正令人困惑的错误.我的Django代码非常简单,我非常有信心它没有错误.相反,我觉得这个改变id从外地IntegerFieldBigIntegerField可能导致此问题.为什么会这样,解决方案是什么?它破坏了我的应用程序的功能.当我通过Swagger点击此端点时,我看到同样的损坏.

编辑:另一个提问者遇到了同样的问题.很高兴知道我不是唯一一个!但是,这个问题的答案并不是真正的答案.他们没有解释原因.他们没有告诉我如何在Angular JS代码中解决问题.

python django rest json angularjs

6
推荐指数
2
解决办法
735
查看次数

如何记录所有Django表单验证错误?

在我的Django应用程序中,我有一个forms.py文件,在其中定义了与表单输入屏幕相对应的类的负载。这些类中的每一个都在特定于属性/字段的_clean()函数或表单类的总体clean()函数中进行一些验证。如果在这些clean()函数中的任何一个函数中验证均失败,则会引发如下错误:

raise forms.ValidationError('Invalid value dude!!')                
Run Code Online (Sandbox Code Playgroud)

出现此类错误时,应用程序会捕获该错误并将其显示在表单上,​​以供用户使用。

我还在此文件的顶部定义了一个记录器,如下所示:

import logging
logger = logging.getLogger(__name__)
Run Code Online (Sandbox Code Playgroud)

现在,除了向用户报告ValidationErrors外,我还想捕获它们并将它们记录为错误。是否可以通过某种通用且优雅的方法来使记录器记录所有此类错误,而无需更改影响应用程序用户的任何其他行为?

django django-forms

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

菊花链Python/Django自定义装饰器

菊花链Python/Django自定义装饰器是不错的风格?通过不同的论点而不是收到?

我的许多Django视图函数都以完全相同的代码开始:

@login_required
def myView(request, myObjectID):
    try:
        myObj = MyObject.objects.get(pk=myObjectID)
    except:
        return myErrorPage(request)       

    try:
        requester = Profile.objects.get(user=request.user)
    except:
        return myErrorPage(request)

    # Do Something interesting with requester and myObj here
Run Code Online (Sandbox Code Playgroud)

仅供参考,这是urls.py文件中的相应条目:

url(r'^object/(?P<myObjectID>\d+)/?$', views.myView, ),
Run Code Online (Sandbox Code Playgroud)

在许多不同的视图函数中重复相同的代码根本不是DRY.我想通过创建一个装饰器来改进它,它将为我做这个重复的工作,并使新的视图功能更清洁,看起来像这样:

@login_required
@my_decorator
def myView(request, requester, myObj):        
    # Do Something interesting with requester and myObj here
Run Code Online (Sandbox Code Playgroud)

所以这是我的问题:

  1. 这是有效的吗?这是好风格吗?请注意,我将更改myView()函数的签名.这对我来说有点奇怪和危险.但我不确定为什么
  2. 如果我创建多个这样的装饰器来执行一些常见的功能但是每个调用包装函数的参数与装饰器接收的参数不同,那么将菊花链接在一起是否可以?
  3. 如果对上面的#1和#2没问题,那么向这个myView的用户指出他们应该传递的参数集的最佳方法是什么(因为只是查看函数定义中的参数不再是真有效)

python django python-decorators

5
推荐指数
3
解决办法
710
查看次数

为什么在我做SSHFS时目录消失了?如何在Max OSX 10.9上设置SSHFS共享?

我正在运行Max OSX 10.9.3,我正在尝试在MacBook Pro和远程文件系统之间设置SSHFS文件共享.但是,当我尝试这样做时,它不起作用.

奇怪的是,它使目标目录消失.还有其他人看到过这种情况吗?这是一个错误吗?

首先看到我可以正常进入目标机器:

% ssh remoteuser@XXX.XXX.XXX.XXX            # <--- SSH to remote system works! See below.
remoteuser@XXX.XXX.XXX.XXX % ls -altr remoteDir
total 8
drwxr-xr-x 26 remoteuser remoteuser 4096 Jun 22 01:00 ..
drwxrwxrwx  2 remoteuser remoteuser 4096 Jun 22 01:08 .
remoteuser@XXX.XXX.XXX.XXX % exit
%                                           # <--- Logged out of remote system
Run Code Online (Sandbox Code Playgroud)

接下来,我在本地创建一个目录并验证它是否已创建:

% pwd
/mnt

% ls
total 0
drwxr-xr-x  31 root  admin  1122 Jun 18 18:34 ../
drwxr-xr-x   2 root  admin    68 Jun 23 08:11 ./ …
Run Code Online (Sandbox Code Playgroud)

macos file-sharing sshfs

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

如何以原子方式将项添加到memcached列表(在Python中)

看看下面我简单的Python memcached代码:

import memcache
memcache_client = memcache.Client(['127.0.0.1:11211'], debug=True)
key = "myList"
obj = ["A", "B", "C"]
memcache_client.set(key, obj)
Run Code Online (Sandbox Code Playgroud)

现在,假设我想将一个元素"D"附加到缓存的列表中myList,我该如何原子地执行它?

我知道这是错的,因为它不是原子的:

memcache_client.set(key, memcache_client.get(key) + ["D"])
Run Code Online (Sandbox Code Playgroud)

上述声明包含竞争条件.如果另一个线程在恰当的时刻执行同一条指令,其中一个更新将被破坏.

我怎样才能解决这种竞争条件?如何以原子方式更新存储在memcached中的列表或字典?

python memcached multithreading atomicity

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

如何在其他字段上过滤Django Queryset?

这是我的Django模型:

from django.db import models
class MyModel(models.Model):
    a = models.IntegerField()
    b = models.IntegerField()
    c = models.IntegerField()
Run Code Online (Sandbox Code Playgroud)

我想取出这个模型中的所有实例a = 5b + c > 10。我该怎么做?

当我尝试这个:

print MyModel.objects.filter(a=5).extra(
    select={"total_count": "b + c"},
    where=["total_count > 10"],
)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

OperationalError: (1054, "Unknown column 'total_count' in 'where clause'")
Run Code Online (Sandbox Code Playgroud)

python django orm django-queryset

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

如何在 AWS Cloudformation 模板文件中获取用户名?

我在 Cloudformation 模板文件中定义了资源,标签定义如下:

  "Properties": {
    "Tags": [
      { "Key": "Environment", "Value": {"Ref": "Environment"}},
      { "Key": "Hello", "Value": "World"}
    ]
  }
Run Code Online (Sandbox Code Playgroud)

我的 IAM 用户名是my.name. 我想添加一个名为属性的键Creator,其Tags值为我的用户名 ( my.name)。此外,我需要此值来反映运行此 Cloudformation 模板的用户的用户名。我该怎么做?

amazon-web-services aws-cloudformation

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

如何在Javascript中获取浏览器的时区字符串?

我想在我的网页上显示用户 Timezone的全名。例如:

Eastern Standard Time (North America)
Pacific Daylight Time (North America)
West Africa Time
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 Javascript 中做到这一点?我见过呈现如下内容的解决方案:America/New_York. 但这并不是我真正要寻找的。

javascript timezone

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

为什么gunicorn 工作人员的工作分配不均匀?

我正在运行我的大型、面向公众的 Web 应用程序。它是一个 python HTTP 后端服务器,每分钟响应数千个 HTTP 请求。它是用 Flask 和 SQLAlchemy 编写的。该应用程序在 AWS 的 EC2 上运行。实例类型为c3.2xlarge(具有 8 个 CPU)。

我使用 Gunicorn 作为我的网络服务器。Gunicorn 有 17 个工作进程和 1 个主进程。下面你可以看到 17 个 Gunicorn 工人:

$ sudo ps -aefF | grep gunicorn | grep worker | wc -l
17

$ sudo ps -aefF --sort -rss | grep gunicorn | grep worker
UID       PID  PPID  C      SZ     RSS PSR STIME TTY     TIME                           CMD
my-user 15708 26468  6 1000306 3648504   1 Oct06   ? 08:46:19 …
Run Code Online (Sandbox Code Playgroud)

scheduling round-robin gunicorn

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

如何在 Go 中将 Postgres UUID 转换回人类可读的字符串?

UUID Go Postgres 库定义了这样的类型:

\n
type UUID struct {\n    UUID   uuid.UUID\n    Status pgtype.Status\n}\n\nfunc (dst *UUID) Set(src interface{}) error {\n<Remainder Omitted>\n\n\n    \n
Run Code Online (Sandbox Code Playgroud)\n

我的代码使用这个库:

\n
import pgtype/uuid\n\nstring_uuid := uuid.New().String()\nfmt.Println("string_uuid = ", string_uuid)\nmyUUID := pgtype.UUID{}\nerr = myUUID.Set(string_uuid)\nif err != nil {\n    panic()\n}\nfmt.Println("myUUID.Bytes = ", myUUID.Bytes)\nfmt.Println("string(myUUID.Bytes[:]) = ", string(myUUID.Bytes[:]))\n
Run Code Online (Sandbox Code Playgroud)\n

这是输出:

\n
string_uuid =  abadf98f-4206-4fb0-ab91-e77f4380e4e0\nmyUUID.Bytes =  [171 173 249 143 66 6 79 176 171 145 231 127 67 128 228 224]\nstring(myUUID.Bytes[:]) =  \xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdBO\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbdC\xef\xbf\xbd\xef\xbf\xbd\xef\xbf\xbd\n
Run Code Online (Sandbox Code Playgroud)\n

abadf98f-4206-4fb0-ab91-e77f4380e4e0一旦将其放入myUUIDwhich is 类型中,如何才能恢复到原始的人类可读的 UUID …

byte go

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