2016-04-30 20 views
0

我正在開發由協會組織的電影挑戰的web應用程序。我的社團和我想直接上傳提交的電影到該協會的Dailymotion帳戶。通過Django上傳Dailymotion中的電影文件

我已經完成localy測試以瞭解如何在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 repository,應用程序名稱是bioinfuse。

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

在此先感謝!

回答

1

不,這是不可能的。該文件需要暫時存放在您的服務器中,因爲請求會通過您的服務器。