自動化無しに生活無し

WEB開発関係を中心に備忘録をまとめています

  • 【Django】allauth不使用でユーザー認証機能を実装した簡易掲示板【ログインとログアウトのみ】

    Djangoでは、サードパーティー製ライブラリとしてdjango-allauthを使用することで、誰でも簡単にユーザー認証機能を実装させることができる。 とはいえ、事情によってライブラリの使用が制限されていたり、単なるユーザーIDとパスワードによるログインを行いたいだけであれば、デフォルトのLoginView及び、LogoutViewを使えば簡単に実装できる。 本記事ではallauthよりも手っ取り早 ...
  • 【Django】年月検索と、年別、月別アーカイブを表示させる【最新と最古のデータから年月リストを作成(Trunc不使用)】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: django
    Djangoで月別アーカイブと年月計算を実装させる 元となったコードは40分Djangoにモデルへ投稿日を記録するフィールド(dt)を追加している。 forms.py from django import forms from django.core.validators import MinValueValidator,MaxValueValidator from .models import Topic class TopicForm(forms.ModelForm): class Meta: model = Topic fields = ["comment"] #モデルを使用しないフォームクラス class YearMonthForm(forms.Form): year = forms.IntegerField() month = forms.IntegerField(validators=[MinValueValidator(1),MaxValueValidator(12)]) モデルを使用しないフォームクラスで年と月を数値型で受け取る。月は1から12までの数値なので、validatorsで追加の制約を付与する。 views.py 年月別アーカイブのリ ...
  • Django-allauthにてフォームを中央寄せにさせる【ログインページのテンプレートのカスタマイズ】

    以前の方法であれば、単純なCSSの割り当てだけだったので、ログインフォームを中央寄せに仕立てることはできなかった。 今回は、HTMLも大幅に変更を行い、ログイン画面のフォームを中央寄せに仕立てる。 account/base.html 全てのログインフォームのテンプレートから継承されるbase.htmlを下記のように編集する。 {% load static %} <!DOCTYPE html> <html> <head> <title>{% block head_title %}{% endblock %}</title> <!--中央寄せ、フォーム系のタグは全てBootstrapから拝借--> ...
  • chart.jsでグラフ表示幅と高さを指定する。

    まず、公式によると下記の方法ではchart.jsの横幅と高さ指定は通用しない。 <canvas id="graph" height="40vh" width="80vw"> 他にもクラス名を指定して、そのクラス名に幅などの装飾を施す方法も通用しない。 対策 対策1:親要素でstyle属性にposition:relativeとwidth及びheightを合わせて指定する。 クラス名にCSSで装飾を施すのではなく、親要素のstyle属性に指定しなければうまく行かないので注意。 <div style="position:relative;width:250px;height:250px;"> <canvas id="graph"></canvas> </div> 対策2: ...
  • 【Django】テンプレートで数値を使用したforループを実行する方法【レビューの星のアイコン表示などに有効】

    通常、DjangoTemplateLanguageのforループは数値型のループは許さない。ループが許されているのは、文字列型かリスト型、イテラブルなオブジェクトに限定される。 これを普通のPythonで表現するのであれば、こんな状態。 for content in contents: print(content) このcontentsに数値を入れることはできないのはPythonをやっていればわかる。しかし、とある方法を使えば数値のループは実現できる。 テンプレートタグw ...
  • Laravelで.env(環境変数)に指定した値をチェックする方法【コントローラ・ビュー】

    例えば、コントローラなどで開発段階とデプロイ後で処理を切り分けたい事がある。そういう時は、.env(環境変数)に指定した値を参照してif文で分岐させれば良い。 コントローラで環境変数に指定した値を確認する。 if ( env("APP_DEBUG") ){ \Log::debug("APP_DEBUGはTrueです"); } else{ \Log::debug("APP_DEBUGはFalseです"); } これで解決す ...
  • Laravel 8.x系のroute/web.phpはこう書く【Target class [Controller Name] does not exist.】

    Laravel7.x系はサポートが切れているので早めにLaravel8.x系にしたいところ。 ルーティングの記法が変わっているので確認しましょう。 –resourceの場合 こうする。 #7.x系以前の書き方。 #Route::resource('/topics', 'TopicsController'); #8.x系以降の書き方。 use App\Http\Controllers\TopicsController; Route::resource('/topics', TopicsController::class); 冒頭で予めコントローラをuseしておく。 コントローラのアクションと逆引き用の名前を指定する場合。 こうする。 #7.x系以前の書き方。 #Route::get('/topics', 'TopicsController@index')->name('topics.index'); #8.x系以降の ...
  • HTMLのformタグで送信(submit)をする際に、確認をとった上で送信を行う【onsubmit属性】

    例えば、下記のような削除ボタンであれば、削除ボタンが押されると同時に削除が実行される。 <form action="" method="POST"> <!--CSRF_token--> <input class="btn btn-outline-danger" type="submit" value="削除"> </form> これでは間違えて押してしまった時に取り返しが付かない。 そこで下記のようにformタグにonsubmit属性を付与する。これで削除の送信前に確認をとった上で送信を行う事ができる。 <form action="" method="POST" onsubmit="if(confirm('本当に削除し ...
  • Laravel8.xでページネーターのSVGの矢印がおかしいので修正する。

    問題だらけのLaravel8.xでまた問題が出てきた。ページネーションを普通に使うと、このようにSVGが狂っており、巨大化する。 修正 app/Providers/AppServiceProvider.phpにて下記のようにする。 <?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use Illuminate\Pagination\Paginator; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { Paginator::useBootstrap(); } } これでLaravel7.x以前のBootstrapを使った普通のページネーション ...
  • Djangoをやる前に知っておきたいPython構文【オブジェクト指向(class文)と別ファイル読み込み(import文)は特に重要】

    Djangoを始める前に知っておきたいPython構文をまとめる。 型 #数値型 score = 100 #文字列型 name = "Taro" #リスト型 numbers = [ 46,77,22 ] #辞書型 topic = { "id":1, "comment":"Hello" } #辞書型のリスト topics = [ { "id":1, "comment":"Hello" }, { "id":2, "comment":"Hi" }, { "id":3, "comment":"こんにちは" }, { "id":4, "comment":"どうも" }, ] 数値型は演算子(+ - * /)のいずれかを使用して計算を行うことができ ...