django
【Django】アップロードしたPythonファイルを動かす【subprocessと動的import】
アップロードしたPythonファイルをDjango側で動作させる。 仮想環境を動かし、事前にインストールしておいたライブラリも動くようにする。 views.py from django.shortcuts import render,redirect from django.views import View from .models import Document from .forms import DocumentForm from django.conf import settings import subprocess import importlib.util import os class IndexView(View): def get(self, request, *args, **kwargs): context = {} context["documents"] = Document.objects.all() # アップロードされたPythonを実行する。 document = Document.objects.filter(id=1).first() # アップロードされたPythonプログラムのファイルパスを作成 program_path = str(settings.BASE_DIR) + document.file.url # 仮想環境のファイルパスを作成(pythonファイルのある ...Djangoのcreatesuperuserでインタラクティブシェルを省略する。
python manage.py createsuperuserで管理ユーザーをつくることができるが、その後のインタラクティブシェルの入力がめんどくさい。 そこで、環境変数を使ってインタラクティブシェルを省略する。 更に、エイリアスを使ってコマンド入力も簡略化させる。 # createsuperuser の自動化 export DJANGO_SUPERUSER_USERNAME="asahina" export DJANGO_SUPERUSER_EMAIL="asahina@asahina.com" export DJANGO_SUPERUSER_PASSWORD="seiya0723" alias django_createsuperuser="python manage.py createsuperuser --noinput" ...【Django】django-otpで多要素認証(二要素認証)を実現させる【GoogleAuthenticator】
【Django】任意のタイミングでサーバーのカメラでライブ配信する【imutils.video.VideoStreamer】
下記記事で、リアルタイムでブラウザ上に映像を出力することができるようになった。 【Django】OpenCVとyieldを使い、ウェブカメラの映像をライブ配信する しかし、このコードはrunserverと同時に起動しているため、カメラを止めることはできない。 任意のタイミングでカメラのON・OFFをするため、改良した。 必要なライブラリ asgiref==3.8.1 Django==5.0.6 imutils==0.5.4 numpy==1.26.4 opencv-contrib-python==4.9.0.80 sqlparse==0.5.0 typing_extensions==4.12.0 views.py from django.shortcuts import render,redirect from django.views import View from .detector import SingleMotionDetector from imutils.video import VideoStream from django.http import StreamingHttpResponse import os import cv2 import time import ...【Django】ストレージに保存されているファイルにアクセス、編集して保存する【InMemoryUploadedFile】
【Django】逆参照で効率的にDBにアクセスする【.prefetch_related() 】
例えばこのモデルのとき。 from django.db import models class Category(models.Model): name = models.CharField(verbose_name="名前",max_length=20) class Topic(models.Model): comment = models.CharField(verbose_name="コメント",max_length=2000) category = models.ForeignKey(Category, on_delete=models.CASCADE) 普通に逆参照を使うと、クエリが再実行されるためDBに負担がかかる categories = Category.objects.all() for category in categories # ここでDB読み込み print( ...【Django Rest Framework】モデルメソッドはシリアライザメソッドで代用する
DRFとReactのSPAを作る時、DTLは使えない。 これまでのようにモデルオブジェクトからメソッドを呼び出すことはできない。 そこで、シリアライザにメソッドを用意して代用する。 モデル 前提として、このようにモデルメソッドを作った時。 from django.db import models class Topic(models.Model): comment = models.CharField(verbose_name="コメント",max_length=2000) def comment_lenth(self): return len(self.comment) これでは、React ...【Restful】Django+Reactビギナーが40分で掲示板アプリ(SPA)を作る方法【axios + 関数コンポーネント】
【Restful】Django+Reactビギナーが40分で掲示板アプリ(SPA)を作る方法【axios】 ではクラスベースのコンポーネントを使っている。 最近の開発では関数ベースのコンポーネントが主流のため、一部を書き換えた。 React App.js import React, { useState, useEffect } from "react"; import Modal from "./components/Modal"; import axios from "axios"; const App = () => { const [topicList, setTopicList] = useState([]); const [modal, setModal] = useState(false); const [activeTopic, setActiveTopic] = useState({ comment: "" }); // コンポーネントがレンダリングされるときに実行する useEffect(() => { refreshList(); }, []); // ページロード const refreshList = () => { axios .get("/api/topics/") ...Django(DRF)+ReactのSPAでJWTを使った認証を実装する