小编Joh*_*fis的帖子

同一域上的多个 Django 站点 - CSRF 失败

我有两个应用程序在同一域的不同端口上运行,都使用 csrf 中间件。

当我登录其中一个应用程序时,POST另一个应用程序的所有提交都会失败。
我认为是因为它们SESSION_COOKIE_DOMAIN是相同的。

我尝试更改SESSION_COOKIE_NAME,但是,两个站点上的'csrftoken'表单POST请求中都使用了 cookie,无论现在有一个具有我指定名称的新 cookie。

当我使用 AJAX 发布信息并从具有新名称的 cookie 获取 csrf 令牌时,它可以工作,但是,表单提交失败,CSRF 验证失败。

django cookies csrf django-csrf csrf-protection

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

Django 的 Distance 函数不返回 Distance 对象

这是在使用 @Nargiza:使用 GeoDjango 进行 3d 距离计算解决此问题的过程中出现的意外行为。

遵循关于距离 函数的Django 文档:

接受两个地理字段或表达式并以 Distance 对象的形式返回它们之间的距离

Distance 对象中,我们可以获得每一个支持的单位的距离。

但:

设模型为:

class MyModel(models.Model):
    ...
    coordinates = models.PointField()
Run Code Online (Sandbox Code Playgroud)

然后是以下内容:

p1 = MyModel.objects.get(id=1).coordinates
p2 = MyModel.objects.get(id=2).coordinates
d = Distance(p1, p2) # This is the function call, 
                     # so d should be a Distance object
print d.m
Run Code Online (Sandbox Code Playgroud)

p1应打印和之间的距离p2(以米为单位)。

相反,我们收到以下错误:

AttributeError: 'Distance' object has no attribute 'm'
Run Code Online (Sandbox Code Playgroud)

我们最终找到了解决方法(d = Distance(m=p1.distance(p2))),但问题仍然存在:

为什么Distance 函数没有返回Distance 对象 …

python django geodjango

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

Flower Http Api 获取 Celery 任务详情

我有一个正在工作的芹菜花项目。
现在我想要一些 celery 失败的任务详细信息flower http api,但是我的 celery--basic-auth用于身份验证,并且当我flower http apihttp://localhost:5555/api/tasks它超时时发出请求并且不显示任何结果。

我不明白这是身份验证问题还是其他问题。我看花文档,但我没有任何想法。谢谢你的时间。下面是对我不起作用的代码。

import requests

params = (('state', 'FAILURE'),('limit', '5'),)

requests.get('http://localhost:5555/api/tasks', params=params)
Run Code Online (Sandbox Code Playgroud)

python celery flower

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

工厂男孩和相关对象的创建

假设您具有以下相关的Django模型:

class Service:
   restaurant = models.ForeignKey(Restaurant)
   hist_day_period = models.ForeignKey(DayPeriod)

class DayPeriod:
   restaurant = models.ForeignKey(Restaurant)
Run Code Online (Sandbox Code Playgroud)

我想Service使用Factory 创建一个对象。它应该创建所有3个模型,但使用一家餐厅。

使用此代码:

class ServiceFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Service

    restaurant = factory.SubFactory('restaurants.factories.RestaurantFactory')

    hist_day_period = factory.SubFactory(
        'day_periods.factories.DayPeriodFactory', restaurant=restaurant)
Run Code Online (Sandbox Code Playgroud)

工厂男孩将创建2家不同的餐厅:

s1 = ServiceFactory.create()
s1.restaurant == s1.hist_day_period.restaurant
>>> False
Run Code Online (Sandbox Code Playgroud)

关于如何执行此操作的任何想法?我不清楚我是否应该使用related factors而不是SubFactory完成此操作。

python django unit-testing factory factory-boy

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

使用pytest-django对现有数据库运行测试

有人知道如何针对现有(例如生产)数据库使用pytest-django运行Django测试吗?
我知道通常这不是单元测试应该做的,但就我而言,我是在Heroku上运行测试。默认情况下,Django创建一个新的测试数据库,但是,这在Heroku上是不可能的。

我找到了一个无需pytest-django(python manage.py test)即可使用的解决方案:https : //gist.github.com/gregsadetsky/5018173,
但据我了解,pytest-django并未利用Django中定义的测试运行器设置。

如果有人对在Heroku上使用pytest-django运行Django测试的另一种方法(例如,通过自动创建测试数据库的方式),我也对该解决方案感到满意。

python django postgresql heroku pytest

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

用Django识别哪个多边形包含一个点?

我需要快速识别 Django 1.9 中一组点属于哪些多边形。

第一个选项是循环遍历所有多边形并检查它们包含哪些点:

for countrypolygon in countrypolygons:
    placesinthecountry = Place.objects.filter(lnglat__intersects=countrypolygon.geom)
Run Code Online (Sandbox Code Playgroud)

这需要很多时间,因为我需要循环遍历很多多边形。

是否可以做相反的事情,即循环遍历每个点并立即获取包含该点的多边形?

python django polygon geodjango intersect

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

如何在Sanic中使用aiohttp ClientSession?

我试图了解什么是与Sanic一起使用aiohttp的正确方法。

从aiohttp 文档中,我发现以下内容:

不要为每个请求创建会话。每个应用程序很可能需要一个会话来执行所有请求。更复杂的情况可能需要在每个站点上进行一次会话,例如,一个会话用于Github,另一个会话用于Facebook API。无论如何,为每个请求建立会话是一个非常糟糕的主意。会话内部包含一个连接池。连接重用和保持活动状态(默认情况下均处于启用状态)可能会提高整体性能。

当我去Sanic文档时,我会找到一个这样的例子:

这是一个例子:

from sanic import Sanic
from sanic.response import json

import asyncio
import aiohttp

app = Sanic(__name__)

sem = None

@app.route("/")
async def test(request):
    """
    Download and serve example JSON
    """
    url = "https://api.github.com/repos/channelcat/sanic"

    async with aiohttp.ClientSession() as session:
         async with sem, session.get(url) as response:
         return await response.json()

app.run(host="0.0.0.0", port=8000, workers=2)
Run Code Online (Sandbox Code Playgroud)

这不是管理aiohttp会话的正确方法...

那么正确的方法是什么?
我应该在应用程序中启动会话并将会话注入到所有层中的所有方法吗?

我发现的唯一问题是这个,但这无济于事,因为我需要创建自己的类来使用该会话,而不是sanic。
还可以在Sanic文档中找到内容,该文档指出您不应在eventloop之外创建会话。

我有点困惑:(正确的方法是什么?

python asynchronous python-3.x aiohttp sanic

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

Django创建并保存创建另一个对象时的许多模型实例

我正在设计一盘国际象棋,我想在新的开始之后用国际象棋人物(国家模型)初始化这些领域ChessParty.
我读到了重写save()模型方法,但我不知道如何在我的情况下使用它.
我正在阅读类似的信号post_save,但我有同样的问题.

这样的东西可以工作吗?

    def save(self, *args, **kwargs):
        (Here i want create many instances of another Model)
    super(ChessParty, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的代码:

class ChessParty(models.Model):
    chessparty_id = models.AutoField("ID partii", primary_key=True)
    arbiter = models.ForeignKey(Arbiter, related_name='sedzia', 
    verbose_name="S?dzia")
    white = models.ForeignKey(Player, related_name='Bia?e', 
    verbose_name="Bia?e figury")
    black = models.ForeignKey(Player, related_name='Czarne', 
    verbose_name="Czarne figury")
    tournament = models.ForeignKey(Tournament, verbose_name="Nazwa turnieju")

    def __str__(self):
        return "{white} vs {black}, ({tournament})"\
            .format(black=self.black, white=self.white, tournament=self.tournament)


class OneMove(models.Model):
party = models.ForeignKey(ChessParty, default='0', verbose_name="Partia")
chessman = (
    ('a1_w_rook', 'bia?a wie?a a1'), …
Run Code Online (Sandbox Code Playgroud)

python django

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

Django - 导入错误:无法导入名称 Celery

这是我第一次使用 celery,我浏览了本教程:将 celery 与 Django 一起使用,
但是当我运行代码时,它给了我以下错误:

from celery import Celery
ImportError: cannot import name Celery
Run Code Online (Sandbox Code Playgroud)

怎么了 ?
谢谢

django importerror celery

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

readyState = 4行中的三次.Ajax - 由警报引起

我有一个奇怪的情况.

尝试双击这个小提琴上的"疯狂" .你会注意到onreadystatechange被称为3次.所有这些时间readyState = 4.对我来说,这是疯了.

但是zinger是当我alert(added)从双击事件监听器函数中移除如此小提琴所示,那么一切都还可以.

是否有人可以向我解释发生了什么?这对我来说很奇怪.谢谢你.:)

javascript ajax stack

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

似乎无法从芹菜任务修改缓存值

描述:

我想要一个缓存值(让我们称之为 a flag)来知道 celery 任务何时完成执行。我有一个视图让前端轮询这个标志,直到它变成False.

代码:

  • settings.py

    ...
    MEMCACHED_URL = os.getenv('MEMCACHED_URL', None) # Cache of devel or production
    if MEMCACHED_URL:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
                'LOCATION': MEMCACHED_URL,
             }
        }
    else:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',
            }
        }
    
    Run Code Online (Sandbox Code Playgroud)
  • api/views.py

    def a_view(request):
        # Do some stuff
        cache.add(generated_flag_key, True)
        tasks.my_celery_task.apply_async([argument_1, ..., generated_flag_key])
        # Checking here with cache.get(generated_flag_key), the value is True.
        # Do other stuff.
    
    Run Code Online (Sandbox Code Playgroud)
  • tasks.py

    @shared_task
    def my_celery_task(argument_1, ..., …
    Run Code Online (Sandbox Code Playgroud)

python django django-cache celery django-rest-framework

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

Django 1.11逐块下载文件

就我而言,我让Django 1.11服务器充当代理。当您从浏览器中单击“下载”时,它将向django代理发送请求,该代理从另一台服务器下载文件并进行处理,然后它们必须“发送”到浏览器以允许用户下载它们。我的代理服务器逐块下载并处理文件。如何准备好将块发送到浏览器,以便用户最终下载单个文件?

实际上,我必须让您下载尚未准备好的文件(例如流)。

def my_download(self, res)

   # some code
   file_handle = open(local_path, 'wb', self.chunk_size)

   for chunk in res.iter_content(self.chunk_size):
        i = i+1
        print("index: ", i, "/", chunks)
        if i > chunks-1:
            is_last = True

        # some code on the chunk

        # Here, instead of saving the chunk locally, I would like to allow it to download it directly.
        file_handle.write(chunk)
    file_handle.close()

    return True
Run Code Online (Sandbox Code Playgroud)

预先谢谢您的问候。

python django streaming download

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

MakeValid不适用于单个模型对象

我正在尝试MakeValid修复(验证)我的几何字段.
我可以通过获取和更新单行来使其工作:

from django.contrib.gis.db.models.functions import MakeValid

MyModel.objects.filter(id=<id>).update(polygon=MakeValid('polygon'))
Run Code Online (Sandbox Code Playgroud)

但是对于某些情况,我必须更新polygon已经在函数中实例化的单个模型对象(意味着我已经完成了.filter/ .get),这给了我以下错误:

// np is an object of MyModel which has a field 'polygon' which is `MultiPolygon` django model field
np.polygon = MakeValid(np.polygon)
// np.save()
TypeError: Cannot set MyModel SpatialProxy (MULTIPOLYGON) with value of type: <class 'django.contrib.gis.db.models.functions.MakeValid'>
Run Code Online (Sandbox Code Playgroud)

这里,MakeValid(np.polygon)不返回MultiPolygon对象.相反,它返回一个django.contrib.gis.db.models.functions.MakeValid包装器.

我可以从中获取Geometry对象MakeValid吗?

python django postgis django-views geodjango

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