【snake】 Section: 16 Accepting Recurring Payments ②
Cancelling Your Subscription
Subscriptionのページで下のボタンでキャンセル項目がある。 進むとconnect itボタンがある。 キャンセルを確定させると
それでは実際にcancel.htmlをみる。 かなりシンプルなので解説はない。
次にbilling.pyを確認する。
以下の2つをチェックする
@handle_stripe_exceptions @login_required
130行目ではユーザーがsubscriberで無いか確認する。
もし、subscriberでない場合は、settingsページへ飛ばす。
134行目はただのフォームである。
136行目は有効なsubmitionかを確認する。
userをパスしてcancellationを確定させる。
この際のキャンセルメソッドを解説する。
それではsubscription.pyを確認する。
最初にするのはgatewayを呼び出す。
subscription.comを確認する。
updateメソッドと同じである。
customer_idを検索して、customerへ格納する。
subscription_idへそのidを渡して、182行目でdeleteする。
再度subscription.pyに戻る
158行目でpayment_idがnoneになる。
159行目で時間を渡す
161行目でuserをdbにadd
162行目でuserとsubscriptionをdeleteする
168行目でもしcredicard があればdbから消す
subscriptionを解約してもクレカ情報は保存できるように
discard_credit_cardパラメーターを作ってある。
そして最後にcommmitして確定させる。
Extending the Admin Dashboard
adminページを作る。
何%がクーポン使ってるかとかをわかるようにしている。
dashboard.htmlを見て見る。
次にviews.pyを見て見る
group_and_count_plans
group_and_count_coupons
group_and_count_users
models.pyを見て見る
group_and_count_couponsのみ普通では無い。
33行目でsqlalchemyのqueryを使って、couponを使用した数を数える。
query(Subscription)でサブスクリプションの中で検索
filter(Subscription.coupon.isnot(None))で使って無いクーポン
最後に.count()で数を数える。
35行目で全てのsubscriptionをカウントする。
fun.countと.countだとfuncの方が効率的らしい。
37行目でtotalが0の場合は、percentぜろとしている。
Managing Coupons in the Admin (Front-End)
クーポンの発行ページ
Duration
Foreverは 請求の度に適用
Onceは一度だけ
クーポンの発行枚数や有効期限はここで確認できる
view.pyとかを見る前にjavascriptのdatetimeに関して見る。
92行目から99行目は重要だけどjs読めない。
103行目はdtは何をする?
104行目は重要なフォまーマット設定。
form.pyをみる。51行目でdtが設定されている。
index.htmlを見るとcreate couponボタンが設定されている
89行目から91行にはマクロが設定されている。
次にbillling.htmlを見る
macro coupon_expiration(coupon)を見る
インフィニティサインを見せる
Managing Coupons in the Admin (Back-End)
views.pyをみる。 149行目はcouponページ 次にnew couponをみる
coupon formを確認する前にcoupon modelを確認する。
クーポンテーブル
40行目にvalidを設定(Boolean)して、有効じゃ無いのは表示されないようにする。
form.pyでCouponFormを確認する。いろいろ制限がある。
この中で新しいのはRedeem(受け取り)を日程で入れれる。
次に、def validateを確認する。
89行目でvalidationじゃなければreturn falseする。
パーセントオフか金額のオフの1つしか選べないようになっている。
ここでviews.pyの174行目に戻る。もし、有効であれば、進む。
177行目でおkであれば、couponをpopulateする。
189行目はからは値が入れられる。
もしよければ190行目でクーポンを発行する。
creartメソッドを見る前にcoupon.pyのinitを確認する。
initでクーポンを発行する。44行目でuppper laterにする。
もしくは、46行目でランダムなクーポンコードを発行する。
random_coupon_code()を確認する。
charset = string.digits + string.ascii_uppercaseでランダムで発行
89〜91行目は、読み間違えやすいので含めないようにする。
.join(choice(charset) for _ in range(14))で合体させた14桁で作る。
クーポンがちゃんと発行できたかを確認する。
adminのviews.pyに戻って、bulk_deleteを確認する。
クーポンを削除するコード。
celery.taskをtask.pyで確認する。
次にcoupon.pyを見る。
166行目でクーポンがあるか確認して、あればstropeで消す。
stripe gatewayで確認して見る。stripecome.pyで確認できる。
class Coupon(object):のdeleteメソッドがある。
また、coupon.pyへ戻り続きを確認する。
173行目でもしdeleteだったらクーポンdelet eして、deleteした数をカウントする。
Expiring and Subscribing with Coupons 有効期限管理
configフォルダーのsetting.pyを確認する。
クレカの有効期限チェックと同じでceleryを確認する。
task.pyを確認する。expire_old_couponsをみる。
次にmodelフォルダーのcoupon.pyでexpire_old_couponsをみる。
compare_datetimeは今日の日付けである。
本日を過ぎているかチェックして、データベースをアップデートする。
114行目の書き方がよくわからない。
クーポン一覧のページ クーポン入力ページ。下に緑くdetailが出るようになっている。 実際にクーポンを使うとredeemがカウントされる。 subscriptionの人数やそのうち何人がクーポン使ってるかを表示する。
Javascriptに関して、main.jsを確認する。
jsはよくわからないので飛ばす。
billing.pyを確認する。
43行目の422はhttpでprocess出来ないというコード
coupon.pyでfind_by_codeを確認する。
Coupon.redeemableはスペシャルハイブリドモデルらしい。
@hybrid_propertyはなんかいいらしい。
coupon.pyでredeemableを確認して見る。
ここで残りのクーポン数を確認する。
views.pyへ戻る。
48行目でクーポンがまだあるかを確認する。
もしあれば、render_jsonへ飛ばす。
coupon.pyでto_jsonを確認する。
main.jsで確認する。
subscription.pyを確認する。
103行目でもしクーポンが存在するなら
coupon.pyでredeemを確認する。
残りの使えるクーポン枚数を確認してdbへsaveする。
billing.pyを確認する。
subscription.pyでupdateメソッドを確認する。