[初学]判断请求参数是否正确用了一大堆 if,有什么简单的方法

2015-04-15 16:23:00 +08:00
 Him
RT.

刚学2天……

每一个请求中都要用一大堆if 去判断传进来的参数是否合理,有没有什么简单的方法去处理?
4844 次点击
所在节点    Python
34 条回复
jasonding
2015-04-15 16:25:07 +08:00
封装成一个独立的方法呗,
royzhanggy
2015-04-15 16:28:17 +08:00
装饰器
batman2010
2015-04-15 16:28:48 +08:00
用一个数组把所有合法值封起来。
batman2010
2015-04-15 16:30:20 +08:00
@batman2010 看错要求了,sorry
sumhat
2015-04-15 16:33:16 +08:00
如果是面向对象的语言,尽量把参数封装成自定义的类,然后在类构造的时候检查,类还可以提供类似 isValidForXXX() 的方法作特殊的检查。
Anybfans
2015-04-15 16:45:44 +08:00
@sumhat 这是Python区。。明显面向对象嘛、、哈哈哈
Septembers
2015-04-15 16:48:10 +08:00
不合格的问题 - 背景信息不足
1. 用的什么框架
2. 现在的例示代码(请发 http://gist.github.com )
loading
2015-04-15 16:53:39 +08:00
把判断写到一个函数里调用,这样一般情况下就看不到了,等发现更好方法时,再修改那个函数。

你没代码,帮不到你。
gkiwi
2015-04-15 17:02:08 +08:00
听楼主的意思像是前端post过来数据,需要不停的写if来进行判断.
说实话,没有太好的方法.
不过,而一些较为通用的规则,比如不能为空啊,必须为数字之类的可以封装成装饰器~
我的某个not_empty: https://gist.github.com/5d84822a5b0d707c53d8.git

不过wtforms也许会对你有些帮助.

https://wtforms.readthedocs.org/en/latest/
gkiwi
2015-04-15 17:04:12 +08:00
上个git貌似打不开,可以瞅下我的代码: https://gist.github.com/bugkiwi/5d84822a5b0d707c53d8
gkiwi
2015-04-15 17:05:27 +08:00
🌰

```
@bp.route('/order/comment',methods=['GET','POST'])
@login_required
@not_empty('orderId',POST=['servicesc','envsc','tastesc','foods'])
def order_comment():
pass
```
bcxx
2015-04-15 17:07:28 +08:00
@gkiwi 你试试用 class 来实现这个 decorator ... 嵌套这么多层太难看了。
bcxx
2015-04-15 17:08:02 +08:00
FYI 可以参考一下 WTForm 这种声明式的方法来做,会好看很多(也好维护)
gkiwi
2015-04-15 17:18:25 +08:00
@bcxx thanks:) __call__确实会舒服好多

不过这个是,之前老代码就一直用着没改了~~~
155
2015-04-15 17:21:18 +08:00
schema、marshmallow
incompatible
2015-04-15 17:21:57 +08:00
大量的if else基本可以用decorator模式或chain of responsibility来代替
mulog
2015-04-15 17:28:49 +08:00
FastMem
2015-04-15 17:44:13 +08:00
封装, PHP function is_chinese($value) {//Do}

然后用的时候这样

if(is_chinses($_POST['Comments'])) {} else {}
Richardzhibu
2015-04-15 19:09:54 +08:00
我一般把参数类型分类,比如int、 uint、long、float、str、mail、url、password,然后把业务规则分配到到这些类型里
FrankFang128
2015-04-15 19:11:35 +08:00
表编程

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/183911

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX