2016-04-30 8 views
0

私は、アソシエーションによって編成されたムービーチャレンジのためのWebアプリケーションを開発中です。私の協会で、提出された映画を協会のDailymotionアカウントに直接アップロードしたいと思います。Djangoを使ってDailymotionにムービーファイルをアップロードします。

私はすでにDailymotionでムービーをアップロードする方法を理解するためにlocalyテストを行いました。単純な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 repositoryに進み、アプリケーション名はbioinfuseです。

TL; DR:WebアプリケーションのサーバーにDjangoを介してDailymotionでムービーをアップロードする方法を教えてください。

ありがとうございます!

答えて

1

不可能です。要求はサーバーを通過するため、ファイルはサーバー内に一時的に存在する必要があります。