小编jen*_*nso的帖子

使用远程存储配置django-compressor(django-storage - amazon s3)

我的情景

我正在使用django-storage来通过Amazon S3提供文件.这意味着当我执行./manage.py collectstatic时,文件将保存在亚马逊的存储桶中,而不是本地文件系统上.

要压缩我执行的文件:"./ manage.py compress"这给出了这个错误:

错误:渲染期间发生错误:[Errno 2]没有这样的文件或目录:u'/ home/user/project/static/less/bootstrap.less'

由于该文件不在我的本地文件系统上.

"由于Django Compressor处理文件的方式,它要求处理文件(在{%compress%}块中)在本地文件系统缓存中可用. " http://django_compressor.readthedocs.org/en/最新/远程存储器/

如何使用django-storage(amazon s3)进行django-compress工作?

到目前为止我试图做的事情

在本地和S3上创建collectstatic保存文件.因为在django-compressor页面的文档中提到过它,所以应该有一些好方法.怎么样?

组态

STATIC_URL = 'http://mybucket.s3-website-eu-west-1.amazonaws.com/'
STATIC_ROOT = os.path.join(PROJECT_DIR,"static/")
STATICFILES_FINDERS = (
     'django.contrib.staticfiles.finders.FileSystemFinder',
     'django.contrib.staticfiles.finders.AppDirectoriesFinder',
     'compressor.finders.CompressorFinder',
)
STATICFILES_STORAGE = DEFAULT_FILE_STORAGE = 'index.storage.CachedS3BotoStorage' #defined as it is in the documentation

AWS_ACCESS_KEY_ID = "xxx"
AWS_SECRET_ACCESS_KEY = "xxx"
AWS_STORAGE_BUCKET_NAME = "xxxx"

COMPRESS_URL = STATIC_URL
COMPRESS_OFFLINE = True

COMPRESS_PRECOMPILERS = (
    ('text/less', 'lessc {infile} {outfile}'),
)
Run Code Online (Sandbox Code Playgroud)

django django-storage

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

为字段添加自定义验证,用于通用视图CreateView

问题

将自定义验证添加到Django 1.3中的表单字段,表单由通用视图CreateView创建.

该模型

class Picture(models.Model):
    file = models.ImageField(upload_to=get_image_path)
    filename = models.CharField(max_length=50, blank=True)
    user = models.ForeignKey(User, editable=False)
    upload_date = models.DateTimeField(auto_now_add=True,editable=False)
Run Code Online (Sandbox Code Playgroud)

通用视图CreateView,有点修改

class PictureCreateView(CreateView):
    model = Picture

    def clean_file(self,form):
        if image:
            if image._size > settings.MAX_IMAGE_SIZE:
                raise ValidationError("Image file too large ( > 20mb )")
        else:
             raise ValidationError("Couldn't read uploaded image")

    def get_form(self, form_class):
        form = super(PictureCreateView, self).get_form(form_class)
        form.instance.user = self.request.user
        return form

    def form_invalid(self, form):
        ...omitted none important code...
        response = JSONResponse(data, {}, response_mimetype(self.request))
        response['Content-Disposition'] = 'inline; filename=files.json'
        return response

    # …
Run Code Online (Sandbox Code Playgroud)

python django django-models django-forms django-views

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

使用Django CreateView来处理formset - 它没有验证

问题

我正在尝试修改基于类的视图'CreateView'来处理formset而不是表单.

当客户端执行GET请求时,表单集将正确显示给客户端.问题是当客户端使用POST提交表单时.

当Django收到POST时,它会登陆form_invalid(),而form.errors会为长度和名称字段说"此字段是必需的".

class Service(models.Model):
    TIME_CHOICES = (
        (15, '15 minutes'),
        (30, '30 minutes'),
        )
    length = models.FloatField(choices=TIME_CHOICES,max_length=6)
    name = models.CharField(max_length=40)

class ServiceForm(ModelForm):
    class Meta:
        model = Service

ServiceFormSet = modelformset_factory(Service,form=ServiceForm)

class ServiceEditView(CreateView):
    template_name = "service_formset.html"
    model = Service
    form_class = ServiceForm
    success_url = 'works/'

    def form_valid(self, form):
        context = self.get_context_data()
        formset = context['formset']
        if formset.is_valid():
            self.object = form.save()
            return HttpResponseRedirect('works/')
        else:
            return HttpResponseRedirect('doesnt-work/')

    def form_invalid(self, form):
        print form.errors
        return HttpResponseRedirect('doesnt-work/')

    def get_context_data(self, **kwargs):
        context = super(ServiceEditView, self).get_context_data(**kwargs)

        if …
Run Code Online (Sandbox Code Playgroud)

django django-models django-forms django-views

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

让 ffmpeg 捕获运行 puppeteer 脚本的 xfvb-run 屏幕的全屏,并通过 rtmp 发送

我的问题

我无法让 ffmpeg 或 xvfb-run 将全屏流式传输到 ffplay/videolan,它只捕获屏幕的一部分。

更新2

我自己在后续答案中回答了这个问题,希望对遇到同样问题的其他人有用。

更新1

所以问题肯定出在 xvfb-run 上,因为以下两个命令仍然给出一个 webm 文件,该文件仅显示屏幕的一部分

ffmpeg -f x11grab -i :99 -g 50 -b:v 4000k -maxrate 4000k -bufsize 8000k -f webm -s 384x216 "blank.webm"

xvfb-run -n 99 -a --server-args="-screen 0 1024x8000x24 -ac -nolisten tcp -dpi 96 +extension RANDR" "node index.js"

我尝试过的

  • 我尝试更改 ffmpeg 命令和 xvfb-run,例如将“-vf format=yuv420p”或“-filter:v”crop=iw-400:ih-40,scale=960:720”添加到 ffmpeg 命令
  • 我尝试在 xvfb-run 而不是 puppeteer 下显示其他应用程序(chrome..)
  • 用ffmpeg录屏并保存到文件,看看rtmp流是否有问题

但仍然没有运气。这就是我联系 stackoverflow 社区的原因。

xvfb-运行命令

xvfb-run -n 99 -a --server-args="-screen 0 1024x8000x24 -ac -nolisten tcp -dpi 96 +extension …

ffmpeg xvfb puppeteer

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