簡體   English   中英

通過Django在Dailymotion中上傳電影文件

[英]Upload movie file in Dailymotion through Django

我正在為協會組織的電影挑戰開發Web應用程序。 我和我的協會想直接將提交的電影上載到協會的Dailymotion帳戶。

我已經在本地進行了測試,以了解如何在Dailymotion中上載電影,它可以與簡單的Python腳本,Dailymotion提供的Python SDK配合使用,並使用存儲在硬盤中的電影的直接路徑來正常工作。 它的工作原理就像一種魅力,因此我嘗試在我正在開發的Django應用程序中實現它。

我不知道會發生什么,但是如果我嘗試填寫表格,它將返回此錯誤:

TypeError at /a/bioinfuse/submit_movie/15

expected string or Unicode object, NoneType found

Request Method:     POST
Request URL:    http://127.0.0.1:8000/a/bioinfuse/submit_movie/15
Django Version:     1.9.5
Exception Type:     TypeError
Exception Value:    

expected string or Unicode object, NoneType found

Exception Location:     /home/nolwenn/.virtualenvs/jebif-django/local/lib/python2.7/site-packages/pp.py in submit, line 461
Python Executable:  /home/nolwenn/.virtualenvs/jebif-django/bin/python
Python Version:     2.7.6
Python Path:    

['/home/nolwenn/programmation/jebif',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7/plat-x86_64-linux-gnu',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7/lib-tk',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7/lib-old',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/home/nolwenn/.virtualenvs/jebif-django/local/lib/python2.7/site-packages',
 '/home/nolwenn/.virtualenvs/jebif-django/lib/python2.7/site-packages']

這是submit_video視圖:

def submit_movie(request, member):
    def submit_movie(d, file, data, m_id):
        q_movie = Movie.objects.get(id=m_id)
        url = d.upload(file)
        movie = d.post('/me/videos',
                       {'url': url, 'title': data['title'],
                        'published': 'true', 'channel': 'tech',
                        'private': 'true',
                        'description': data['description']})
        url = d.get('/video/'+movie,
                    {'fields': 'embed_url', 'id': id_movie})['embed_url']
        q_movie.url = url
        q_movie.save()

    context = base(request)
    role = Member.objects.get(user=member).role
    member = Member.objects.get(user=member)
    challenge = Challenge.objects.filter(is_open=True).order_by('stop_date')[0]
    if request.method == 'GET':
        submit_movie_form = SubmitMovieForm({'submit_date': now()})
    else:
        submit_movie_form = SubmitMovieForm(request.POST, request.FILES)

        if submit_movie_form.is_valid():
            title = submit_movie_form.cleaned_data['title']
            description = submit_movie_form.cleaned_data['description']
            submit_date = submit_movie_form.cleaned_data['submit_date']
            file_movie = request.FILES['file_movie']
            associated_key = AssociatedKey.objects.get(associated_key=member.associated_key)
            register_movie = Movie(challenge=challenge,
                                   associated_key=associated_key,
                                   title=title,
                                   description=description,
                                   submit_date=submit_date)
            register_movie.save()
            m_id = register_movie.id

            d = dailymotion.Dailymotion()
            d.set_grant_type('password', api_key=API_KEY,
                             api_secret=API_SECRET, scope=['manage_videos'],
                             info={'username': USERNAME, 'password': PASSWORD})
            data = {'title': title, 'description': description}
            job = pp.Server()
            job.submit(submit_movie, (d, file_movie, data, m_id))
            return HttpResponseRedirect(reverse('bioinfuse:index'))

    context['submit_movie_form'] = submit_movie_form
    context['role'] = role
    return render(request, "submit_movie.html", context)

SubmitMovieForm表單:

class SubmitMovieForm(forms.ModelForm):
    file_movie = forms.FileField(label="Votre vidéo")
    class Meta:
        model = Movie
        exclude = ('challenge', 'associated_key', 'movie_url', 'published')

和使用的模板形式:

<form action="{% url 'bioinfuse:submit_movie'  user.id %}" method="post" enctype="multipart/form-data">{% csrf_token %}
    <fieldset>
        {{ submit_movie_form.as_p }}
        <input type="submit" value="Mettre à jour">
    </fieldset>
</form>

我想知道Django是否希望我首先在服務器中上傳電影,但是我希望直接在Dailymotion中上傳電影文件,而不必將文件存儲在服務器中。

您知道我可以如何直接在Dailymotion中上載電影而無需在我們的服務器中創建臨時文件嗎? 當然可以。

想查看更多代碼? 轉到此GitHub存儲庫 ,應用程序名稱為bioinfuse。

TL; DR:如何通過Django在Dailymotion中上傳電影,而不將其存儲在Web應用程序的服務器上?

提前致謝!

不,這是不可能的。 該文件需要臨時放在服務器中,因為請求通過服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM