2010-03-24 5 views
1

저는 장고와 파이썬 모두에 대해 상당히 새롭습니다. 이것은 처음으로 양식을 사용하고 django로 파일을 업로드합니다. 업로드를 받고 데이터베이스에 저장하면 정상적으로 작동하지만 유효한 전자 메일이나 사용자가 업로드 할 파일을 선택했는지 확인하는 데 실패합니다. 나는 이것을 알아 내려고 많은 문서를 읽는데 많은 시간을 보냈습니다. 감사! Django S3로 양식 업로드 img 및 양식 유효성 확인

def submit_photo(request): 
    if request.method == 'POST': 
     def store_in_s3(filename, content): 
      conn = S3Connection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY) 
      bucket = conn.create_bucket(AWS_STORAGE_BUCKET_NAME) 
      mime = mimetypes.guess_type(filename)[0] 
      k = Key(bucket) 
      k.key = filename 
      k.set_metadata("Content-Type", mime) 
      k.set_contents_from_file(content) 
      k.set_acl('public-read') 

     if imghdr.what(request.FILES['image_url']): 
      qw = request.FILES['image_url'] 
      filename = qw.name 
      image = filename 
      content = qw.file 
      url = "http://bpd-public.s3.amazonaws.com/" + image 

      data = {image_url : url, user_email : request.POST['user_email'], user_twittername : request.POST['user_twittername'], user_website : request.POST['user_website'], user_desc : request.POST['user_desc']} 
      s = BeerPhotos(data) 
      if s.is_valid(): 
       #import pdb; pdb.set_trace() 
       s.save() 
       store_in_s3(filename, content)  
       return HttpResponseRedirect(reverse('photos.views.thanks')) 
      return s.errors 
     else:   
      return errors 

    else: 
     form = BeerPhotoForm() 

    return render_to_response('photos/submit_photos.html', locals(),context_instance=RequestContext(request) 

views.py

forms.py

class BeerPhotoForm(forms.Form): 
    image_url = forms.ImageField(widget=forms.FileInput, required=True,label='Beer',help_text='Select a image of no more than 2MB.') 
    user_email = forms.EmailField(required=True,help_text='Please type a valid e-mail address.') 
    user_twittername = forms.CharField() 
    user_website = forms.URLField(max_length=128,) 
    user_desc = forms.CharField(required=True,widget=forms.Textarea,label='Description',) 

template.html

<div id="stylized" class="myform"> 
    <form action="." method="post" enctype="multipart/form-data" width="450px"> 
     <h1>Photo Submission</h1> 
     {% for field in form %} 
       {{ field.errors }} 
       {{ field.label_tag }} {{ field }} 
     {% endfor %} 
     <label><span>Click here</span></label>  
    <input type="submit" class="greenbutton" value="Submit your Photo" /> 
    </form> 
</div> 
+0

지금이 포기 실행 한 후 대신 당신은 s = BeerPhoto(request.POST, request.FILES)을하고 파일을 처리 할 수있다. 로컬로 업로드하고 미래의 제안을 위해 알아낼 것입니다. – citadelgrad

답변

0

나는 문제가 당신이 URL을 검증하기 위해 forms.ImageField()을 사용하고 있다고 생각합니다. forms.UrlField()을 사용하고 싶을 수 있습니다.

또는

URL을 파일로 보내지 않아야합니다. 당신이 s.is_valid()

http://docs.djangoproject.com/en/dev/topics/http/file-uploads/

+0

데이터베이스의 URL 만 저장하면 이미지가 s3에 업로드됩니다. 나는 imghr check를 옮겨서 s.is_valid()가 끝나기 전에 완료했다. 지금까지 제안 해 주셔서 감사드립니다. 아직 작동하지 않습니다. – citadelgrad

관련 문제