自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

  • 【Ubuntu】systemdでPythonファイルを動作させる【常駐スクリプトに】

    このPythonコードを動作させる。ファイルパスは~/Documents/systemd/test.py import datetime, time while True: with open("test.txt", mode="w") as f: f.write( str(datetime.datetime.now()) ) time.sleep(1) 必要最小限度の serviceファイルが以下。ファイルパスは/etc/systemd/system/testpython.serviceとする。 [Unit] Description=write text file After=network.target [Service] ExecStart=/usr/bin/python3 test.py WorkingDirectory=/home/testuser/Documents/systemd [Install] WantedBy=multi-user.target 下記で動作できる。 sudo systemctl start testpython.service 動作中は/home/testuser/Documents/systemd/te ...
  • 【Django】.getlist()でtype="checkbox"のチェックの有無を調べる【複数人の権限の指定に有効】

    背景 とあるプロジェクトを作るとして、複数人のユーザーが紐づくとする。 ユーザーごとに読み込み、書き込み、実行の権限を割り当てて行く必要がある。 これを1回のリクエストで送信するとき、どう実現させるべきか。 問題 .getlist() を使うことで、同じname属性の値をすべて取得することができる。 しかし、type="checkbox"の場合はその限りではない。 例えば、以下のようなフォームの場合。 <form method="POST"> {% csrf_token %} ...
  • 【Django】getlistを使って複数枚の画像をまとめて送信する【サムネイルが表示される専用フォームあり】

    以前解説した、 inputタグのtype=‘file’で画像のサムネイルを表示させる を使って、複数の画像をgetlistを使ってアップロードできるように仕立てる。 通販サイトでは、1つの商品に複数枚の画像がセットされることが多いので、そちらに対応させる。 解説 モデル from django.db import models from django.utils import timezone class Topic(models.Model): dt = models.DateTimeField(verbose_name="投稿日時&q ...
  • テキストエリアに入力時に、Tabキーを押してタブを入力する【マークダウンやコードの入力に有効】

    直接コードを入力する場合に有効。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Hello World test!!</title> </head> <body> <textarea id="textarea"></textarea> <script> const textarea = document.querySelector('#textarea'); textarea.addEventListener('keydown', function (e) { if (e.key === 'Tab') { // デフォルトの動作(フォーカスの切り替え)を防止 e.preventDefault(); // カーソル位置の前と後を取得 const start = this.selectionStart; const end = this.selectionEnd; // カーソル位置にタブ文字を挿入 const tab = '\t'; this.value = this.value.substring(0, start) + tab + this.value.substring(end); // カーソル位置を調整(タブを入力した後にカーソルを移動) this.selectionStart = this.selectionEnd = start + 1; } }); </script> </body> </html> 動かすとこうなる 半角スペース4文字分にするには? <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Hello World test!!</title> </head> <body> ...
  • DjangoでManyToManyFieldを使い、中間テーブルのモデルを取得する【多対多のthrough】

    例えば、こういうモデル構造の場合、 from django.db import models class Person(models.Model): name = models.CharField(max_length=128) def __str__(self): return self.name class Group(models.Model): name = models.CharField(max_length=128) members = models.ManyToManyField(Person, through='Membership') def __str__(self): return self.name class Membership(models.Model): person = models.ForeignKey(Person, on_delete=models.CASCADE) group = models.ForeignKey(Group, on_delete=models.CASCADE) date_joined = models.DateField() invite_reason = models.CharField(max_length=64) 通常、Groupモデルの、membersフィールドで呼び出せるのは、紐付いているPersonモデルのオブジェクトである。 中間テーブルのモデルであるMembershipではない。 もし、membersフィールドからMembershipモデルのオブジェクトを取り出したい場合は、 group = Group.objects.all().first() memberships = ...
  • DjangoでBootstrapを使う【pip install django-bootstrap-form】

    DjangoのBootstrap関係のライブラリは混在しているので、仕事で使うものを覚書に記録。 pip install django-bootstrap-form をインストールして、INSTALLED_APPSに "bootstrapform" を追加する。 テンプレートで、 {% load bootstrap %} {{ form|bootstrap }} として呼び出す。 ...
  • 【Django】EC2インスタンスへgitを使ってデプロイする

    scpによるファイルアップロードの場合、ローカルで削除した差分ファイルがインスタンス上に取り残されてしまう。 可能であれば、gitを使ったデプロイができるようになっておきたい。 手順 インスタンスにリモートリポジトリを作る ローカルにリポジトリを作る リモートリポジトリとローカルリポジトリをつなげる SSHの設定に.pemファイルを登録する プッシュする インスタンスにリモートリポジトリを作る インスタンスのデフォ ...
  • Django-summernoteでアップロード上限を設定する

    デフォルトで、Django-summernoteにアップロードできるファイルサイズには上限が設定されている。 こちらで上限を開放できる UPLOAD_SIZE = 200 * 1000 * 1000 SUMMERNOTE_CONFIG = { 'attachment_filesize_limit': UPLOAD_SIZE, 'summernote': { 'width': '100%', 'height': '480', } } 参照: https://stackoverflow.com/questions/74588821/how-to-change-file-upload-size-limit-django-summernote ...
  • Django Summernoteを使ったブログで、本文の画像を記事のサムネイルにするには【BeautifulSoup使用】

    Django-summernoteを使ったブログサイトを作るとき。 ブログの記事の一覧表示にはサムネイルの表示が必要になる。 しかし、記事にサムネイル専用のフィールドを割り当ててしまうと、本文の画像とかぶってしまう(サムネイル用の画像を指定した後、記事にも同じ画像を貼り付けるという二度手間) そこで、記事の一番最初に指定された画像をサムネイルとして使えるよう、モデルメソッドを作った。 BeautifulS ...
  • Todoリストのウェブアプリの要件定義書の書き方

    要件定義書の書き方 にて、要件定義書に必要な項目をまとめた。 では、実際に要件定義書を書くとなった場合、具体的にどうかけば良いのか。 本記事では、Todoリストのウェブアプリを作る想定で要件定義書をまとめた。 業務要件 背景 1日のうちにやることが不明瞭で無下に時間を過ごしている やることを紙に書いているが、紙資源がもったいない いつまでに何をやるのか、わかりやすく管理したい 目的 紙ではなくウェブアプリでやることを ...