百三十から四への道を開い測定:指定された検索機能を実装

 

指定された検索機能を実装

そして、一般的なリストビュー機能、SQLを変更

@ app.route( "/リスト/")
デフリスト():
"" "展示所有问题"""
SQL = "ROWID DESCによるフィードバック順からROWID、*を選択し、"
#フィードバック= query_sql(SQL)
印刷(フィードバック)
キー= request.args.get( 'キー'、 '')
SQL =「f.ROWIDを選択し、F *、c.CategoryNameフィードバックからINNER fをc.ROWID = f.CategoryID f.SubjeckにカテゴリcをJOIN以下のような?f.ROWID」によって順
フィードバック= query_sql(SQL、(F '%{キー}%'))
戻りrender_template( 'フィードバックするlist.html'、アイテム=フィードバック)

 

 

フィードバックするlist.html、同じロジックをレンダリングする前に、新しいパネル

 

検索ルック

 

場合は無条件検索、デフォルトではすべてのコンテンツを表示します

 

 

ビュー

位:. 8 UTF-コーディング
インポートsqlite3の
日時日時インポートから
フラスコフラスコインポート要求、render_template、リダイレクト、なurl_forからは、G

アプリケーションはフラスコ(__ name__)=

データベースR&LT = '\ DB \ feedbach.db'

================」 ==================パッケージSQLヘルパー============================ = '


DEFのmake_dicts(カーソル、行):
"" "データベースの辞書にカーソルタプル取得したリストには" ""
((IDX、列挙の値のためcursor.description [IDX] [0]値)で(辞書を返します行))


DEF)(get_db:
"" ")(CVのデータベース・リンクを取得します
G:フラスコ組み込み変数:G = LocalProxy(部分(_lookup_app_object、" G "))
" ""
DB = GETATTR(G '_database'、なし)
IFないDB:
DB = G._database = sqlite3.connect(データベース)
= make_dictsはdb.row_factory
DB返す


:DEFのEXECUTE_SQL(SQL、のparams =())
"" "" "データ結果の挿入、更新、削除を返さないSQL文の実行"
。get_db C =()カーソル()
c.executeを(SQLを、のparams)
c.connection.commit()


1 = False)が、DEF query_sql(SQLは、=(paramsは):
"" "" "1 = Falseのデータクエリが複数回返された"
C = get_db()カーソルを()。
= c.execute結果(SQL、のparams).fetchall()
c.close()
の戻り(IF結果、他[0]なしを生じない)他の場合は、1つの結果


、現在の実行コンテキストのアプリの中に破壊された#のapp.teardown_appcontext @
デフCLOSE_CONNECTION(exeption ):
"" "閉じるデータベース" ""
DB = GETATTR(G '_database'、なし)
デシベルでない場合はなし:
db.close()


「================================================= =======================」


@のapp.route( "/")
デフインデックス():
リターンrender_template( 'base.html')


模板继承
@ app.route( "/フィードバック/")
フィードバックDEF()
戻りrender_template( 'post.html')


app.route @( "/ post_feedback /"、メソッド= "POST"])
DEF(post_feedback):
" ""提交视图""」
もしrequest.method == 'POST':#如果是ポスト请求就获取表单值
サブジェクト= request.form.get( '件名'、なし)
区分= request.form.get( 'カテゴリー」、1)
ユーザ名= request.form.get( 'ユーザ名')
メール= request.form.get([メール])
本体= request.form.get( 'ボディ')
STR = release_time(DateTime.Now())
の状態= 0
印刷(件名、区分、ユーザー名、電子メールで、体、国家、release_time)
コネチカット= sqlite3.connect(DATABASE)
C = conn.cursor()
で、SQLインジェクションを防ぎます?代わりの値の
SQL = "フィードバックのINSERT INTO(Subjeck、区分、ユーザー名、電子メール、ボディ、州、ReleaseTime)の値(?、?、?、?、?、?、?)"
C.execute(SQL、(件名、区分、ユーザ名、電子メール、体、国家、release_time))
conn.commit()
はconn.close()
のページを埋めるために提出ジャンプの後に繰り返し提出によって引き起こさカトンを防ぐために#
リターンリダイレクト(なurl_for(「フィードバック」))


@ app.route( "/一覧/")
DEFリスト():
"" "" "すべての問題が表示さ"
SQL = "ROWID DESCによるフィードバック順からROWID、*を選択し、"
#のフィードバック= query_sql(SQL)
プリント(フィードバック)
キー= request.args.get( 'キー'、 '')
SQLが=「f.ROWIDを選択し、F 。*、フィードバックからINNER F c.CategoryNameは次のようにc.ROWID = f.CategoryIDどこf.Subjeck上のカテゴリcを登録しようか!f.ROWID順'
フィードバック= query_sql(SQL、(F '%{キー}%'))
戻りrender_template( 'フィードバックするlist.html'、アイテム=フィードバック)


@ app.route(' /デル/ <ID > / ')
DEF delete_feedback(ID = 0):
"" "删除问题、前端传ID "が""
CONN = sqlite3.connect(DATABASE)
C = conn.cursor()
= "?ROWID =フィードバックから削除" SQL
C。


リダイレクトリターン(なurl_for( 'リスト'))


編集
@ app.route( "/編集/ <ID> /")
DEF編集(ID =なし):
"" "のid HTMLオーバー編集リターンパスのフロントエンド" 「」
#は、バインドされ、ドロップダウンリストを取得する
SQL =「SELECT ROWID、」カテゴリから区分名
カテゴリー= query_sql(SQL)
#idは現在の情報を取得し、変更準備するフォームを形成するために結合さ
から、SQL *は=「、ROWIDを選択ROWID = WHEREフィードバック?」
curren_feedback = query_sql(SQLは、(上記、IDを述べた)、TRUE)
リターンSTR(curren_feedback)#ビューのデータ列がチェックアウトして、簡単なHTMLレンダリング発注
リターンrender_template( 'edit.html'、カテゴリ =カテゴリ、 = curren_feedback項目)


app.route( "/ save_edit /"、メソッド= [ 'POST'])@
DEFのsave_edit():
"" "編集された"" "保存
IF request.method == 'POST'の:
ID = request.form.get( 'ROWID'、なし)
応答= request.form.get( '返信')
状態= 1の場合request.form.get( '状態'、0)== 'で'他0
SQL =「更新フィードバックは、返信を設定= ?,州=?どこROWID =?」
CONN = sqlite3.connect(DATABASE)
C = conn.cursor()
c.execute(SQL、(応答、状態、ID))
conn.commit()
はconn.close()
リターンリダイレクト(なurl_for( 'リスト'))


であれば__name__ == '__main__':
app.run(
デバッグ=真

 

HTML

{%が'base.html' %延び} 

{%ブロックmain_content%}
<DIV CLASS = "行">
<! -增加搜索的入口- >
<DIV CLASS = "パネルのパネルデフォルト">
<DIV CLASS = "パネルの見出し">
<フォームアクション= "#"クラス= "フォームインライン">
の<input type = "text"のクラス= "フォームコントロール" NAME = "キー" ID = "キー">
の<input type =クラス= "BTN BTN-デフォルト"値= "点击搜索"> "送信"
</ FORM>
</ DIV>
<を! -把之前的表格移到パネル体里面- >
<divのクラス= "パネル-ボディ">
<テーブルクラス= "テーブルテーブルホバー">
<TR>
<TH> ID </番目>
<TH>主题</番目>
<TH>カテゴリ</番目>
<TH> <TH />ユーザ
のメールボックス<TH> </番目>
<TH>処理ステータス</番目>
</番目>投稿<TH>
操作<TH> </番目>
</ TR>
{%}アイテムのアイテムの%
<TR>
<TD> loop.index {{}} </ TD> <! - IDトラバーサル機能神社提供テンプレート- >
<TD> {{アイテム。 Subjeck}} </ TD> < ! - 神社辞書の特徴値付属のテンプレート- >
<TD> {{item.get( '区分'、0)}} </ TD> <! - Pythonが来ます辞書関数値- >
<TD> {{項目[ 'ユーザー名']}} </ TD> <! - Pythonの辞書機能の値が来ます- >
<TD> {{アイテム[ 'メール']}} </ TD>
<TD> <スパンクラス= "ラベルラベル- {{ '危険'の場合は、他のアイテム[ '国家'] == 0の成功'}}"> {{ "未处理"であればアイテム[ '国家'] == 0他の"已处理"}} </スパン> </ TD>
<TD> {{アイテム[ 'ReleaseTime']}} </ TD>
<TD>
<HREF = "#"クラス= "BTN BTN成功" >查看</a>の
<a href="{{ url_for('edit', id=item['rowid']) }}" class="btn btn-default">编辑</a>の
<HREF =」 {{なurl_for( 'delete_feedback'、ID =項目[ 'ROWID'])}}」クラスは= "BTN BTN-危険">删除</a>の
</ TD>
</ TR>
{%ENDFOR%}
</ TABLE>
</ div>
</ div>
</ div>

{%の末端ブロック%}

 

おすすめ

転載: www.cnblogs.com/zhongyehai/p/11461625.html