标签: djangoappengine

Google App Engine NDB自定义密钥ID

当我用ndb的方法创建一个对象时,它会自动创建Key类型(kind,id),其中id是一个数字.在整个文档中,它显示您可以使用字符串作为密钥的id,但是在创建对象时我无法找到如何自动执行此操作.

我有一个用户模型,我正在考虑使用用户的用户名(因为它的唯一)作为密钥的ID,以便更快地检索.这是一个好主意吗?我是否会对用户名有任何问题,因为它是用户提交的(我正在验证输入)?

python google-app-engine djangoappengine app-engine-ndb

23
推荐指数
2
解决办法
8797
查看次数

运行 docker compose 时出现“密钥不能包含空格”错误

我正在尝试使用 dockerfile 将我的 django 应用程序部署到应用程序引擎,为此,在阅读了一些博客(例如这些)之后,我创建了一个 docker-compose.yml 文件,但是当我运行命令时docker compose updocker-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)

yaml djangoappengine docker dockerfile docker-compose

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

Google应用引擎用户Auth:Djangoappengine与Web2py对比Webpy

我将在Gae上开发一个小型Web应用程序,其中包含注册部分,登录\注销等等.
由于Google App Engine不支持开箱即用的会话,而且我不想使用Google帐户限制访问,因此我不得不选择提供此类设施的框架.

我的选择是:

  1. 的web2py
  2. Djangoappengine
  3. Webpy

阅读它的书,Web2py似乎提供了会话对象并具有良好的访问控制,提供了一个实现基于角色的访问控制的Auth类.

我还不知道Djangoappengine,但我想它提供了Django Auth.

Webpy适用于appengine,但没有任何官方方式来处理GAE会话.

如果您使用过这些框架,那么您是否愿意分享在Google应用引擎上构建私有网站部分的经验?

session google-app-engine web2py web.py djangoappengine

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

Django App Engine:AttributeError:'AnonymousUser'对象没有属性'后端'

我正在使用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

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

正确保护GAE任务队列URL(不使用app.yaml)

我希望保护我的任务队列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

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

ndb查询部分字符串匹配

这似乎应该是一个简单的问题.但是文档似乎没有回答它.使用他们的例子,我想这样做:

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()并相互匹配titlere.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

google-app-engine djangoappengine app-engine-ndb

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

/ _ah/queue/deferred奇怪的导入错误

我使用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.pathappengine_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)

导致这些零星导入错误的原因是什么?难道我做错了什么?也许有一个我不知道的导入循环?

python django google-app-engine djangoappengine

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

如何使用google appengine ndb中的列表对象查询重复属性

我需要构建一个带有重复属性的逻辑查询,但无法使其工作.我有一个主题列表对象.

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期望字符串而不是列表对象的错误.

我该怎么做呢?

google-app-engine djangoappengine app-engine-ndb

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

节省空间的 Django 模型类型可存储大量文本

目前我正在尝试使用 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)

django google-app-engine djangoappengine

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

Django,post_save 信号恢复。如何绕过信号触发

我有一种情况,当我的一个模型被保存时,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)

django google-app-engine signals djangoappengine

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