代码之家  ›  专栏  ›  技术社区  ›  Alison Goh

Python金字塔-使用会话将表单数据传递到另一个页面

  •  0
  • Alison Goh  · 技术社区  · 7 年前

    我正在使用Python金字塔和Jinja2模板。我想将表单数据保存到会话中,并在另一个HTML页面中检索它。我应该如何更改以传递数据?我只知道如何存储我在视图中输入的数据。像这样进入会话 request.session['postal'] = 01934 但这不是我在交付中输入的数据。如果我用 print (session['postal']) ,这将仅显示在我的命令提示符中,而不会显示在HTML页面中。有人能帮我吗?我是这方面的新手。

    在我的视图中添加/更改什么。py?

    <form class="form-horizontal" method="POST">   
    <div class="form-group">
        <label class="control-label col-md-2" for="postal">Postal Code:</label>
            <input type="text" class="form-control" id="postal" placeholder="Enter Postal Code" name="postal" />
    </div>
    <div class="form-group">
        <label class="control-label col-md-2" for="address">Detailed Address:</label>
            <textarea class="form-control" rows="3" id="address" placeholder="Enter Address" name="address"></textarea>
    </div>
    <div class="form-group">
        <label class="control-label col-md-2" for="unit">Unit No #:</label>
            <input type="text" class="form-control" id="unit" placeholder="Enter Unit No" name="unit" />
    </div>
    <button type="submit" class="btn btn-default" name="submit">Submit</button>
    </form>
    

    意见。py公司

    @view_config(route_name='deliveryLink', renderer='templates/deliveryLink.jinja2')
    def deliveryLink(request):
        print("YAY for gift delivery via Link")
    
    if 'submit_deliverylink' in request.POST:
        print("request.POST: ", request.POST)
    
        myform = request.POST
    
        for m in myform:
            print("key: ", m, " value: ", myform[m])
    
        session = request.session
    
        session['postal'] = ?
        session['address'] = ?
        session['unit'] = ?
    
        data = "??"
    
        data_array = data.split(",")
        session['data'] = data_array
    
        session['delivery'] = str(data_array)
    
        print (session['delivery'])
    
        return HTTPFound(location='http://localhost:5555/confirmation')
    return {}
    
    @view_config(route_name='confirmation', renderer='templates/confirmation.jinja2')
    def confirmation(request):
        print("YAY for confirmation")
    
            for a in request.POST:
                request.session[a] = request.POST[a]
    
        return {}
    

    我希望之前输入的数据显示在这个确认页面上:确认。金贾2

    <form class="form-horizontal" method="POST">   
        <div class="form-group">
            <label class="control-label col-md-2" for="postal">Postal Code:</label>
                <input type="text" class="form-control" id="postal"  name="postal" />
        </div>
        <div class="form-group">
            <label class="control-label col-md-2" for="address">Detailed Address:</label>
                <textarea class="form-control" rows="3" id="address" name="address"></textarea>
        </div>
        <div class="form-group">
            <label class="control-label col-md-2" for="unit">Unit No #:</label>
                <input type="text" class="form-control" id="unit" name="unit" />
        </div>
        </form>
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   user6100520 user6100520    7 年前

    如果您需要会话,可以从模板中调用它

    <input type="text" class="form-control" id="postal" name="postal" value="{{session['postal']}}" />


    # after form submitted, it sends post request, just check if it exist
    if request.POST:
        print("request.POST: ", request.POST)
    
        myform = request.POST
        # you need iterate over keys for this case
        for m in myform.keys():
            print("key: ", m, " value: ", myform[m])
    
        session = request.session
        # you can access request.POST directly or use your variable myfrom 
        # use myform.get('postal','') to get value by key 
        session['postal'] = myform.get('postal','')
        session['address'] = myform.get('postal','')
        session['unit'] = myform.get('unit','')
    
        data = "??"
    
        data_array = data.split(",")
        session['data'] = data_array
    
        session['delivery'] = str(data_array)
    
        print (session['delivery'])
    
        return HTTPFound(location='http://localhost:5555/confirmation')