2022年9月17日土曜日

Django 覚書14 WARNINGS: ?: (urls.W005) URL namespace 'admin' isn't unique. You may not be able to reverse all URLs in this namespace

 https://stackoverflow.com/questions/47933278/django-project-namespace-admin-isnt-unique を参考にさせていただきました。

path('admin/', admin.site.urls)を重複して、urls.pyに指定していたのが原因だった。Top階層のurls.pyのみに指定すると、解決。

2022年9月15日木曜日

Sqlite dump backup restore & 初期化

SQLiteのバックアップと復元は、こんな感じでできる。
backup
sqlite3 db.sqlite3
sqlite> .databases
sqlite> .output /dirname/test.dump
sqlite> .dump table_name
restore
% rm db.sqlite3
% sqlite3 test.dump < test.dump
****************
初期化したいときは、各アプリのmigrationsフォルダとdb.sqlite3をするといいという説明のサイトがあったので、実際やってみたが、うまくいかない。
別のサイトの情報では、migrationsフォルダの中の_init_pyは残して、他は削除とあった。この方法だとうまくいった。と、思ったら、エラーメッセージが出て、0001_initial.pyが必要という指示が出る場面があった、指示通りバックアップからファイルを追加したら、解決したというものもあった。微妙に調整が必要な場合もある?ようだ。そういうことに備えて、migrationsも、バックアップとってから削除したほうがいいかもしれない。

2022年9月11日日曜日

Django 覚書13 スクエアをsandboxからproductionに切り替えるにあたって

※View内のenviroment切り替えは、environment=request.site.sitedetail.production_sandbox

のような形で、adminのサイトページにSelectコントロールを追加し、sandboxとproductionの切り替えをすぐできるようにした。

ネット上のマニュアルを翻訳してみた。***********

Follow the steps to open the Developer Dashboard, but this time choose Production mode and copy the production application ID and access token.手順に従って開発者ダッシュボードを開きますが、今回は本番モードを選択し、本番アプリケーション ID とアクセス トークンをコピーします。

Update the domain string in the JavaScript reference from sandbox.web.squarecdn.com/v1/square.js to web.squarecdn.com/v1/square.js.JavaScript リファレンスのドメイン文字列を sandbox.web.squarecdn.com/v1/square.jsからweb.squarecdn.com/v1/square.js に更新します

The Web Payments SDK requires a valid application ID to return a payment token. Update the code by providing your production application ID.Web Payments SDK では、支払いトークンを返すために有効なアプリケーション ID が必要です。本番アプリケーション ID を指定してコードを更新します。

 In the "Configure the backend with your access token" section, you provided a Sandbox access token. Replace it with the production access token.「アクセス トークンを使用してバックエンドを構成する」セクションで、サンドボックス アクセス トークンを指定しました。これを本番アクセス トークンに置き換えます。

If you want to test the application in a production environment (squareup.com), you must use an actual payment card. Note that Square actually charges payment cards in production. Therefore, if you must test in production, charge minimum amounts.本番環境でアプリケーションをテストする場合 ( squareup.com)、実際の支払いカードを使用する必要があります。Square は実際に本番環境で支払いカードに課金することに注意してください。したがって、本番環境でテストする必要がある場合は、最小限の料金を請求してください。


Django 覚書12 Pythonのmap filter等の使い方で注意が必要なこと

 スクエアのサブスクリプションのリストには、カスタマーIDが表示されるが、これをアプリ内のユーザー名と紐づけする方法を考えてみた。簡単そうだが、意外にはまってしまった。結果的には、以下のようにすることで解決できたが、ここに至るまでは、試行錯誤が必要だった。

<View側>

usertmpl3=list(map(lambda ob:{'customerid':ob.customerid,'username':ob.username},User.objects.all()) )          

srclst=list(filter( lambda ob: ob.get('canceled_date',"")=="",list(result.body['subscriptions'])))

subscriptions=list(map( lambda ob : {'subsc':ob ,  'cid':next( filter(lambda ob2: ob2['customerid'].strip() == ob['customer_id'].strip() ,usertmpl3),{'customerid':"",'username':"削除"})['username'] } ,srclst ))

sng= datetime.datetime.strptime(nen1, "%Y/%m/%d")
eng=  datetime.datetime.strptime(nen2, "%Y/%m/%d")
sbdt=list(filter(lambda sd:datetime.datetime.strptime(sd['subsc']['start_date'], '%Y-%m-%d')>=sng and datetime.datetime.strptime(sd['subsc']['start_date'], '%Y-%m-%d')<= eng,subscriptions))          

注意点:usrtmpl3、srclstいずれも最後にlistを適用してある。こうしないと、うまく動作しない。(filter()関数の戻り値はgeneratorオブジェクトという記述がネット内にある。)

まわりくどい式になってしまった。もっとスマートな方法がありそうだが。値が存在しないときに「削除」という表示にしたかったので、nextを使ってみた。

<HTML>
sbdt=response.sbdt;
$('<p style=font-weight:bold;>ユーザー名  サブスクリプションID ~</p>').appendTo('.result');
for (var i in sbdt) {  
   $('<p>'+sbdt[i]['cid']+" "+sbdt[i]['subsc']['id'] ~ +'</p>').appendTo('.result');  }
       

2022年9月10日土曜日

高血圧の基準と降圧剤ビジネス

 https://president.jp/articles/-/61331?page=4

 高血圧の基準は年々きびしくなっている。なぜだろう?と思うことがあったが。何が本当なのか、よくわからない。高すぎても、低すぎてもよくないということは、確かかもしれない。

2022年9月7日水曜日

スイフトのエンジンが安定しない。イグニッションコイル交換

 10万kmはもつといわれているイグニッションコイルだが、なぜか、14万kmで2回目の交換。今回は寿命がくるのがはやい。プラグもまだなんとかなるはずなんだけれど。とりあえず、交換したら快調になった。あまりケチらず、少し高いイグニッションコイルを購入した。

Django 覚書11

 スクエアを利用してみる。

pip install squareup

APIの説明が膨大。和訳して読みこなす。

Ajaxで、サーバを動作させて(Viewに記述)なんとかできそうだ。

様々なIDが必要でかなり手間はかかるし、いろいろ工夫も必要なようだ。