自動化無しに生活無し

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

  • 【Python】pipで翻訳系ライブラリのgoogletransをインストールする【※バージョン指定しないとエラー】

    グーグル翻訳を手軽に試すことができる、Pythonライブラリのgoogletrans。 だが、インストールするバージョンの指定を間違えると、正常に動作してくれない不具合が報告されている。 下記コマンドを実行してインストールするべし。 pip install googletrans==3.1.0a0 その上で、下記を実行する。 from googletrans import Translator translator = Translator() string_ja = "Pythonの勉強は楽しい" trans_en = translator.translate(string_ja, dest="en") print(trans_en.text) 正常に翻訳されている。 ...
  • 【Django】sorted関数とoperatorでモデルのフィールド、メソッドを指定してソーティング・並び替えをする【ランキングの実装に有効】

    例えば、モデルがこうだったとする。 from django.db import models class Topic(models.Model): comment = models.CharField(verbose_name="コメント",max_length=2000) score = models.IntegerField(verbose_name="スコア") def twice(self): return self.score*2 ビューでこのようにすることで、モデルフィールドもしくはモデルメソッドでソーティングができる。 from django.shortcuts import render,redirect from django.views import View from .models import ...
  • 【Django】allauthとカスタムユーザーモデルを実装した簡易掲示板を作る【AbstrastBaseUser】

    手元のディレクトリ内で雛形が分散していたので、自分用に作った。 コードは40分Django簡易掲示板から。allauthはsettings.pyにID認証を、ユーザーモデルはDjangoのGitHubから何も書き加えていないモデルをそのまま流用した。 以前はfirst_nameとlast_nameを1つのhandle_nameにしたが、今回は元に戻した。 雛形をすぐにDLして書き換えができるようにGit ...
  • 【Django】1回のリクエストで複数のデータを投稿する【request.POST.getlist()】

    例えば、複数のデータを投稿しなければならない時。 フォームに内容を書いて投稿(POSTリクエスト)、投稿内容が表示される(レスポンス) フォームに内容を書いて投稿(POSTリクエスト)、投稿内容が表示される(レスポンス) フォームに内容を書いて投稿(POSTリクエスト)、投稿内容が表示される(レスポンス) フォームに内容を書いて投稿(POSTリクエスト)、投稿内容が表示される(レスポンス) などと複数回リク ...
  • 【保存版】Ajax(jQuery)の仕組みと仕様

    本記事は、たびたび忘れがちなAjaxのパラメータや引数などの意味を思い返すための備忘録である。 let form_elem = "#form_area"; let data = new FormData( $(form_elem).get(0) ); let url = $(form_elem).prop("action"); let method = $(form_elem).prop("method"); $.ajax({ url: url, // リクエストの送信先 type: method, // 送信するリクエストのメソッド data: data, // 送信するデータ(FormDataオブジェクト型) processData: false, // dataに指定した内容をURLエンコードして送信(?page=2などの形式)にするかの指定。FormDataオブジェクトの場合はfalseを指定 contentType: false, ...
  • 【Django】自前でLoginRequiredMixinのような物を作るには、dispatchメソッドを使う【多重継承】

    • 作成日時:
    • 最終更新日時:
    • Categories: サーバーサイド
    • Tags: django
    LoginRequiredMixinのように、ビューが実行される前に何かの処理を実行したい場合。 dispatchメソッドに処理を書くと良いだろう。ただ、全てのビュークラスにdispatchメソッドを書いているようでは手間がかかる。 そこで、多重継承して利用できるように仕立てる。つまり、LoginRequiredMixinのような物を自前で作るのだ。 ソースコード 下記のようにdispatchメソッドを含 ...
  • 【Django】openpyxlでエクセルファイルを新規作成、バイナリでダウンロードする【FileResponse】

    Djangoでエクセルファイルを新規作成し、ダウンロード(以下DL)する。 ファイルのDLと言うと、ファイルのアップロードと同じようにやればいいだろうと思うかもしれない。 実際、ファイルをストレージに保存し、そのURLへリダイレクトしてDLする方法でも、問題なく動作する。しかし、これではストレージが圧迫される。 そこで今回は、サーバーのメモリ内に保存されているファイルをバイナリに変換し、レスポンスとして ...
  • 【Django】settings.pyのINSTALLED_APPSにはどのように書くのが適切か【順番とapps】

    公式の書き方 Django公式によると、下記のように書くのが適切。 INSTALLED_APPS = [ "bbs.apps.BbsConfig", 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] 参照元: https://docs.djangoproject.com/ja/4.0/ref/applications/#configuring-applications 一部媒体における書き方 一方で一部の媒体では以下のように書かれてある。 INSTALLED_APPS = [ "bbs", 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ] どちらが正しいのか? bbs/apps.pyにて、下記のように仕立てる。 from django.apps import AppConfig class BbsConfig(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = 'bbs' verbose_name = "簡易掲示板" これは管理サイトで操作するモデルの一覧を表記する際、verbose_nameを追加 ...
  • 【Django】ユーザー作成時に何らかの処理を行う方法【saveメソッドオーバーライド】

    カスタムユーザーモデルを使用している時、ユーザーアカウント新規作成時に何らかの処理を行って欲しい場合。 そういう時はSignupFormのsaveメソッドをオーバーライドする。 SignUpFormのコード from django.contrib.auth.forms import UserCreationForm from .models import CustomUser class SignupForm(UserCreationForm): class Meta(UserCreationForm.Meta): model = CustomUser fields = ("username") def save(self, request, commit=True, *args, **kwargs): #ユーザーモデルのオブジェクト作成(ただし、保存をしない) user = super().save(commit=False) #生のパスワードをハッシュ化した上で、モデルオブジェクトの属性にセットする。 user.set_password(self.cleaned_data["password1"]) #保存す ...
  • 【Django】context_processorsを使い、全ページに対して同じコンテキストを提供する【サイドバーのカテゴリ欄、ニュース欄などに有効】

    以前は、ビュークラスの継承を使ったり、MIDDLEWAREでリクエストオブジェクトを操作したりすることでテンプレートに対してデータを提供していたが、これではやや無駄が多い。 Djangoにはcontext_processorsという、任意の処理を行った後contextを追加できる便利な機能があるので、こちらを使う。 context_processorsを作る まず、アプリディレクトリ内部に、custom ...