0

「クエリの追加」ページでテキスト入力を受け入れ、「クエリの検索」ページに表示する基本的なWebアプリケーションを作成しようとしています。これまでのところ、データベースは正常に接続されており、使用してもWebサイトでエラーは発生しません。

ただし、入力を入力して[クエリの追加]ページで[送信]をクリックすると、[クエリの検索]ページが更新されないか、新しい入力が表示されません。

入力をデータベースにリンクしていないコードに何か問題があると思います。

更新:ビューサブクラスでメソッド「add_entry」および「show_entries」を呼び出さないと誰かが言っています。しかし、私のメインのpyファイルは関数を処理するべきではありませんか?

これが私が開発しているウェブアプリのいくつかの基本的なスクリーンショットです:

ここに画像の説明を入力してください

ここに画像の説明を入力してください

以下は私のpyファイルを表しています:

これは私のメインのpyファイルです(クエリ-Final2.py)

#functions
def show_entries():
    db = get_db()
    cur = db.execute('select title, columns, query, notes, tags from entries order by id desc')
    entries = [dict(title=row[0], columns=row[1],query=row[2],notes=row[3],tags=row[4]) for row in cur.fetchall()]
    return render_template('search-queries.html', entries=entries)

def add_entry():
    if not session.get('logged_in'):
    abort(401)
    db = get_db()
     db.execute('insert into entries (title, columns, query, notes, tags) values (?, ?)',
      [request.form['title'],
       request.form['columns'],
       request.form['query'],
       request.form['notes'],
       request.form['tags']
       ])
    db.commit()
     flash('New entry was successfully posted')
    return redirect(url_for('add-queries'))


# Routes
   app.add_url_rule('/',
   view_func=Main.as_view('main'),
   methods=["GET"])

   app.add_url_rule('/login/',
   view_func=Login.as_view('login'),
   methods=["GET", "POST"])

   app.add_url_rule('/search-queries/',
   view_func=SearchQueries.as_view('search-queries'),
   methods=["GET", "POST"])

   app.add_url_rule('/add-queries/',
   view_func=AddQueries.as_view('add-queries'),
   methods=["GET", "POST"])

   app.add_url_rule('/edit-queries/',
   view_func=EditQueries.as_view('edit-queries'),
   methods=["GET", "POST"])

クラスファイルと同様に:

これは私の「クエリの検索」ページビューです

class SearchQueries(flask.views.MethodView):
  @utils.login_required
  def get(self):
    return flask.render_template('search-queries.html')

これは私の「クエリの追加」ページビューです

class AddQueries(flask.views.MethodView):
  @utils.login_required
  def get(self):
    return flask.render_template('add-queries.html')

  def post(self):
    return flask.render_template('search-queries.html')

これらは私のhtmlファイルです:

これは私の「クエリの追加」htmlページです

{% extends "layout.html" %}
{% block content %}
<h1 class="pageHeader" xmlns="http://www.w3.org/1999/html">Add a query</h1>
<h3 class="pageSubHeader">Sooo many queries to add</h3>
<form action="{{ url_for('add-queries') }}" method=post class=add-entry>
    <dl>
        <dt>Title:
        <dd><input type=text size=54 name=title>
        <dt>Columns: (Store ID, Date, transaction-total, etc... )
        <dd><textarea name=columns rows=5 cols=40></textarea>
        <br>
        <dt>Query: (The text of the query)
        <dd><textarea name=query rows=5 cols=40></textarea>
        <br>
        <dt>Notes: (Anything that the analyst should note)
        <dd><textarea name=notes rows=5 cols=40></textarea>
        <br>
        <dt>Tags: (traffic, conversion, etc... )
        <dd><input name=tags type=text size=54>
        <br>
        <dd><input type=submit value="Submit query">
    </dl>
</form>
{% endblock %}

これは私の「検索クエリ」のhtmlページです

{% extends "layout.html" %}
{% block content %}
    <h1 class="pageHeader">Have fun searching for queries</h1>
    <h3 class="pageSubHeader">Search for a large query</h3>
    <ul class=entries>
      {% for entry in entries %}
         <li><h2>{{ entry.title }}</h2>{{ entry.columns|safe }}
      {% else %}
          <li><em>Unbelievable.  No entries here so far</em>
      {% endfor %}
    </ul>
{% endblock %}

私が行方不明になっていることは本当に明白なことかもしれないので、ここでの助けをいただければ幸いです。前もって感謝します!

  • 低インターン

更新:私のデータベースはSQLite3を使用しています

そして、schema.sqlファイルは次のとおりです。

drop table if exists entries;
create table entries (
  id integer primary key autoincrement,
  title string not null,
  columns string not null,
  query string not null,
  notes string not null,
  tags string not null
 );

質問:私が見ていた例では、開発者は

 @app.route('/add/')

関数を宣言する前に。これは何をしますか?

4

1 に答える 1

1

そうです、コードのどこにも実際に関数を呼び出しません。add_entriesshow_entries

私はビュークラスのファンではないので、ビュークラスを使用したことはありませんが、次のようなことはしませんか。

class AddQueries(flask.views.MethodView):
  @utils.login_required
  def get(self):
    return flask.render_template('add-queries.html')

  def post(self):
    db = get_db()
    db.execute('insert into entries (title, columns, query, notes, tags) values (?, ?, ?, ?, ?)',
    [request.form['title'],
     request.form['columns'],
     request.form['query'],
     request.form['notes'],
     request.form['tags']
    ])
    db.commit()
    flash('New entry was successfully posted')
    return flask.render_template('search-queries.html')

つまり、基本的に、ビューにPOST何かを追加すると、実際にデータベースに挿入されます。同様に、クラスは現在関数内にあるコードを実際に実行する必要があります。AddQueriesShowQueriesshow_entries()

于 2012-11-30T14:38:09.770 に答える