Html:
<form class="form-horizontal" id="addForm" method="post" enctype ="multipart/form-data">
{% csrf_token %}
<input type="hidden" name='id' value="{{ conf.id }}" />
<div class="box-body">
<fieldset id="InputsWrapper">
<legend>
<h4>参数信息</h4>
</legend>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">中间件名称</label>
<div class="col-sm-4">
<input class="form-control" name="middleware" type="text" value="{{ res.middleware }}"/>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">中间件图标</label>
<div class="col-sm-4">
<div class="input-group file-caption-main">
<input class="form-control" id="filename" type="text" />
<div class="input-group-btn input-group-append">
<div tabindex="500" class="btn btn-primary btn-file">
<i class="glyphicon glyphicon-folder-open"></i>
<span class="hidden-xs">选择 …</span>
<input id="input-b9" name="middleware_img" type="file" >
</div>
</div>
</div>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-2 control-label">预览</label>
<div class="col-sm-4">
<img style="width: 100px;height: 100px" id="demo1" {% if res.middleware_img %} src="/{{ res.middleware_img }}"
{% endif %} >
</div>
</div>
</fieldset>
</div>
<div class="box-footer ">
<div class="row span7 text-center ">
<button type="button" id="btnCancel" class="btn btn-default margin-right " >重置</button>
<button type="button" id="btnSave" class="btn btn-info margin-right " >保存</button>
</div>
</div>
</form>javascript:
<script src="https://www.layuicdn.com/layui/layui.js"></script>
<script type="text/javascript">
layui.use('upload', function(){
var $ = layui.jquery
,upload = layui.upload;
//普通图片上传
var uploadInst = upload.render({
elem: '#input-b9',
url: "{% url 'parameter-upload' %}",
accept:'images',
auto: false,//选择文件后不自动上传
//上传前的回调
bindAction: '#btnSave',
choose: function(obj){
//预读本地文件示例,不支持ie8
obj.preview(function(index, file, result){
$('#filename').val(file.name)
$('#demo1').attr('src', result); //图片链接(base64)
});
},
before: function (obj) {
this.data = {
middleware: $('input[name="middleware"]').val(),
csrfmiddlewaretoken: '{{ csrf_token }}',
}
},
done: function(res){
if (res.result){
layer.alert('数据保存成功!', {icon: 1},function(index){
parent.layer.closeAll(); //关闭所有弹窗
});
}else{
layer.alert(res.errors, {icon: 5});
}
return ;
}
});
});models:
class VisualParameter(models.Model): middleware = models.CharField(max_length=20, verbose_name="中间件名称") middleware_img = models.ImageField(upload_to="media/image/%Y/%m", max_length=100, verbose_name="中间件图标")
forms:
class ParameterConfForm(forms.ModelForm):
class Meta:
model = VisualParameter
fields = '__all__'
error_messages = {
"middleware": {"required": "请输入中间件名称"},
"middleware_img": {"required": "请选择中间件图标"},
}views:
class UploadImageView(View):
"""
个人中心:上传图片
"""
def post(self, request):
ret = dict(result=False)
file = request.FILES.get('middleware_img')
if 'id' in request.POST and request.POST['id']:
para = get_object_or_404(VisualParameter, pk=request.POST.get('id'))
else:
para = VisualParameter()
image_form = ParameterConfForm(data=request.POST, files=request.FILES, instance=para)
if image_form.is_valid():
image_form.save()
ret['result'] = True
else:
pattern = '<li>.*?<ul class=.*?><li>(.*?)</li>'
errors = str(image_form.errors)
asset_form_errors = re.findall(pattern, errors)
ret['errors'] = asset_form_errors[0]
return HttpResponse(json.dumps(ret), content_type='application/json')关于layui 上传文件可以查看官方示例,使用很简单,Django 中使用 formModel 的save 方法,可以很简单的将文件保存,这里需要设置 model 中字段类型为 文件类型(FileField、ImageField,和 FileField 一样,ImageField只是会验证上传对象是不是一个合法的图象文件。),并配置 自定义文件上传路径upload_to属性。
注意:在项目settings文件中,你要定义 MEDIA_ROOT ,将它的值设为用来存放上传文件的目录的完整路径。要确保 web 服务器所用的帐号拥有对该目录的写权限。
Comments (0)