我在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) 我正在努力使用 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}}
我正在为我的模型编写一个自定义创建方法:
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 是我用于视图的一个。
我有一个模型(如下所示),在其中,我设置auto_now_add=True了DateTimeField
class Foo(models.Model):
timestamp = models.DateTimeField(auto_now_add=True)Run Code Online (Sandbox Code Playgroud)
从文档来看,
按照目前的实施,设置
auto_now或auto_now_addtoTrue将导致字段具有editable=False和blank=True设置。
问:如何auto_now_add在 Django Admin 中显示此字段?(默认情况下 Django Admin 不显示auto_now_add字段)
我在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)
所以,这是我的问题,
"()"在做格式化蟒蛇记录的部分?""在做伐木工人部分蟒蛇记录?我有一个抽象模型和两个子模型,例如:
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_invoices和purchase_invoices。如何实现这一目标?CamelCase 之间有一个下划线。
在课堂上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) 升级到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) 如何在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) 我正在使用 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
django ×7
python ×6
python-3.x ×2
celery ×1
django-admin ×1
django-forms ×1
django-views ×1
docker ×1
dockerfile ×1
flask ×1
swagger ×1
uvicorn ×1