标签: formencode

python表单验证库的建议

我想要一个表单验证库

1.从表单验证中生成单独的html;

2.验证错误可以很容易地序列化,例如.作为json对象转储

你会在python web项目中选择什么形式的验证库?

python validation formencode toscawidgets wtforms

37
推荐指数
3
解决办法
2万
查看次数

在PHP中解码查询字符串

好的,所以我使用mod_rewrite和PHP编写了一个REST API实现.我通过HTTP DELETE请求(...集体呻吟?)接受一个查询字符串.关于前两个语句的智慧的争论不谈,我发现PHP不会自动解析DELETE请求的请求体(即,尽管形式编码的查询字符串出现在请求体中,$ _POST仍为空).这并不特别让我感到惊讶.我发现令人惊讶的是,我一直无法找到用于解析查询字符串的内置PHP函数?我只是忽略了什么?我可以这样做:

public function parseQS($queryString, &$postArray){
  $queryArray = explode('&', $queryString);
  for($i = 0; $i < count($queryArray); $i++) {
    $thisElement = split('=', $queryArray[$i]);
    $postArray[$thisElement[0]] = htmlspecialchars(urldecode($thisElement[1]));
  }
}
Run Code Online (Sandbox Code Playgroud)

...奇怪的是,没有PHP内置来处理这个问题.另外,我怀疑我不应该使用htmlspecialcharacters和urldecode来擦除表单编码的值...这是一种不同的编码,但是我也无法识别我应该使用哪种PHP函数来解码表单编码数据.

任何建议将不胜感激.

php api rest formencode query-string

4
推荐指数
3
解决办法
9547
查看次数

formencode Schema动态添加字段

例如,让我们Schema以网站管理员设置所请求电话号码数量的用户为例:

class MySchema(Schema):
    name = validators.String(not_empty=True)
    phone_1 = validators.PhoneNumber(not_empty=True)
    phone_2 = validators.PhoneNumber(not_empty=True)
    phone_3 = validators.PhoneNumber(not_empty=True)
    ...
Run Code Online (Sandbox Code Playgroud)

不知怎的,我以为我可以做到:

class MySchema(Schema):
    name = validators.String(not_empty=True)
    def __init__(self, *args, **kwargs):
        requested_phone_numbers = Session.query(...).scalar()
        for n in xrange(requested_phone_numbers):
            key = 'phone_{0}'.format(n)
            kwargs[key] = validators.PhoneNumber(not_empty=True)
        Schema.__init__(self, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)

自从我在FormEncode文档读到:

验证器使用实例变量来存储其自定义信息.您可以使用子类化或普通实例化来设置它们.

Schema在docs中作为复合验证器调用,并且是一个子类,FancyValidator所以我猜它是正确的.

但是这不起作用:简单地添加phone_n被忽略并且仅name是必需的.

更新:

我也尝试了覆盖__new__,__classinit__然后在没有成功的问题之前......

python forms formencode

4
推荐指数
1
解决办法
890
查看次数

将python字典转换为与Content-Type兼容的字符串:“ application / x-www-form-urlencoded”

如果要作为html表单数据提交,我想使用python dict对象并将其转换为等效的字符串。

该字典看起来像这样:

{
   'v_1_name':'v_1_value'
  ,'v_2_name':'v_2_value'
}
Run Code Online (Sandbox Code Playgroud)

我相信表单字符串应如下所示:

v_1_name=v_1_value&v_2_name=v_2_value
Run Code Online (Sandbox Code Playgroud)

什么是这样做的好方法?

谢谢!

python formencode

3
推荐指数
1
解决办法
2587
查看次数

Pylons FormEncode包含一系列表单元素

我有一个Pylons应用程序,并使用FormEncode和HtmlFill来处理我的表单.我的模板中有一系列文本字段(Mako)

  <tr>
    <td>Yardage</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
    <td>${h.text('yardage[]', maxlength=3, size=3)}</td>
  </tr>

但是,我似乎无法弄清楚如何验证这些字段.这是我的架构的相关条目

yardage = formencode.ForEach(formencode.validators.Int())

我正在尝试验证每个字段都是Int.但是,这些字段不会进行验证.

更新 根据此处的要求,该控制器的操作代码.我知道它正在工作,因为我可以验证其他表单字段.

    def submit(self):
        schema = CourseForm()
        try:
            c.form_result = schema.to_python(dict(request.params))
        except formencode.Invalid, error:
            c.form_result = error.value
            c.form_errors = error.error_dict or {}
            c.heading = 'Add a course'
            html = render('/derived/course/add.html')
            return htmlfill.render(
                html,
                defaults = c.form_result,
                errors = c.form_errors 
                )
        else:
            h.redirect_to(controler='course', action='view')

更新 …

python pylons formencode htmlfill

2
推荐指数
1
解决办法
2673
查看次数