我使用Django Rest Framework创建了一个Django REST API .
我使用3个不同的客户来点击这个应用程序:
我有一个令人困惑的问题,即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从外地IntegerField到BigIntegerField可能导致此问题.为什么会这样,解决方案是什么?它破坏了我的应用程序的功能.当我通过Swagger点击此端点时,我看到同样的损坏.
编辑:另一个提问者遇到了同样的问题.很高兴知道我不是唯一一个!但是,这个问题的答案并不是真正的答案.他们没有解释原因.他们没有告诉我如何在Angular JS代码中解决问题.
在我的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外,我还想捕获它们并将它们记录为错误。是否可以通过某种通用且优雅的方法来使记录器记录所有此类错误,而无需更改影响应用程序用户的任何其他行为?
菊花链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)
所以这是我的问题:
我正在运行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) 看看下面我简单的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中的列表或字典?
这是我的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 = 5和b + 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) 我在 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 模板的用户的用户名。我该怎么做?
我想在我的网页上显示用户 Timezone的全名。例如:
Eastern Standard Time (North America)
Pacific Daylight Time (North America)
West Africa Time
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 Javascript 中做到这一点?我见过呈现如下内容的解决方案:America/New_York. 但这并不是我真正要寻找的。
我正在运行我的大型、面向公众的 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) UUID Go Postgres 库定义了这样的类型:
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 \nRun Code Online (Sandbox Code Playgroud)\n我的代码使用这个库:
\nimport 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[:]))\nRun Code Online (Sandbox Code Playgroud)\n这是输出:
\nstring_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\nRun Code Online (Sandbox Code Playgroud)\nabadf98f-4206-4fb0-ab91-e77f4380e4e0一旦将其放入myUUIDwhich is 类型中,如何才能恢复到原始的人类可读的 UUID …
django ×4
python ×4
angularjs ×1
atomicity ×1
byte ×1
django-forms ×1
file-sharing ×1
go ×1
gunicorn ×1
javascript ×1
json ×1
macos ×1
memcached ×1
orm ×1
rest ×1
round-robin ×1
scheduling ×1
sshfs ×1
timezone ×1