【snake】Section: 13 Creating a Custom Admin Dashboard
Why Are We Not Using Flask-Admin?
①カスタマイズに関してより知識を深めるため。
②デバッグでテストする際に何千行も書かれた3rd partyを使うべきでない。
③大して難しくない。
Adding the Admin Blueprint Viewing the Main Dashboard
Section12からAdminフォルダーがある。
url_prefix='/admin'を設定することでurlがすべてadminになる。
@admin.before_requestを設定することで、
これより下の@確認が完了しないとrequestができないようにする。
26行目のrole_requiredはuserフォルダーのdecolator.pyで設定されている。
38行目のif文でrolesを確認して、違うroleなら見れないようにする。
views.pyに戻る、
@admin.route('')→が空欄になっているのはprefixでurlを指定しているから。
models.pyでDashboardクラスを確認してみる。
27行目でcountをして、28行目で検索をする。
35行目で結果を反映させる。
Listing Users
9行目はサーチボックス。
12行目は0で初期設定してある。
61行目から64行目は時間表示をさせる。
マウスオーバーさせると詳しい時刻も表示する。
実際にmoment.jsの使い方を説明する。
base.htmlにmoment.jsを埋め込む。
16行目からjavascriptでfrom.nowが設定されている。
macroで設定がされている。
macroフォルダーのuser.htmlで設定がされている。
もしadminならfa-shieldアイコンで表示する。
レギュラーユーザーならfa-userアイコンで表示する。
macroフォルダーのitem.htmlの
34行目の{% macro paginate(resource) -%}は非常に重要である。
よくわからん。
views.pyへ戻る、
55行目の.paginate(page, 50, True)で何人表示させるかを決める。
Editing Users
edit.htmlを開くと{% include 'admin/user/form.html' with context %}とある。
form.htmlを開くと、
endpointって何よ?
biews.pyに戻る、
64行目で検索して
65行mでidを発行する。
UserFormがどうのように設定されているかをforms.pyで確認する。
roleを選択できるようにする。
choices=choices_from_dictがどのように設定されているかをlibフォルダーで確認する。
dict=辞書って意味。変更の設定をできるようにする。
forms.pyに戻る
active = BooleanFieldが使われている。
views.pyへ戻る
validate_on_submitでformを確認する
is_last_adminを詳しく見る、 最後のadminか確認するコードが書かれている。 もし最後のadminの場合はflashメッセージを報じさせる flash('You are the last admin, you cannot do that.', 'error')
Generating Fake Users with the CLI
fake id mの発行方法
以下のコマンドで何をaddできるかを見ることができる。
$ docker-compose exec website snakeeyes add
次のコマンドでuserを100人追加することができる。
$ docker-compose exec website snakeeyes add users
requirement.txtで取り込む。
次にcmdフォルダーのcmd_add.pyを見る。
users functionをみる。かなり大規模だが簡単である。
74行目で100人追加する。
75行目の(fake.email())は偽アドレスを生成する。
81行目はrandom_emailがなくなったらストップする。
84行目はfake.dateにすることで適当な時間が生成される。
92行目は95%がメンバーで生成される。
同じような感じでいろいろ書かれている。
最後はpramsにまとめて_bulk_insertへ送り込む。
bulk_insert functionは一気にデータをinsertしてくれる。
Searching and Sorting Users
Searchはuser/index.htmlで行われている。
3行目でform.pyからfとしてインポートされている。
9行目でmacroが指示されている。
68行目でsearch formが定義されている。
今回はgetメソッドで定義されている。
getにすることでブックマークや検索ページをブックマークできる。
ここからviews.pyを解説する。
.filter(User.search(request.args.get('q', '')))とあるので
models.pyのsearch functionを確認する。
%{0}%はパーシャルでも検索可能にする。
emailとuserを検索する。その際、ilikeとしている。
また、from sqlalchemy import orでシーコルアルコミーからorをインポートしてる。 or(*search_chain)とすることでmailかuserのどちらとも検索する。 and_だったら、両方に待ちしたものになる。
他にも確認すべきことは色々あるが飛ばす。
Deleting Users
この画面を作る。
statistic/script/main.jsのチェックボックスをカウントする。 checkboxのjsに関してはよくわからん。
javascriptの使い方に関して。
views.pyの/users/bulk_deleteに関して postリクエストで行う。 get_bulk_action_idsはsqlalcomyにある get_bulk_action_idsはlibフォルダーのutil_sqlalchemy.pyにある。