저는 장고와 파이썬 모두에 대해 상당히 새롭습니다. 이것은 처음으로 양식을 사용하고 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>
지금이 포기 실행 한 후 대신 당신은
s = BeerPhoto(request.POST, request.FILES)
을하고 파일을 처리 할 수있다. 로컬로 업로드하고 미래의 제안을 위해 알아낼 것입니다. – citadelgrad