小编JPG*_*JPG的帖子

无法使用docker-compose启动Celery

我在Celery worker和Redis上安装了Flask应用程序,并且在本地计算机上运行时按预期正常工作。然后,我尝试对应用程序进行Dockerize。当我尝试构建/启动服务(例如flask app,Celery和Redis)时,使用sudo docker-compose up除Celery之外的所有服务,并且显示错误为

ImportError:没有名为“ my_celery”的模块

但是,相同的代码在本地计算机上工作没有任何错误。有人可以提出解决方案吗?

Docker文件

FROM python:3.5-slim
WORKDIR celery_sample
ADD . /celery_sample
RUN pip install -r requirements.txt
EXPOSE 8000
Run Code Online (Sandbox Code Playgroud)

docker-compose.yml

version: "3"
services:

  web:
    build:
      context: .
      dockerfile: Dockerfile
    command: "python my_celery.py"
    ports:
      - "8000:8000"
    networks:
      - webnet
    volumes:
      - .:/celery_sample

  redis:
    image: redis
    networks:
      - webnet


  celery:
    image: celery:3.1.25
    command: "celery worker -A my_celery -l INFO"
    volumes:
      - .:/celery_sample
    networks:
      - webnet

networks:
  webnet:
Run Code Online (Sandbox Code Playgroud)

requirements.txt

flask==0.10
redis
requests==2.11.1
celery==3.1.25
Run Code Online (Sandbox Code Playgroud)

my_celery.py(请忽略逻辑)

from flask …
Run Code Online (Sandbox Code Playgroud)

celery flask docker dockerfile docker-compose

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

Django Rest 框架:没有模型

我正在努力使用 DRF(Django Rest Framework)创建 RESTAPI。API 只是接收用户的 Twitter 句柄并返回他的 Twitter 数据。

在这里,我没有使用模型,因为它不是必需的。

我应该在这里使用序列化器吗?如果是这样为什么?现在我可以在不使用序列化器的情况下返回数据。此外,我的 API 不可通过网络浏览。我应该如何使其可网络浏览:这是 DRF 的最佳功能之一。

编辑:1

我在视图中使用函数。

@api_view(['GET'])
@csrf_exempt
def getdetails(request):

    call the twitter api
    receive the data
    return HttpResponse(JsonResponse( {'data': {'twitter_id':id,'tweets':count,'Followers':followers,'following':count_follow}}))
Run Code Online (Sandbox Code Playgroud)

在浏览器中我只看到这样的 JSON 数据。

{“数据”:{“twitter_id”:352525,“推文”:121,“关注者”:1008,“关注”:281}}

django django-views django-rest-framework

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

DRF在create()方法中返回序列化对象

我正在为我的模型编写一个自定义创建方法:

class TripReportViewSet(viewsets.ModelViewSet):
    permission_classes = (permissions.IsAuthenticatedOrReadOnly,)
    serializer_class = TripReportSerializer
    pagination_class = TripReportSetPagination
    # To order by favorite count or 'top':
    queryset = TripReport.objects.all().annotate(count=Count('favoriters')).order_by('-count')
    #queryset = TripReport.objects.all().order_by('-pk')
    filter_backends = (filters.SearchFilter, filters.OrderingFilter)
    search_fields = ('=author__username', '=slug', 'countries__name', )
    ordering_fields = ('pk', )

    def create(self, request, **kwargs):
        countries = request.POST['countries'].split(',')
        countries = list(map(int, countries))
        countries = Country.objects.filter(pk__in=countries)

        instance = TripReport.objects.create(
            author=User.objects.get(pk=request.POST['author']),
            title=request.POST['title'],
            content=request.POST['content'],
        )
        instance.countries.set(countries)
        instance.save()
        return HttpResponse(TripReportSerializer(instance))
Run Code Online (Sandbox Code Playgroud)

我似乎无法得到正确的回应。我想返回我的序列化对象,但是

HttpResponse(instance)
Run Code Online (Sandbox Code Playgroud)

HttpResponse(TripReportSerializer(instance))
Run Code Online (Sandbox Code Playgroud)

给了我错误的结果。TripReportSerializer 是我用于视图的一个。

python django-serializer django-rest-framework

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

如何在 Django 管理中显示 auto_now_add 字段?

我有一个模型(如下所示),在其中,我设置auto_now_add=TrueDateTimeField

class Foo(models.Model):
    timestamp = models.DateTimeField(auto_now_add=True)
Run Code Online (Sandbox Code Playgroud)

从文档来看,

按照目前的实施,设置auto_nowauto_now_addtoTrue将导致字段具有editable=Falseblank=True设置。

问:如何auto_now_add在 Django Admin 中显示此字段?(默认情况下 Django Admin 不显示auto_now_add字段)

python django django-admin

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

“()”在python日志配置中有什么作用

我在uvicorn源代码中看到了一个 python dict 日志配置。

在那,他们将格式化程序定义为

{
    "default": {
        "()": "uvicorn.logging.DefaultFormatter",
        "fmt": "%(levelprefix)s %(asctime)s %(message)s",
        "datefmt": "%Y-%m-%d %H:%M:%S",

    },
    "access": {
        "()": "uvicorn.logging.AccessFormatter",
        "fmt": '%(levelprefix)s %(asctime)s :: %(client_addr)s - "%(request_line)s" %(status_code)s',
        "use_colors": True
    },
}
Run Code Online (Sandbox Code Playgroud)

此外,我们可以看到,他们定义了一个空的记录器(不知道我应该怎么称呼它),

"": {"handlers": ["default"], "level": "INFO"},
^^^^ - see, Empty key
Run Code Online (Sandbox Code Playgroud)

所以,这是我的问题,

  1. 什么是"()"在做格式化蟒蛇记录的部分?
  2. 什么是""在做伐木工人部分蟒蛇记录?

python python-3.x python-logging uvicorn

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

如何在 Django 中自定义 related_name 参数

我有一个抽象模型和两个子模型,例如:

class Invoice(models.Model):
    user = models.ForeignKey("User", related_name='%(class)s')

    class Meta:
        abstract=True

class SaleInvoice(Invoice):
    field_sale = models.CharField(max_length=255)

class PurchaseInvoice(Invoice):
    field_purchase = models.CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

现在,子模型的反向名称将是saleinvoicesand purchaseinvoices。但我需要的是sale_invoicespurchase_invoices。如何实现这一目标?CamelCase 之间有一个下划线。

python django django-models django-forms python-3.x

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

如何在DRF PageNumberPagination中设置动态page_size

在课堂上PostByFilters,我将limit作为url参数,我想将值分配给page_size课堂BasicSizePagination。我试图在这两个类之外使用全局变量,但是没有用。无论如何有重新初始化BasicSizePaginationin PostByFilters以便我可以直接分配in的值PostByFilters吗?

class BasicSizePagination(pagination.PageNumberPagination):
    page_size = 10

class PostByFilters(ListAPIView):
    serializer_class = serializers.PostSerializer
    pagination_class = BasicSizePagination

    def get_queryset(self):

        limit = self.request.query_params.get('limit', None)
        ...

        return queryset
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

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

导入错误:无法导入名称“DjangoFilterBackend”

升级到Django REST framework 3.7我后出现以下错误

  File "/home/jpg/Projects/django2x/sample/views.py", line 24, in <module>
    from rest_framework.filters import DjangoFilterBackend
ImportError: cannot import name 'DjangoFilterBackend'
Run Code Online (Sandbox Code Playgroud)

这是我的观点

from rest_framework.filters import DjangoFilterBackend
from rest_framework import viewsets


class FooViewSet(viewsets.ModelViewSet):
    queryset = Foo.objects.all()
    serializer_class = Foo_Serializer
    filter_backends = (DjangoFilterBackend,)
    filter_fields = ('foo_bar', 'bar_foo')
Run Code Online (Sandbox Code Playgroud)

django django-filter django-rest-framework

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

Django REST Framework (DRF) 中“可调用默认函数”的正确使用

题:

如何在DRF 字段的默认可调用函数中访问序列化程序实例任何相关参数


设想:

我有一个如下的序列化程序配置,

def bar_value_callable_function(serializer_instance):
    if serializer_instance.context['request'].method == 'GET':
        return 'return value One'
    return 'return value Two'

class FooSerializer(serializers.Serializer): bar = serializers.CharField(source='foo.bar', default=bar_value_callable_function)

Run Code Online (Sandbox Code Playgroud) 当我尝试将数据序列化为

serializer = FooSerializer(foo_instance, context={'request': request})
print(serializer.data)
Run Code Online (Sandbox Code Playgroud)

我收到错误,

TypeError: bar_value_callable_function() missing 1 required positional argument: 'serializer_instance'
Run Code Online (Sandbox Code Playgroud)

python django django-serializer django-rest-framework

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

如何将全局标头参数添加到 drf_spectaulous 中的所有 url 路径?

我正在使用 drf_spectaulous 来使用 swagger 并且它工作正常。我为 API 视图定义所需的参数(无论是在路径中还是在标头中),如下所示:

@extend_schema(
    OpenApiParameter(
            name='accept-language',
            type=str,
            location=OpenApiParameter.HEADER,
            description="fa or en. The default value is en"
    ),
)
Run Code Online (Sandbox Code Playgroud)

但我不想将这些代码行添加到我的所有 API 视图中。是否有捷径可寻?(类似于在 SPECTACULAR_SETTINGS 中定义这些代码行)

我已经在 drf_spectaulous 的文档中找到了APPEND_COMPONENTS选项,但我对此并不熟悉。

django swagger django-rest-framework http-accept-language drf-spectacular

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