Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django文件字段:如何设置默认值(自动创建空文件)?_Python_Django_Django Forms_Filefield_Autocreate - Fatal编程技术网

Python Django文件字段:如何设置默认值(自动创建空文件)?

Python Django文件字段:如何设置默认值(自动创建空文件)?,python,django,django-forms,filefield,autocreate,Python,Django,Django Forms,Filefield,Autocreate,我有一个这样的模型: class MyModel(models.Model): name = models.CharField(max_length=255) code = models.FileField() 当提交一个新的MyModel时,我希望允许代码字段为空,在这种情况下,我需要Django创建一个空文件(具有任意名称) 问题是:正确的方法是什么 我在文档中找不到任何相关内容,所以在将request.FILES提供给MyModelForm()之前,我正在查看手动编辑re

我有一个这样的模型:

class MyModel(models.Model):
    name = models.CharField(max_length=255)
    code = models.FileField()
当提交一个新的MyModel时,我希望允许代码字段为空,在这种情况下,我需要Django创建一个空文件(具有任意名称)

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

我在文档中找不到任何相关内容,所以在将request.FILES提供给MyModelForm()之前,我正在查看手动编辑request.FILES,但这看起来像是一个肮脏的黑客行为。。。有什么想法吗


谢谢。

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

这负责创建文件(因为一个空白字符域将简单地输出到一个空文件),并允许委托给安全检查器。然后,您的设置将如下所示: 型号:

视图:

编辑 新观点:

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")

只需将字段设置为允许null和空白。这将使该字段成为可选字段

code = models.FileField(null=True, blank=True)

您计划如何使用提交到代码字段的值?文件字段听起来不太合适。它是一个包含Python代码的文件,然后在安全的运行时环境中执行。它需要先进行预编译,所以将它放在一个单独的文件中看起来最方便。坦率地说,想到这一点,我感到很不安。这是一个巨大的安全漏洞。我欢迎关于如何安全地执行不受信任的代码(由站点用户提供)的任何其他想法?我会将流程输入文件代码放在表单的clean_code方法中,这样可以在一个地方处理表单的所有逻辑。我认为代码字段应该是TextField而不是CharField。我相信CharField在MySQL中是以VARCHAR(255)的形式实现的,我想您可能希望能够拥有超过255个字符的代码。这是一个好主意,但是在CharField中有重复的数据对我来说有点过头了。目前,提交的代码仍在检查中,因此我认为没有理由单独存储它。我已经实现了所有的东西,我只想让用户省略代码字段,然后在浏览器中编辑它。安全运行时完全从Django实例中抽象出来,没有访问DB或任何东西的权限。因此,将代码放在文件中是目前为止最好的方法。最后,为了这里的其他人,最好知道正确的解决方案。澄清一下,您是从POST数据中获取代码的吗?如果是这样,请参阅我的编辑:)请注意,我的示例不适合生产(如中所示,没有错误检查)。我认为这不会创建所需的空文件。
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")
code = models.FileField(null=True, blank=True)