Appengine数据验证模式?

2024-04-26 01:01:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我对appengine还很陌生,我很想知道在数据验证方面的最佳实践是什么。你知道吗

首先,这是我的型号.py你知道吗

class Event(db.Model):  
  name = db.StringProperty()
  event_type = db.ReferenceProperty(EventType)
  data = db.TextProperty()

理想情况下,我希望强制nameevent_type拥有required=True。你知道吗

不过,我也来自rails背景,这是我的编辑_事件.html(用于创建和编辑事件):

<form method="POST">   

  name: <input type="text" name="name" value="{{ event.name or '' }}"/>
  <br/>

  event type:
  <select name="event_type">
    {% for event_type in event_types %}
      <option value={{ event_type.key().id_or_name() }}>
      {{- event_type.name -}}
      </option>
    {% endfor %}
  </select>
  <br/>

  data: <input type="text" name="data" value="{{ event.data or '' }}"/>
  <br/>

  <input type="submit" value="Submit"/>

</form>

我的视图函数是这样的:

@app.route('/events/new/', methods=['GET', 'POST'])
@login_required
def new_event():
  if request.method == 'GET':
    return render_template('edit_event.html',
                           event=Event(),
                           event_types=db.Query(EventType).fetch(None))
  else:
    _update_event(Event(), request.form)
    return redirect(url_for('list_events'))


@app.route('/events/<int:event_id>/', methods=['GET', 'POST'])
@login_required
def edit_event(event_id):
  event = Event.get_by_id(event_id)
  if request.method == 'GET':
    return render_template('edit_event.html',
                           event=event,
                           event_types=db.Query(EventType).fetch(None))
  else:
    _update_event(event, request.form)
    return redirect(url_for('list_events'))

(注意:为了简洁起见,我省略了\u update \u事件)

如您所见,如果在模型中强制required=Truenew_event()中的event=Event()将引发异常。你知道吗

如果我没有在new_event()中包含event=Event(),我会得到一个event is not defined的错误。你知道吗

使required=True和可重用编辑同时存在的好方法是什么_事件.html对new\u事件和edit\u事件都有效?你知道吗

当然,如果我有required=Truedefault=X,那就有点违背目的了。


Tags: nameformeventidtruenewdbdata
1条回答
网友
1楼 · 发布于 2024-04-26 01:01:03

你有几个选择

您可以为default设置一个sentinal值,如果在调用put()或使用_pre_put_hook执行最终模型验证时设置了默认值,则属性特定的验证器将强制验证失败。你知道吗

或者使用一个forms包(Wtforms/deform或任何您正在使用的框架所提供的东西),在其中在forms模式中强制执行这种类型的业务逻辑。你知道吗

通常,您无法在模型中实施/描述模型上的约束,并且需要依赖表单验证阶段来完成这项工作。例如,如果不同属性中的值相互依赖。你知道吗

相关问题 更多 >