[英]from django form uploading a image in windows development server
我有這樣的模特
class Ask(models.Model):
name = models.CharField(max_length=500)
designation = models.CharField(max_length=200, blank=True)
email = models.EmailField()
phone = models.CharField(max_length=20, blank=True)
avatar = models.ImageField(upload_to="ask/users/avaters", blank=True, )
question = models.CharField(max_length= 1024)
ques_time = models.DateField(auto_now_add=True)
answer = models.TextField(blank=True)
ans_time = models.DateField(blank=True,null=True, auto_now=True)
display = models.BooleanField()
asker_ip = models.CharField(max_length=100, blank=True)
def __unicode__(self):
return self.name
我的forms.py就是這樣
class AskForm(forms.Form):
name = forms.CharField(required=True, max_length= 500)
email = forms.EmailField(required=True)
avater = forms.ImageField()
question = forms.CharField(required=True, max_length=1024)
我的看法是這樣的
def handle_uploaded_file(f):
destination = open('D:/dsite/ak47/media/ask/users/avaters', 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
def submit_page(request):
data = {}
if request.method == 'POST':
data = request.POST.copy()
form = AskForm(request.POST, request.FILES)
if form.is_valid():
ask = Ask()
ask.name = form.cleaned_data['name']
ask.email = form.cleaned_data['email']
ask.question = form.cleaned_data['question']
handle_uploaded_file(request.FILES['avater'])
ask.save()
return HttpResponseRedirect('/ask/')
else:
form = AskForm()
return render_to_response('ask/index.html', {'form': form,})
問題是在我的Windows開發服務器中。 當我點擊提交它給我一個IO錯誤。 沒有權限。 我嘗試賦予該文件夾完全控制權限。 我假設錯誤是由於其他原因。 因為我可以從管理面板上傳。
您正在嘗試將文件保存到文件夾中,但未指定文件名。 您的句柄函數應為:
def handle_uploaded_file(f):
save_path = 'D:/dsite/ak47/media/ask/users/avaters'
destination = open(os.path.join(save_path,f.name), 'wb+')
for chunk in f.chunks():
destination.write(chunk)
destination.close()
並且不要忘記在您的views.py頂部添加
import os
使用ModelForm及其功能 。 您不必手動處理文件上傳 ,這已經由ModelForm完成。 您的forms.py應該如下所示:
from .models import Ask
class AskForm(forms.ModelForm):
class Meta:
model = Ask
fields = ('name', 'email', 'question', 'avater')
您的views.py應該如下所示:
def submit_page(request):
if request.method == 'POST':
form = AskForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return HttpResponseRedirect('/ask/')
else:
form = AskForm()
return render_to_response('ask/index.html', {'form': form,})
ModelForm將自動處理所有提交的數據並為其創建/保存新的Ask對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.