def file_post(request, project_id): """ 已上传成功的文件写入到数据库 前端传来的值: name:fileName, key:key, file_size:fileSize, parent:CURRENT_FOLDER_ID,// 当前访问的目录id etag:data.ETag, // 腾讯对象返回的id file_path:data.Location :param request: :param project_id: :return: """ # 根据key再去cos获取文件Etag和 # 把获取到的数据写入到数据库 form = FileModelForm(request, data=request.POST) if form.is_valid(): # 校验通过:数据写入到数据库 # 通过ModelForm.save存储到数据库中的数据返回的instance对象,无法通过get_xx_display获取choice的中文 # form.instance.file_type = 1 # form.update_user = request.tracer.user # instance = form.save() # 使用第二种方法,能通过get_xx_display获取choice的中文 data_dict = form.cleaned_data # 验证成功后的字段 data_dict.pop("etag") # models模型中没有etag字段,所以去除 data_dict.update({ "project": request.tracer.project, "file_type": 1, "update_user": request.tracer.user }) instance = models.FileRepository.objects.create(**data_dict) # 项目已使用空间:更新data_dict.get("file_size")单位是字节 request.tracer.project.user_space += data_dict.get("file_size") request.tracer.project.save() result = { "id": instance.id, "name": instance.name, "file_size": instance.file_size, "username": instance.update_user.username, 'datetime': instance.update_datetime.strftime("%Y{0}%m{1}%d{2} %H:%M").format( "年", "月", "日"), "download_url": reverse("file_download", kwargs={ "project_id": project_id, "file_id": instance.id }) # "file_type": instance.get_file_type_display(), } return JsonResponse({"status": True, "data": result}) return JsonResponse({"status": False, "data": "文件错误"})
def file_post(request, project_id): """ 已上传成功的文件写入到数据 """ """ name: fileName, key: key, file_size: fileSize, parent: CURRENT_FOLDER_ID, # etag: data.ETag, file_path: data.Location """ # 根据key再去cos获取文件Etag和"db7c0d83e50474f934fd4ddf059406e5" print(request.POST) # 把获取到的数据写入数据库即可 form = FileModelForm(request, data=request.POST) if form.is_valid(): # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文 # form.instance.file_type = 1 # form.update_user = request.tracer.user # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display() # 校验通过:数据写入到数据库 data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.blog.project, 'file_type': 1, 'update_user': request.blog.user }) instance = models.FileRepository.objects.create(**data_dict) # 项目的已使用空间:更新 (data_dict['file_size']) request.blog.project.user_space += data_dict['file_size'] request.blog.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.username, 'datetime': instance.update_datetime.strftime("%Y{y}%m{m}%d{d} %H:%M").format( y="年", m="月", d="日"), 'download_url': reverse('file_download', kwargs={ "project_id": project_id, 'file_id': instance.id }) # 'file_type': instance.get_file_type_display() } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': "文件错误"})
def file_post(request, project_id): """ 已上传成功的文件写入数据库 传入的数据参数: name: fileName, key: key, file_size: fileSize, parent: CURRENT_FOLDER_ID, file_path: data.Location """ print(request.POST) form = FileModelForm(request, data=request.POST) print(form) if form.is_valid(): # 校验通过,数据写入到数据库 # 通过 ModelForm.save存储到数据库中的数据返回的instance对象,无法通过get_xxx_display获取到choice中文 # form.instance.file_type = 1 # form.update_user = request.bug_mgt.user # instance = form.save() # 添加成功后,可以获取instance.id, instance.name等,但是无法获取instance.file_type的中文 data_dict = form.cleaned_data print(data_dict) data_dict.pop('etag') data_dict.update({ 'project': request.bug_mgt.project, 'file_type': 1, 'update_user': request.bug_mgt.user }) instance = models.FileRepository.objects.create(**data_dict) # 项目已使用空间 request.bug_mgt.project.used_space += data_dict['size'] request.bug_mgt.project.save() print(request.bug_mgt.project.used_space) result = { 'id': instance.id, 'name': instance.file_name, 'file_size': instance.size, 'update_user': instance.update_user.username, 'datetime': instance.update_time.strftime("%Y{}%m{}%d{} %H:%M").format( '年', '月', '日'), 'download_url': reverse('file_download', kwargs={ 'project_id': project_id, 'file_id': instance.id }), 'file_type': instance.get_file_type_display() } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': '文件错误'})
def file_post(request, project_id): """ 已上传成功的文件写入到数据 :param request: :param project_id: :return: """ # 根据key再去cos获取文件Etag和"654bde1e7bd87e61e72c079da6096f9d" print(request.POST) # 把获取到的数据写入数据库即可 form = FileModelForm(request, data=request.POST) if form.is_valid(): # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文 # form.instance.file_type = 1 # form.update_user = request.tracer.user # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display() # 校验通过:数据写入到数据库 data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.tracer.project, 'file_type': 1, 'update_user': request.tracer.user }) instance = models.FileRepository.objects.create(**data_dict) # 项目的已使用空间:更新 (data_dict['file_size']) request.tracer.project.use_space += data_dict['file_size'] request.tracer.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.username, 'datetime': instance.update_datetime.strftime('%Y{y}%m{m}%d{d} %H:%M').format( y='年', m='月', d='日'), 'download_url': reverse('file_download', kwargs={ "project_id": project_id, 'file_id': instance.id }) # 'file_type': instance.get_file_type_display() } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': "文件错误"})
def file_post(request, project_id): """ 已上传成功的文件写入到数据 """ """ name: fileName, key: key, file_size: fileSize, parent: CURRENT_FOLDER_ID, # etag: data.ETag, file_path: data.Location """ # 根据key再去cos获取文件Etag和"db7c0d83e50474f934fd4ddf059406e5" print(request.POST) # 把获取到的数据写入数据库即可 form = FileModelForm(request, data=request.POST) if form.is_valid(): # 校验通过,写入数据库 # form.instance.file_type = 1 # form._update_user = request.saas.user data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.saas.project, 'file_type': 1, 'update_user': request.saas.user }) instance = FileRepository.objects.create(**data_dict) #项目的已使用空间 request.saas.project.use_space += data_dict['file_size'] request.saas.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.name, 'datetime': instance.update_datetime.strftime('%Y年-%m月-%d日 %H:%M'), # 'file_type':instance.get_file_type_display() 'download_url': reverse('file_download', kwargs={ 'project_id': project_id, 'file_id': instance.id }) } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': '文件错误'})
def file_post(request, project_id): """ 已成功上传的文件写入到数据库 name:fileName, key:key, file_size:fileSize, parent:CURRENT_FOLDER_ID, etag:data.ETag, file_path:data.Location :param request: :param project_id: :return: """ form = FileModelForm(request, data=request.POST) if form.is_valid(): # 校验通过,写入数据库 data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.tracer.project, 'file_type': 1, 'update_user': request.tracer.user }) instance = models.File.objects.create(**data_dict) # 项目已使用空间进行更新 request.tracer.project.user_space += data_dict['file_size'] request.tracer.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.username, 'datetime': instance.update_datetime.strftime( '%Y{Y}-%m{m}-%d{d} %H:%M').format(Y='年', m='月', d='日'), 'file_type': instance.get_file_type_display(), 'download_url': reverse('file_download', kwargs={ 'project_id': project_id, 'file_id': instance.id }) } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': '文件错误'})
def file_post(request, project_id): """将已经长传成功的文件写入到数据库""" # request.POST.get('name') # request.POST.get('size') # 前端传递过来的值: # name: fileName, # file_size: fileSize, # key: key, # parent: CURRENT_FOLDER_ID, # etag: data.ETag, # file_path: data.Location form = FileModelForm(request, data=request.POST) if form.is_valid(): # form.instance.file_type = 1 # form.update_user = request.lxyker.user # 这种写法,没有办法使用instance.get_file_type_display()获取类型的中文 # instance = form.save() # 添加成功后,这个instance就是这个新添加的对象 # 所以,可用用下面这种自己构造字典的方法,将数据写入数据库,并且将其传递到前端 # 校验通过,将数据写入到数据库 data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.lxyker.project, 'file_type': 1, 'update_user': request.lxyker.user, }) instance = models.FileRepository.objects.create(**data_dict) # 更新项目的已使用空间 request.lxyker.project.use_space += data_dict['file_size'] request.lxyker.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.username, 'datetime': instance.update_datetime.strftime('%Y{y}%m{m}%d{d} %H:%m').format(y='年', m='月', d='日'), 'file_type': instance.get_file_type_display(), 'download_url': reverse('file_download', kwargs={'project_id': project_id, 'file_id': instance.id}) } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': True, 'data': '文件错误'})
def file_post(request, project_id): # 将上传成功的文件写入到数据库 # 把获取到的数据写入到数据库 form = FileModelForm(request, data=request.POST) if form.is_valid(): data_dict = form.cleaned_data data_dict.pop('etag') data_dict.update({ 'project': request.tracer.project, 'file_type': 1, 'update_user': request.tracer.user }) instance = models.FileRepository.objects.create(**data_dict) # 项目的一使用空间:更新 request.tracer.project.use_space += data_dict['file_size'] request.tracer.project.save() result = { 'id': instance.id, 'name': instance.name, 'file_size': instance.file_size, 'username': instance.update_user.username, 'datetime': instance.update_time.strftime("%Y-%m-%d %H:%M"), 'download_url': reverse('web:manage:file_download', kwargs={ "project_id": project_id, 'file_id': instance.id }) } return JsonResponse({'status': True, 'data': result}) return JsonResponse({'status': False, 'data': '文件错误'})
def file(request, project_id): folder_id = request.GET.get('folder_id', '') if request.method == 'GET': menu_list = [] if folder_id: folder_id = int(folder_id) ret_obj = PorjectFile.objects.filter(id=folder_id, file_type=1).first() form = FileModelForm(instance=ret_obj) while ret_obj: menu_list.insert(0, {'id': ret_obj.id, 'title': ret_obj.title}) ret_obj = ret_obj.parent file_query_set = PorjectFile.objects.filter(project=project_id, parent=folder_id) else: form = FileModelForm() file_query_set = PorjectFile.objects.filter(project=project_id, parent=None) return render( request, 'file.html', { 'file_query_set': file_query_set, 'menu_list': menu_list, 'forms': form, 'folder_id': folder_id }) form = FileModelForm(data=request.POST) if form.is_valid(): parent_id = request.POST.get('parent') form.instance.project = request.tracer.project form.instance.parent_id = parent_id form.instance.update_user = request.tracer.user form.save() print('完成创建') return JsonResponse({'status': True}) print(form.errors) return JsonResponse({'status': False, 'errors': form.errors})
def file_edit(request, project_id): """编辑文件夹""" folder_id = request.GET.get('folder_id', '') file_obj = PorjectFile.objects.filter(project=project_id, id=folder_id).first() form = FileModelForm(instance=file_obj)
def file_post(request, project_id): # print(request.POST) # 'name': fileName, # 'key': key, # 'file_size': fileSize, # 'parent': CURRENT_FOLDER_ID, # 'etag': data.ETag, # 'file_path': data.Location, form = FileModelForm(request, data=request.POST) if form.is_valid(): # 通过ModelForm.save存储到数据库中的数据返回的isntance对象,无法通过get_xx_display获取choice的中文 # form.instance.file_type = 1 # form.update_user = request.tracer.user # instance = form.save() # 添加成功之后,获取到新添加的那个对象(instance.id,instance.name,instance.file_type,instace.get_file_type_display() data_dict = form.cleaned_data data_dict.pop('etag') # 把etag这个字段去掉,因为数据库的表中没有这个字段 # 写入数据库 data_dict.update({ 'project': request.tracer.project, 'file_type': 1, 'update_user': request.tracer.user, }) # todo 设置事务 try: with transaction.atomic(): instance = FileRepository.objects.select_for_update().create(**data_dict) # 更新这个项目的已经使用空间 # # 这样写不行, 有并发问题,因为前端多个ajax发送过来的request.tracer.project不是更新之后的project对象 # request.tracer.project.use_space += instance.file_size # request.tracer.project.save() # project_object = Project.objects.select_for_update().get(id=project_id) # print('-'*66) # print('原来空间:', project_object.use_space) project_object.use_space += data_dict['file_size'] project_object.save() # print('之后空间:', project_object.use_space) # print('-'*66) except Exception as e: # todo 如果保存失败,应该把这个文件从cos中删除 return JsonResponse({'status': False}) # 日期格式化 file_time = instance.update_datetime.timetuple() file_time = str(file_time.tm_year)+'年'+str(file_time.tm_mon)+'月'+str(file_time.tm_mday)+"日 "+\ str(file_time.tm_hour+8)+':'+str(file_time.tm_min) data = { 'id': instance.id, 'name': instance.name, # 'file_type': instance.file_type, 'file_size': instance.file_size, 'update_user': instance.update_user.username, 'update_datetime': file_time, # strftime("%Y{}%m{}%d{} %H:%M").format('年', '月', '日'), 'download_url': reverse('web:file_download', kwargs={'project_id': project_id, 'file_id': instance.id}) } return JsonResponse({'status': True, 'data': data}) return JsonResponse({'status': False, 'error': form.errors})