当我用ndb的方法创建一个对象时,它会自动创建Key类型(kind,id),其中id是一个数字.在整个文档中,它显示您可以使用字符串作为密钥的id,但是在创建对象时我无法找到如何自动执行此操作.
我有一个用户模型,我正在考虑使用用户的用户名(因为它的唯一)作为密钥的ID,以便更快地检索.这是一个好主意吗?我是否会对用户名有任何问题,因为它是用户提交的(我正在验证输入)?
我正在尝试使用 dockerfile 将我的 django 应用程序部署到应用程序引擎,为此,在阅读了一些博客(例如这些)之后,我创建了一个 docker-compose.yml 文件,但是当我运行命令时docker compose up,docker-compose -f docker-compose-deploy.yml run --rm gcloud sh -c "gcloud app deploy"我收到了错误key cannot contain a space。见下文:
例如:
$ docker compose up
key cannot contain a space
Run Code Online (Sandbox Code Playgroud)
$ cat docker-compose.yml
version: '3.7'
services:
app:
build:
context: .
ports: ['8000:8000']
volumes: ['./app:/app']
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个错误吗?我已尝试 yamllint 验证 yaml 文件是否存在任何空格/缩进类型的错误,并且它没有向我显示任何错误。
编辑:这是较长命令中文件的内容:
version: '3.7'
services:
gcloud:
image: google/cloud-sdk:338.0.0
volumes:
- gcp-creds:/creds
- .:/app
working_dir: /app
environment:
- CLOUDSDK_CONFIG=/creds
volumes:
gcp-creds:
Run Code Online (Sandbox Code Playgroud) 我将在Gae上开发一个小型Web应用程序,其中包含注册部分,登录\注销等等.
由于Google App Engine不支持开箱即用的会话,而且我不想使用Google帐户限制访问,因此我不得不选择提供此类设施的框架.
我的选择是:
阅读它的书,Web2py似乎提供了会话对象并具有良好的访问控制,提供了一个实现基于角色的访问控制的Auth类.
我还不知道Djangoappengine,但我想它提供了Django Auth.
Webpy适用于appengine,但没有任何官方方式来处理GAE会话.
如果您使用过这些框架,那么您是否愿意分享在Google应用引擎上构建私有网站部分的经验?
我正在使用djangoappengine.当我尝试创建新用户,验证该用户并将其登录时,我收到以下错误AttributeError: 'AnonymousUser' object has no attribute 'backend'.
我的代码很简单,看起来像:
user = User.objects.create_user(username, username, password)
user.set_password(password)
user.save()
user = django.contrib.auth.authenticate(username=username, password=password)
django.contrib.auth.login(request, user)
Run Code Online (Sandbox Code Playgroud)
我只在生产中遇到以下错误,只是偶尔出现:
web req_create: 'AnonymousUser' object has no attribute 'backend'
Traceback (most recent call last):
File "/base/data/home/apps/s~XXXXX/1.356802202883392818/XXXX/XXX.py", line 332, in req_create
login(request, user)
File "/base/data/home/apps/s~XXXXX/1.356802202883392818/django/contrib/auth/__init__.py", line 82, in login
request.session[BACKEND_SESSION_KEY] = user.backend
AttributeError: 'AnonymousUser' object has no attribute 'backend'
Run Code Online (Sandbox Code Playgroud)
我不确定,但我有一种不好的感觉,这个异常是由于高复制数据存储及其最终的一致性.我认为这样authenticate()可以保存用户值并login()进行查询,但用户值尚未传播到HRDS中.任何人都可以证实这是真的吗?如果是这样,它将如何修复?
python django google-app-engine django-nonrel djangoappengine
我希望保护我的任务队列URL免受恶意访问.
在任务队列请求我的视图中:
if not users.is_current_user_admin():
return HttpResponse(status=403)
Run Code Online (Sandbox Code Playgroud)
但我的任务队列收到403错误!我从这个GAE文档中得到的印象是,任务队列用户已被gauranteed称为管理员.是什么赋予了?
注意:我正在使用DjangoNonRel,所以我无法在我的指定管理员唯一的URL访问app.yaml,我必须在视图中以编程方式.
django google-app-engine task-queue django-nonrel djangoappengine
这似乎应该是一个简单的问题.但是文档似乎没有回答它.使用他们的例子,我想这样做:
Account.query(Account.title == "best")
Run Code Online (Sandbox Code Playgroud)
除了我想匹配部分字符串.所以在这种情况下:
acct = Account(title="the best account in the world")
Run Code Online (Sandbox Code Playgroud)
带参数"best"的ndb查询将匹配acct.
我看到目前唯一的选择是遍历Account.query()并相互匹配title与re.search在Python模块.这似乎不是一个好的解决方案.
更新:我也在看gql.这样做:
acct = ndb.gql('SELECT * from Account WHERE title LIKE '%best%')
Run Code Online (Sandbox Code Playgroud)
返回一个 Parse Error: Invalid WHERE Condition at symbol LIKE
我使用djangoappengine模块进行拼接,在Google App Engine上运行django 1.5 .一切正常,除了大约一半的/ _ah/queue/deferred调用引发以下导入错误:
Traceback (most recent call last):
File "..../third_party/djangoappengine/deferred/handler.py", line 2, in <module>
from djangoappengine import main
ImportError: No module named djangoappengine
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,djangoappengine模块坐在里面third_party目录,这个目录添加到sys.path中appengine_config.py文件,所以不应该有做任何的问题from djangoappengine import main:
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'third_party'))
Run Code Online (Sandbox Code Playgroud)
相关的一行app.yaml是:
handlers:
- url: /_ah/queue/deferred
script: third_party/djangoappengine/deferred/handler.py
login: admin
Run Code Online (Sandbox Code Playgroud)
导致这些零星导入错误的原因是什么?难道我做错了什么?也许有一个我不知道的导入循环?
我需要构建一个带有重复属性的逻辑查询,但无法使其工作.我有一个主题列表对象.
topics = [u'string1', u'string2', ...]
Run Code Online (Sandbox Code Playgroud)
我有一个查询对象:
videos = Video.query()
videos.count()
=> 19
Run Code Online (Sandbox Code Playgroud)
主题是重复的字符串属性
class Video
topics = ndb.StringProperty(repeated=True)
Run Code Online (Sandbox Code Playgroud)
我想要返回有主题string1OR的视频string2.我之前也不知道列表对象的长度,或者我可以用逻辑运算符来构建查询.
我尝试这样做就像文档建议的那样
videos.filter( Video.topics.IN([topics]) )
Run Code Online (Sandbox Code Playgroud)
但是会抛出IN期望字符串而不是列表对象的错误.
我该怎么做呢?
目前我正在尝试使用 djangoappengine 将现有的 Google App Engine 应用程序从 webapp2 移植到 django。
是否有等效的节省内存空间的方法来使用 Django 存储数据?因为免费用户在GAE中存储的数量是有限制的。
webapp2模型代码
class TagTrend_refine(ndb.Model):
tag = ndb.StringProperty()
trendData = ndb.BlobProperty(compressed=True)
Run Code Online (Sandbox Code Playgroud)
我知道 TextField 可以存储大量文本,但是它可以使用较少的内存进行存储吗?可以使用 BlobField 吗?
为 trendData 存储数据的示例(多达 24783 个字符)是
{"2008": "{\"nodes\": [{\"group\": 0, \"name\": \"ef-code-first\", \"degree\": 6}, {\"group\": 1, \"name\": \"gridview\", \"degree\": 6}, {\"group\": 2, \"name\": \"mvvm\", \"degree\": 6}, {\"group\": 1, \"name\": \"webforms\", \"degree\": 6}, {\"group\": 2, \"name\": \"binding\", \"degree\": 6}, {\"group\": 3, \"name\": \"web-services\", \"degree\": 6}, {\"group\": 2, \"name\": \"datagrid\", \"degree\": 6},...
Run Code Online (Sandbox Code Playgroud) 我有一种情况,当我的一个模型被保存时,MyModel我想检查一个字段,并在任何其他模型中触发相同的更改some_key.
代码工作正常,但它递归调用信号。结果我在浪费 CPU/DB/API 调用。我基本上想在.save(). 任何建议期间绕过信号?
class MyModel(models.Model):
#bah
some_field = #
some_key = #
Run Code Online (Sandbox Code Playgroud)
#in package code __init__.py
@receiver(models_.post_save_for, sender=MyModel)
def my_model_post_processing(sender, **kwargs):
# do some unrelated logic...
logic = 'fun! '
#if something has changed... update any other field with the same id
cascade_update = MyModel.exclude(id=sender.id).filter(some_key=sender.some_key)
for c in cascade_update:
c.some_field = sender.some_field
c.save()
Run Code Online (Sandbox Code Playgroud) djangoappengine ×10
django ×5
python ×3
docker ×1
dockerfile ×1
session ×1
signals ×1
task-queue ×1
web.py ×1
web2py ×1
yaml ×1