【问题标题】:Python Counter add and subtractPython 计数器加减法
【发布时间】:2017-03-08 12:22:51
【问题描述】:

我的柜台工作了我很确定我的帖子开始工作了。有人可以看看我的代码并告诉我哪里出错了。代码保持会话计数。我希望忍者按钮为 +2,黑客重置为 1。除了最后两部分外,我都知道了。任何帮助,将不胜感激。

from flask import Flask, session, render_template, url_for, request, redirect
app = Flask(__name__)
app.secret_key = 'F12Zr47j\3yX R~X@H!jmM]Lwf/,?KT'


def sumSessionCounter():
  try:
    session['counter'] += 1
  except KeyError:
    session['counter'] = 1


@app.route('/')
def index():
    sumSessionCounter()
    return render_template('index.html')


def contact():
    if request.method == 'POST':
        if request.form['ninja'] == session['counter'] + 2:
            pass # do something
        elif request.form['hacker'] == session['counter'] - session['counter'] + 1 :
            pass # do something else

            pass # unknown
    elif request.method == 'GET':
        return render_template('contact.html', form=form)





app.run(debug=True)
<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="stylenew.css"></style>
  <script type="text/javascript" src='http://code.jquery.com/jquery-1.10.2.min.js'></script> 
  <script>


  </script>

</head>
<body>
<h1>{{session['counter']}}</h1>

<p><input type="submit" name="submit" value="ninja"></p>
<p><input type="submit" name="submit" value="hacker"></p>

</body>
</html>

【问题讨论】:

  • 你不应该递减而不是分配1session['counter'] -= 1而不是session['counter'] = 1吗?
  • 这只是由于 = 符号的语法无效而引发错误。
  • 您的代码没有意义,if request.form['ninja'] 然后执行session['counter'] += 2 就是您所解释的预期代码的样子!!!
  • 是的,所以如果为 ninja 或被黑客点击了提交按钮,则应该使用该功能。然而它不是。至少在我看来应该如此。
  • @DavidHollenbeck 你希望从这行代码if request.form['ninja'] == session['counter'] + 2 中获得什么?

标签: python html forms


【解决方案1】:

我认为在这里添加一些 Ajax 调用会更好。在您的app.py 中,添加一条路线:

@app.route('/sessionCounter')
def sessionCounter():
    message = request.args.get('message', 'reset')
    if message == 'add':
        try:
            session['counter'] += 2
        except KeyError:
            session['counter'] = 1
    elif message == 'reset':
        session['counter'] = 1
    return jsonify(result=session['counter'])  # need to import jsonify from flask

我还假设您使用contact.html 作为此特定 HTML 视图的模板。因此,您的 app.py 需要一个渲染模板的路由:

@app.route('/contact')
def contact():
    return render_template('contact.html', session=session)

现在在您的联系人 HTML 中,您需要添加 JS 代码来处理按钮点击并自行修改按钮:

<!DOCTYPE html>
<html>
<head>
  <title></title>
  <meta charset="utf-8">
  <link rel="stylesheet" type="text/css" href="stylenew.css"></style>
  <script type="text/javascript" src='http://code.jquery.com/jquery-1.10.2.min.js'></script> 
  <script type="text/javascript">
    $(function() {
      $('button#add').bind('click', function() {
        $.getJSON('/sessionCounter', {
          message: 'add'
        }, function(data) {
          $("#result").text(data.result);
        });
        return false;
      });
    });
    $(function() {
      $('button#reset').bind('click', function() {
        $.getJSON('/sessionCounter', {
          message: 'reset'
        }, function(data) {
          $("#result").text(data.result);
        });
        return false;
      });
    });
  </script>
</head>
<body>
<h1 id='result'>{{session['counter']}}</h1>

<p><button id="add">Ninja</button></p>
<p><button id="reset">Hacker</button></p>

</body>
</html>

现在启动您的应用程序,然后转到 http://localhost:5000/contact,然后单击 :)

【讨论】:

  • Ty 看它。你写的东西是因为我不知道为什么我在那里有联系只是去索引我只需要弄清楚为什么会话计数器没有显示在页面上我无法测试它 atm 看看这是否有效
  • 好的,如果您想使用index 路由,那么我只需将@app.route('/contact') 更改为@app.route('/index') 并将return render_template('contact.html', session=session) 更改为return render_template('index.html', session=session)。可能也将您的路由的 def contact() 函数更改为 def index() :)
猜你喜欢
  • 1970-01-01
  • 2015-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多