ロリポップサーバーにFlaskで検索システムを作ろう!

- Step1: まずHelloワールドを出そう!
- Step2: DBを導入しよう。
- Step3: 追加画面と検索結果画面を作る。
- Step4. 検索処理を実装する。
- Step5:管理画面を作成する。
- Step6: 表示を整える。
Step1: まずHelloワールドを出そう!
なんでこんな当た離前なことを書くのか? 今回はロリポップサーバーで環境を作成するため、ファイル権限など通常のフラスク ディレクトリ構成は以下のようにします
$ ll -rw------- 1 <ユーザー名> LolipopUser 471 6月 25 2022 .htaccess -rwx------ 1 <ユーザー名> LolipopUser 190 6月 25 19:56 index.cgi -rw------- 1 <ユーザー名> LolipopUser 191 6月 25 20:53 views.py
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
# ロリポップサーバーで公開するフォルダーを設定した場合は↓を設定する必要がある
RewriteRule ^(.*)$ /index.cgi/$1 [QSA,L]
- view.py
from flask import Flask, render_template,request, redirect app = Flask(__name__) @app.route('/') def hello(): return "Hello Test" if __name__ == '__main__': app.run(debug=True)
- index.cgi
#!/usr/local/bin/python3 from wsgiref.handlers import CGIHandler #from helloFlask import app from views import app #from flaskr import create_app #app = create_app() CGIHandler().run(app)
Step2: DBを導入しよう。
Webサービスなのでデータベースはしようしたいところです。
今回はよく使われるSQL Alchemyをしようします。
step1とstep2の差分は以下をご覧ください。
https://github.com/Makisygen/MovieSearchExample/compare/step1%E2%80%A6step2
インストールしていない場合はインストールする。
pip install flask-sqlalchemy pip install flask-migrate
ターミナルからDBの使用を可能にする。
export FLASK_APP=setup.py flask db init flask db migrate -m "initial" flask db upgrade
Step3: 追加画面と検索結果画面を作る。
さて続いて映画の情報をDBに登録する処理と検索結果を表示する画面を追加します。
ステップ3では具体的な検索の処理はまだ作らず一覧表示のレベルにとどめます。
https://github.com/Makisygen/MovieSearchExample/compare/step2%E2%80%A6step3
register.html 登録ページです。
search_result.py 検索結果ページ
views.py 検索処理を追加しています。 今回注目するのはregister.htmlとviews.pyで追加した後に/にリダイレクトし、リダイレクト先の処理ではDBを全検索した結果を返すようにします。
SQL Archemyで全検索をする処理は以下のようにします。
datas = Movie.query.all()
上の「Movie」はstep2で定義したMovieクラスになります。
Step4. 検索処理を実装する。
検索処理を追加します。 ここからは追加処理のみを書くようにします。 https://github.com/Makisygen/MovieSearchExample/compare/step3%E2%80%A6step4
検索処理を追加しています。
上のsearch_result.htmlのフォームの送信先を/resultとし、アクセスされた時の処理を追加します。
ポイントとなるのは絞り込みでFlaskでSQL Archemyを使って検索する場合は以下のようにします。
SQL Archemyは普通にSQL文を組むことができないので悩んだことがある方もいると思いますが、差分内の以下の部分のようにのようにquery.filte\を何回も使用することでANDをとることができます。
if len( category_list ) > 0 : query = query.filter(Movie.category.in_(category_list)) query = query.filter(Movie.name.contains(name_txt)) if price_txt == "0_1000": query = query.filter(Movie.price < 1000) elif price_txt == "1000_2000": query = query.filter(Movie.price >= 1000) query = query.filter(Movie.price < 2000) elif price_txt == "2000_3000": query = query.filter(Movie.price >= 2000) query = query.filter(Movie.price < 3000) elif price_txt == "3000_": query = query.filter(Movie.price >= 3000) datas = query.all()
Step5:管理画面を作成する。
https://github.com/Makisygen/MovieSearchExample/compare/step4%E2%80%A6step5
Step3で追加画面を作成しましたが、それを改造して削除も行える管理画面にします。また、一般用の検索画面を追加します。
register.htmlに検索窓を追加し、さらに検索結果のテーブルに一括削除用のチェックボックスを入れています。
view.pyの検索処理に変わりはありませんが、管理画面からの検索か一般用画面からの検索下で上記チェックボックスを表示するかを変更するためにfromと名付けた隠し要素をhtmlに追加し処理を分けています。
Step6: 表示を整える。
さて、このままでは見栄えが悪いので今回はBootStrap5を使って表示を成形します。 https://github.com/Makisygen/MovieSearchExample/compare/step5%E2%80%A6step6 bootstrapのページは以下です。 https://getbootstrap.jp
変更対象は以下です。 - templates/search_result.html - templates/register.html
参考
https://www.web-dev-qa-db-ja.com/ja/python/flasksqlalchemyでidによってレコードを削除する方法/1050352193/ https://shigeblog221.com/python-sqlalchemy-update/ https://outputable.com/post/validate-flask/ https://qiita.com/Bashi50/items/7f2214550e80b87fb922 https://qiita.com/arkuchy/items/14f49fe24395f1dd9412 https://setsunaru.com/programming/python/sqlalchemy-delete-errror/ https://qiita.com/TamaiHideaki/items/346bf843ee6ee1aa6e93 https://www.sukerou.com/2019/04/sqlalchemyandor.html
日焼け止め3選(普段用/外出用)

夏が近づいてきますね。日焼け止めを塗りましょう。
ではどのように選べばいいのでしょう?
本記事では日焼け止めの基礎知識と選び方についてまとめました。
日焼け止めの基礎知識1: SPFやPAって何?
よくパッケージに載っている用語のSPFとPA。
一体何が違うのでしょう?
実は紫外線にはUVAとUVBの2種類があります。
紫外線は2種類ある
紫外線と一言に言っても
「UVA(紫外線A波)」と「UVB(紫外線B波)」の2種類があります。
UVBは紫外線が当たった後の炎症や黒化、シミそばかすの原因になります。
UVAは肌のたるみの原因になります。(いわゆる光老化)
PAはUBAを防ぐ指標
日焼け止めのパッケージに「+」マークが複数印字されているのをみたことがあるかと思います。
「Protection Grade of UVA」といいUVAを防ぐ効力の指標です。略してPAと書かれていることが多いです。
防止できる効果に応じて+〜++++まで印字されています。
SPFはUVBを防げる時間
SPFは何も塗らなかった時に比べてどのくらいの時間UVB(紫外線B波)を防ぐことができるかの指標になっています。 SP1が20分とされており以下は目安です。 SPF20:400分間 SPF30:600分間 SPF50:1000分間
とりあえずSPFが高いのを塗っておけば良い?
そうでもないようです。SPFを上げるための成分は肌に対する刺激が強いと言われています。
従ってSPFが低いものをこまめに塗る方が良いと言われています。
外出用のSPF高めのものと普段用のSPF低めのものを使い分けましょう。
おすすめ日焼け止め:お出かけ編
お出かけ用を3つずつまとめました。 松竹梅の段階分けをしています。 梅と松or竹の2つを持って置くと使い分けができて良いです。
選ぶ基準としては以下を挙げています。
松:[資生堂]フェイスカラークリエーター
竹:[KOSE]サンカットシリーズ
| PA | SPF | お値段 | その他 |
|---|---|---|---|
| ++++ | 50 | 700円程度 | 写真撮影のトーンアップ・とてもいい香り! |
お買い求めやすい値段でSPF50しかもトーンアップ効果があり写真撮影の強い味方になってくれます。 また、とても良い香りがします。顔周辺に使うと良いでしょう。
おすすめ日焼け止め:普段使い編
参考
Python備忘録

長くなったらそれぞれのページにしこの記事は目次的な扱いとします。
Pythonのドキュメント
以下が公式ドキュメントです。
https://docs.python.org/ja/3.8/
時刻について
datetimeメソッドを使う
現在時刻の取得はnowメソッドを使う。
import datetime datetime_now = datetime.datetime.now() print(datetime_now) # 2022-03-27 19:00:00.738759 print(datetime_now.year) # 2022 print(datetime_now.second) # 0
datetimeメソッドを使う
CSVファイルの扱い
Flaskでラジオボタンを出す
詰まったのでメモ。
クラス定義(moduleなのでapp.pyの中に書いてもOK)
from wtforms import Form from wtforms.fields import ( RadioField ) class TestForm(Form): radio_test = RadioField(label='フォーマット', choices=[ ('mp4', 'mp4'), ('m4a', 'm4a')])
view.py
from <クラスを定義したファイル> import TestForm @app.route('/test') def test(): form = URLForm(request.form) return render_template('test.html', form=form)
test.html
{% for subfield in form.radio_test %}
<label>
<input class="with-gap" type="radio" value="{{subfield.label.text}}" id="{{subfield.label.text}}" name="format_select">
<span>{{subfield.label.text}}</span>
</label>
{% endfor %}
⭐️罠だったのはラベルの値のみを取ってくるところでsubfield.label.textのように「text」を描く必要がある。
参考の中にある公式リファレンスに書いてなかった。。
参考
https://note.com/mu_no_program/n/nb05c2ba1efd7
https://tanuhack.com/flask-client2server/
https://qiita.com/s_tomi/items/b72a3fa544e9b8142027
【ニュースで英語】Ukrainians Denied Entry to United States
日本語訳
彼らはウクライナのパスポートを持っていますが、米国に入国するためのビザはありません
他に行く場所がありません
ソフィアと彼女の3人の子供たちは、爆撃がルーマニアを横切って運転を開始してから3日後に出発し、その後ここで米国メキシコ国境に向かいました。
私はアメリカに家族や友人がいて、彼らは私をサポートする準備ができています
ソフィアは2回入国を拒否され、彼女は一人ではありません
9人のウクライナ人を含むこのグループは、昨日も今日も、他の多くの人と同じように国境警備隊の将校によって拒否されました。 彼らは混乱していて、次に何をするのかわかりません
両手を広げてウクライナ難民を歓迎します
今日の大統領の発言にもかかわらず、2020年の切望された政策により、米国の国境は依然として公式に亡命希望者に近い。
今、私たちにできることは何もありません
例外はケースバイケースで行われます
私たちはあなたが知っている国境管理の人たちにその事件で私たちを助けるように頼もうとしてきました
アレックスの家族は、今日彼らの家が砲撃された後、逃げました。
今、私たちは洪水に変わる小川に変わるトリクルを持っています
彼女の3回目の試みで、弁護士はソフィアを発見し、彼女が米国に入るのを手伝いました。
故郷での戦争が激化し、より多くの家族が列に加わったので、彼らが次に来ることを望んでいる他の人々
私たちのYouTubeチャンネルを見てくれてありがとう、nbcニュースアプリをダウンロードして今日のトップストーリーと最新ニュースをフォローしてください
【ニュースで英語】Ukraine Invasion Grows More Relentless As Russia Seizes Nuclear Plant
字幕は⚙マークから設定可能です(そっちの方が見やすい)。
日本語訳
ウラジーミル・プーチン大統領が明らかにウクライナの抵抗を誤って判断した後 彼は、チェルン天国のこの近所を総当たりで一掃することでそれを埋め合わせようとしているようです これは、ゾディマーの当局者がロシアのストライキに見舞われたと言う学校の残されたものです.
そしてNATOは今やロシアがクラスター爆弾を使用したと非難している.
ロシアや米国ではないが、多くの国で禁止されている無差別兵器.
ウクライナの民間人は、ロシアの侵略がより執拗にそしてより無謀になっているので、日ごとに重い代償を払っています
ヨーロッパ最大の原子力発電所への夜間の冷え込み攻撃で、この白黒の監視映像の炎とフレアが発電所の近くの建物から流れ出るロシアの曳光弾を見ることができます
ウクライナの大統領zielinskiは、ロシアの警告放射で歴史を話すのを止めたかもしれない夜と呼んでいますが、あなたの国の国境がどこにあるのかわかりません
今夜ロシアは植物の支配権を握った.
国連当局は、どの原子炉も衝突せず、放射線も放出されなかったと述べています.
一方、ロシア軍は、息子をオデッサに向けて発砲し、マリオポルを取り囲んで攻撃した後、南部で成功を収めています。市長は、黒海からウクライナを遮断するというロシアの明白な目的が不足していると述べています。
首都キエフでは今、逃げるための緊急のスクランブルがあります.
ロシア軍が都市に近づきつつある中、人々はそこから流れ出ています。両親は子供たちにつながれています。彼らはペットを連れて行き、祖父母を連れて行き、誰もが西に向かっています。
電車のアナウンスや笛が聞こえてきて、線路に登る人々の長い列が別の時代のように感じます
子供たちが母親の叫び声を上げているのを聞いたときの最もクレイジーな気持ちはとてもクレイジーなので、人々がとても恐れているのを見るとパニックになります 一日中こんな感じで、プラットホーム9で待っていた人たちから、これらの列車がどこから出発するのか、かなり混乱しています。ほんの少し前に、西への列車が実際にプラットホーム12から出発するという発表がありました。
今、誰もがそこに急いでいて、誰もそれを見逃したくない.
これはドアのすぐ上へのプッシュです.
赤ちゃんを宙に浮かせている人を見たことがあります。
彼らはできるだけ多くの人をこの電車に詰め込もうとしているので、私たちが話した多くの家族は、今朝、家を片付けて駅に来て西に向かうことにしたと言いました
オクサナは彼女の1歳を連れて行き、彼らは最終的にどこに行くのかわからないまま夫を置き去りにしています
私たちは戦争中です彼女は私たちが子供たちを連れ出さなければならないと言います.
戦うために後ろにとどまっているoleksieは、彼の妻と息子に別れを告げることは彼の人生で最も困難な瞬間であると私たちに言いました
今日、ウクライナを再び助けるためにこれ以上何もしないことで西側を批判したジーリンスキー大統領は、飛行禁止区域を要求したが、NATOは米国が行ったようにそれを除外した
私たちのYouTubeチャンネルを見てくれてありがとう、nbcニュースアプリをダウンロードして今日のトップストーリーと最新ニュースをフォローしてください
【ニュースで英語】Ukraine Invasion Grows More Relentless As Russia Seizes Nuclear Plant
字幕は⚙マークから設定可能です(そっちの方が見やすい)。
ウラジーミル・プーチン大統領が明らかにウクライナの抵抗を誤って判断した後 彼は、チェルン天国のこの近所を総当たりで一掃することでそれを埋め合わせようとしているようです これは、ゾディマーの当局者がロシアのストライキに見舞われたと言う学校の残されたものです
そしてNATOは今やロシアがクラスター爆弾を使用したと非難している ロシアや米国ではないが、多くの国で禁止されている無差別兵器 ウクライナの民間人は、ロシアの侵略がより執拗にそしてより無謀になっているので、日ごとに重い代償を払っています
ヨーロッパ最大の原子力発電所への夜間の冷え込み攻撃で、この白黒の監視映像の炎とフレアが発電所の近くの建物から流れ出るロシアの曳光弾を見ることができます
ウクライナの大統領zielinskiは、ロシアの警告放射で歴史を話すのを止めたかもしれない夜と呼んでいますが、あなたの国の国境がどこにあるのかわかりません
今夜ロシアは植物の支配権を握った 国連当局は、どの原子炉も衝突せず、放射線も放出されなかったと述べています 一方、ロシア軍は、息子をオデッサに向けて発砲し、マリオポルを取り囲んで攻撃した後、南部で成功を収めています。市長は、黒海からウクライナを遮断するというロシアの明白な目的が不足していると述べています。
首都キエフでは今、逃げるための緊急のスクランブルがあります ロシア軍が都市に近づきつつある中、人々はそこから流れ出ています。両親は子供たちにつながれています。彼らはペットを連れて行き、祖父母を連れて行き、誰もが西に向かっています。 電車のアナウンスや笛が聞こえてきて、線路に登る人々の長い列が別の時代のように感じます
子供たちが母親の叫び声を上げているのを聞いたときの最もクレイジーな気持ちはとてもクレイジーなので、人々がとても恐れているのを見るとパニックになります 一日中こんな感じで、プラットホーム9で待っていた人たちから、これらの列車がどこから出発するのか、かなり混乱しています。ほんの少し前に、西への列車が実際にプラットホーム12から出発するという発表がありました。
今、誰もがそこに急いでいて、誰もそれを見逃したくない これはドアのすぐ上へのプッシュです 赤ちゃんを宙に浮かせている人を見たことがあります。 彼らはできるだけ多くの人をこの電車に詰め込もうとしているので、私たちが話した多くの家族は、今朝、家を片付けて駅に来て西に向かうことにしたと言いました
オクサナは彼女の1歳を連れて行き、彼らは最終的にどこに行くのかわからないまま夫を置き去りにしています
私たちは戦争中です彼女は私たちが子供たちを連れ出さなければならないと言います 戦うために後ろにとどまっているoleksieは、彼の妻と息子に別れを告げることは彼の人生で最も困難な瞬間であると私たちに言いました
今日、ウクライナを再び助けるためにこれ以上何もしないことで西側を批判したジーリンスキー大統領は、飛行禁止区域を要求したが、NATOは米国が行ったようにそれを除外した
私たちのYouTubeチャンネルを見てくれてありがとう、nbcニュースアプリをダウンロードして今日のトップストーリーと最新ニュースをフォローしてください
【ニュースで英語】Putin Forced To Fight On Multiple Fronts
字幕は⚙マークから設定可能です(そっちの方が見やすい)。
日本語翻訳
今夜のプーチン大統領は、ウクライナだけでなく、複数の面で彼の戦争と戦うことを余儀なくされました。
別の夜の抗議と今日だけで逮捕された465人がロシアの自宅で反対を強めているようです。
200人のロシア人ジャーナリストが紛争に対する請願書に署名したと報告している。
有名人やスポーツスターがロシアのトップテニスプレーヤーであるアンドレ・ルビロフが試合に勝った後、カメラのレンズに戦争を書かないように言っています。
そして、大統領と投票したロシアの議員は、私が爆撃されるキーブに投票しなかったと今ちょうど今週入れました。
ロシア政府は、クレムリンのウェブサイトが一時的にダウンしている間、フェイスブックとツイッターを制限することで対応しました。
サイバー攻撃と、孤立の高まりに直面している外交の最前線での犠牲者は、すでに西側の制裁の影響を感じていると述べています。
セルゲイ・ラブロフ外相は記者団に制裁措置は非常に深刻であり、ロシアの航空会社に空域を閉鎖し、ロシアがロシアの貨物船を一晩中押収し、ロシアの親しいパートナーである中国がロマン・アブラモビッチの娘が今夜チェルシーフットボールクラブの支配権を放棄したことを含む反戦メッセージを投稿したと伝えられるところによると、オリガルヒの子供たちとロシア政府当局者でさえ、モスクワを残して非難を拒否するセキュリティ評議会の投票軍事的にウクライナだけでなく、国内外で圧力をかける私たちのユーチューブチャンネルを見て、今日のトップストーリーをフォローし、NBCニュースアプリをダウンロードしてニュースを壊してくれてありがとう

