Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.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 在何处存储现场数据以及如何提供对其的访问?_Python_Design Patterns - Fatal编程技术网

Python 在何处存储现场数据以及如何提供对其的访问?

Python 在何处存储现场数据以及如何提供对其的访问?,python,design-patterns,Python,Design Patterns,表单具有字段,字段具有值。但是,他们只有在提交表单后才能获得值 我应该如何存储此值?我应该给每个字段指定一个value属性,field.value, 在发布之前,将其保留为None,并在后记中填写 完全忽略它,并动态添加它 将其存储在表单上,如form.data['field'] 创建一个包装类FieldWithData,以避免任何不一致的状态(如果您有这种类型的对象,您知道它有数据),并允许我在初始值设定项中设置数据,而不是直接访问属性(尽管我想这与使用setter没有太大区别) 如何通过

表单
具有
字段
字段
具有
。但是,他们只有在提交表单后才能获得

  • 我应该如何存储此值?我应该给每个字段指定一个value属性,
    field.value
    • 在发布之前,将其保留为
      None
      ,并在后记中填写
    • 完全忽略它,并动态添加它
    • 将其存储在表单上,如
      form.data['field']
    • 创建一个包装类
      FieldWithData
      ,以避免任何不一致的状态(如果您有这种类型的对象,您知道它有数据),并允许我在初始值设定项中设置数据,而不是直接访问属性(尽管我想这与使用setter没有太大区别)
  • 如何通过
    表单
    对象访问字段数据?选项:
    • form.fields['name'].value
      (它当前在内部的存储方式)
    • form.data['field']
      (创建一个代理“data”类,从字段中检索真实数据,或者重新排列内部结构以实际存储如下数据)
    • form.field.value
      -看起来相当不错,但是我会有两个对同一个字段的引用,一个是
      form.field
      ,另一个是
      form.fields['field']
      ,这是我在内部需要的,以便我可以迭代它们

  • 太多的设计决策。快把我逼疯了。这就是单独完成一个项目的糟糕之处。

    这实际上取决于你如何与相关结构互动。在给对象赋值之前,您是否操作
    表单
    字段
    对象?是否需要频繁迭代所有给定的
    字段
    ?提交后是否需要
    表格
    ?等等


    我建议编写一些/所有使用
    表单的代码,并弄清楚如何与
    表单
    数据交互,以及理想的界面是什么样子。

    我会将表单的定义和表单的值与提交分开。也就是说,字段(定义)对象上没有
    属性

    要处理提交的值,我可能会使用dict。您可以让Form类处理此dict的创建:

    # assuming my_form is a Form object and request represents the HTTP request
    form_values = my_form.values_from_request(request)
    print(form_values["Name"])
    

    values\u from\u request
    方法将迭代表单的字段(定义)以从HTTP请求获取提交的数据。该方法还可以进行验证和数据类型转换。

    我将请求/发布数据传递到表单中。我也需要它来渲染字段,而不仅仅是检索它们的值。我想我可以将请求数据传递到每个方法中,但我认为这只会使它更加复杂。更容易在表单上保留引用。如果该方法也执行验证,那么如果它返回表单值,它如何返回is_valid状态?一个元组?这听起来很像Django是怎么做的。在Django中,您可以:f=MyForm(request.POST);如果f.是有效的():。。。;f、 已清除的_数据[“名称”]。。。看见重新。若要回答这个问题,我可能会让来自_请求的值_在无效数据上引发ValidationException。这是一种有趣的方法。。。Django的方法有一点让我恼火,那就是他们鼓励的流程:
    如果发布,则设置表单w/数据,否则设置表单w/输出数据
    ;我真的很讨厌两次初始化表单的冗余,尤其是当它可以通过检查变量轻松确定是否有数据时。你的想法很有趣。。。但是,如果您没有在表单中存储数据的本地副本,它仍然没有解决如何呈现表单。def render_as_html(self,field_values={}),但不能通过模板传入变量…因此必须在视图中调用该render函数,然后将输出传递给模板。这是一个有效的解决方案,但我不喜欢:)谢谢。理想情况下,我想我希望通过
    form.data['field']
    访问它,以防止意外修改其他字段属性(这在当时并不重要,因为它已经被渲染过了),而且还可以保持它的整洁,让开发人员只访问他们需要的内容。但是,在内部,我认为将所有字段属性分组更有意义。即,将值保留在字段上。然而,现在在我希望如何在内部访问它和我希望如何访问它之间存在差异。这导致了这个代理的想法。。。但是这听起来不是有点难看吗?--虽然如果我改用
    form.data('field')
    ,它会成为一个易于实现的方法……但是,当你开始嵌套它们时,语法就变得更加不明显了。。我必须使用
    form.data('field','subfield')
    而不是
    form.data['field']['subfield']
    。我将使用
    form.data('subform.field')
    sol'n,并将
    字段
    对象上的
    值保存在内部。
    data()
    方法只是一个方便的包装器。看起来效果不错。