効果:
main.py
UTF-8:1#コーディング SQLAlchemyのインポートcheck制約、列、整数、テキスト、or_から sqlalchemy.schemaからインポートFetchedValue flask_sqlalchemyインポートSQLAlchemyのから フラスコインポートフラスコから、なurl_for、リダイレクト、render_template、リクエスト、フラッシュ、CURRENT_APPの インポートOS、SYS アプリ=フラスコ(__ name__) BASEDIR = os.path.abspath(os.path.dirname(__ FILE__)) App.configファイル[ 'SQLALCHEMY_DATABASE_URI'] = 'のSQLite:///test.db' App.configファイル[ 'SQLALCHEMY_TRACK_MODIFICATIONS'] =真の デシベル= SQLAlchemyの(アプリ) クラスの先生(db.Model): __tablename__ = '教師 ID = db.Column(db.Integer、PRIMARY_KEY = TRUE) 名= db.Column(db.Text) 年齢= db.Column( db.Integer) 国= db.Column(db.Text) 他: :DEF(自己、名前、年齢、国)__init __ self.Name =名前 self.Age =年齢 self.Country =国 app.route @( '/'、メソッド= [ 'GET']) DEF家(): 記事= Teacher.query.all() の戻りrender_template( 'show_article.html'、記事=記事) @ app.route( '/検索') デフ(検索): キーワード= request.args.get( 'キーワード') プリント(キーワード) 結果= Teacher.query.filter(or_(Teacher.Name ==キーワード、Teacher.Age ==キーワード、Teacher.Country ==キーワード))すべて()。 もし結果: リターンrender_template( 'show_article.html'、記事=結果) 復帰「NOコンテンツが見つかりませんでした!」 @ app.route( '/リスト/更新/ <ID>'、メソッド= [ 'GET'、 'POST']) DEF MODI(ID) :request.method == 'GET'であれば 、結果= Teacher.query。 filter_by(ID = ID).first_or_404() の戻りrender_template( 'update_article.html'、記事=結果) 他: 名前=のRequest.Form [ '名前'] 年齢=のRequest.Form [ '年齢'] 国=のRequest.Form [ '国'] 結果= Teacher.query.filter_by(ID = ID).update({ 'name'の名前、 '年齢':年齢、 '国':国}) db.session.commit() リターンリダイレクト( '/') @ app.route( '/ <ID>'、 もしrequest.method == 'GET': 結果= Teacher.query.filter_by(ID = ID).first.or_404 リターンrender_template( 'show_article.html'、記事=結果) 他: 結果= Teacher.query.filter_by(ID = ID).delete() db.session.commit() の戻り''、204 @ app.route( '/ favicon.icoを') DEFファビコン(): リターンsend_from_directory(os.path.join(app.root_path、 '静的')、 'favicon.icoを'、MIMEタイプ='画像/ vnd.microsoft.icon ') __name__場合== '__main__': app.run(ポート= 8081)
show_article.html
<!DOCTYPE HTML> <HTML> <HEAD> <リンクのhref = "// www.w3cschool.cn/statics/plugins/bootstrapold/css/bootstrap.min.css"のrel = "スタイルシート"> <スクリプトSRC = "HTTPS ://cdn.bootcss.com/jquery/1.12.4/jquery.min.js "> </スクリプト> <リンクREL ="ショートカットアイコン"HREF =" {{( '静的'なurl_for、ファイル名= 'ファビコン。 ICO ')}} "> </ head> <body> <! -ジンジャ模板语法- > <div> <フォームメソッド=" GET」ACTION = "{{なurl_for( '}})'検索" /> <入力タイプは、= "text"の名= "キーワード" /> <入力タイプ= "提出" /> <スパン> <A HREF = "{{なurl_for( 'ホーム')}}">ホーム</a>を</ span>を </ FORM> </ div> <表のスタイル= "幅:240ピクセル"クラス= "テーブルテーブルストライプ" > <THEAD> <TR> <TD> <スパンクラス= "ラベルのラベル情報"> <A HREF = "/リスト/更新/ {{article.Id}}"スタイル= "色:白 ">修改</a>を</ span>を</ TD> <番目のスタイル= "幅:120ピクセル">名前</目> <番目のスタイル= "幅:60PX">年齢</目> <番目のスタイル"幅:60PX">国</目> </ TR> </ THEAD> <TBODY> {%であれば物品%} {物品%の資料用%} <TR> <TD> {{article.Name}} </ TD> <TD> {{article.Age}} </ TD> <TD> {{article.Country}} </ TD> <TD> <スパンクラス= "ラベルラベル成功"> <A HREF = "#"クラス= "BTN-削除"援助= "{{article.Id }} "スタイル="色:白">删除</a>の</スパン> </ TD> </ TR> {%ENDFOR%} </ TBODY> {%他%} <pは>いいえコンテンツが見つかりませんでした!</ P> {%endifの%} ます。<script type = "text / javascriptの"> $( 'a.btn-削除')。()、機能(EVTを'クリック'の{ EVT .preventDefault(); VAR援助= $(この).ATTR( '援助'); $アヤックス({ URL: "/" +援助、 種類: "DELETE"、 contentTypeの: "アプリケーション/ jsonの" 成功:機能(RESP){ window.open( "/"、 "_自己"); }、 エラー:関数(RESP){ アラート( "删除博文失败详情:!" + resp.message); } }) })。 </ SCRIPT>
update_article.html
<!DOCTYPE HTML> <HTML> <HEAD> <リンクREL = "ショートカットアイコン" HREF = "{{なurl_for( '静的'、ファイル名= 'favicon.icoを')}}"> </ head> <body> < DIV> <フォームアクション= "/リスト/更新/ {{article.Id}}" METHOD = "POST"> <ラベル>名:<ラベル> の<input type = "text"の名= "名前"値= "{ {article.Name}}」/> <br>ログイン <ラベル>年齢:</ラベル> の<input type = "text"の名= "年齢"値= "{{article.Age}}" /> < BR> <BR> <ラベル>国</ラベル> の<input type = "text"の名= "カントリー"値= "{{article.Country}}" /> <br>ログイン <input type =送信/> </ TABLE> <TBODY> </ FORM> </ div> <BODY> </ HTML>