python创建空文本文件_python-Django FileField:如何设置默认值(自动创建空文件)?...

作者探讨了在Django中如何处理MyModel模型的code字段,允许为空时自动创建空文件。提出通过将代码存储在CharField并在安全检查后写入文件的解决方案,避免了直接修改request.FILES的hack方法。
摘要由CSDN通过智能技术生成

我有一个这样的模型:

class MyModel(models.Model):

name = models.CharField(max_length=255)

code = models.FileField()

提交新的MyModel时,我想允许代码字段保留为空,在这种情况下,我需要Django创建一个空文件(具有任意名称).

问题是:正确的方法是什么?

我在文档中找不到任何相关内容,因此我一直在寻找手动编辑request.FILES并将其提供给MyModelForm()的方法,但这对我来说似乎是个肮脏的hack……任何想法吗?

谢谢.

解决方法:

我会将输入的代码存储在CharField中,然后创建一个访问模型的单独函数,如果代码不包含任何有害方法,则将其写入文件.

这将负责创建文件(因为空白的CharField将仅输出为空文件),并允许委派给安全检查器.然后,您的设置将如下所示:

模型:

class MyModel(models.Model):

name = models.CharField(max_length=255)

code = models.CharField(MAX_FILE_LENGTH)

视图:

def Submit_Code(request):

#Create MyModel using POST data

process_input_file(NEWLY_CREATED_MODEL_NAME)

return HttpResponse("Upload Successful")

def process_input_file(modelName):

#assuming unique name. Use "id=" instead if needed.

mm = MyModel.objects.get(name=modelName)

if passes_security_checks(mm.code):

f = open(mm.name, "r")

f.write(mm.code)

f.close()

编辑

新视图:

def Submit_Code(request):

mm = MyModel()

mm.name = request.POST.get('name')

f = open(mm.name,"r")

f.write(request.POST.get('code')

f.close()

#then associate the newly created file with the FileField however you want

#passing through authentication/checking if need be.

return HttpResponse("Upload Successful")

标签:django-forms,filefield,python,django,autocreate

来源: https://codeday.me/bug/20191209/2097915.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值