奇怪的是使用request.args?

时间:2016-08-10 06:32:25

标签: python forms flask request

将post提交给post1.py

@main.route('/post1',methods=['GET','POST'])
@login_required
def post1():
    Ip=request.form['Ip']
    print Ip
    return redirect(url_for('.post',Ip=Ip))

然后重定向到post.py

@main.route('/post', methods=['GET', 'POST'])
@login_required
def post():
    #Ip=request.args['Ip']

    form = RepairForm(request.form)
    print request.form
    if request.method == "POST":

        repair = Repair(Ip=form.ip.data,Series=form.series.data,Hostname=form.hostname.data,
                ManagerIp=form.managerip.data,Comp=form.comp.data,
                Model=form.model.data,Location=form.location.data,Box=form.box.data,
                Important=form.important.data,Faultype=form.faultype.data,
                Subject=form.subject.data,Body=form.body.data,Classify=form.classify.data,
                Status=form.status.data,auth_id=current_user._get_current_object().id,
                Owner=current_user._get_current_object().username,)
        db.session.add(repair)
        db.session.commit()
        flash('报修成功')
        return redirect(url_for('.index'))

    form.ip.data=1
    print form.ip.data
    form.hostname.data=1
    print form.hostname.data
    print request.form
    form.managerip.data=1
    form.comp.data=1
    form.model.data=1
    form.location.data=1
    form.box.data=1
    form.important.data=1
    form.faultype.data=1
    form.classify.data=1
    form.status.data=1
    return render_template('post.html',form=form)

所有测试都没问题,但是当我取消注释 Ip = request.args ['Ip'] 时,测试会返回'浏览器(或代理)发送请求这个服务器无法理解',

2 个答案:

答案 0 :(得分:0)

使用request.args.get(&#39; Ip&#39;)解决了这个错误,但不知道原因,因为request.args [&#39; Ip&#39;]仍然可以获取数据。< / p>

答案 1 :(得分:0)

这篇文章指出Form sending error

  

当无法在args中找到密钥并形成字典时,Flask会引发HTTP错误。 Flask默认假设的是,如果您要求特定密钥并且它不存在,那么请求中遗漏了一些内容,整个请求无效。

您无法使用request.args['Ip'],因为Flask使用werkzeug中名为MultiDict的自定义词典实现。它有自己的get方法。