django
Djangoでローカルメモリキャッシュを使う
djangoで一時的にデータをメモリに記録して欲しい場合、ローカルメモリキャッシュを使う。 Redisと違って、プロセス単位で動くため python manage.py runserver を止めたり再起動させたりするとすぐに揮発してしまうが、Pythonオブジェクトの保存もできるため、使いどころを考えればとても便利。 使い方 settings.py に以下を追記。 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', } } これでキャッシュの設定は完了。 続いて、ビューなどの任意の箇所で from django.core.cache import cache topics = Topic.objects.all() cache.set('topics', topics, timeout=60) などとキャ ...UbuntuへRedisをインストールし、Django上でキャッシュサーバーとして扱う
UbuntuへRedisをインストール sudo apt install redis でインストール完了。 redis-cli でRedisのCLIを起動する。 SETコマンド、GETコマンドでキーの追加・取得ができる。 127.0.0.1:6379> SET mykey "Hello, Redis!" OK 127.0.0.1:6379> GET mykey "Hello, Redis!" 127.0.0.1:6379> 削除をしたいときは、DELコマンド 127.0.0.1:6379> GET mykey "Hello, Redis!" 127.0.0.1:6379> DEL mykey (integer) 1 127.0.0.1:6379> GET mykey (nil) 127.0.0.1:6379> 動作確認をするには、systemctl コマンド sudo systemctl status redis 動いていればこんな表示になる。 ● redis-server.service - Advanced key-value store Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2025-03-13 09:50:21 JST; 12min ago Docs: http://redis.io/documentation, man:redis-server(1) Main PID: 52676 (redis-server) Status: "Ready to accept connections" ...Djangoでサーバーのウェブカメラを使ってライブ配信、クライアント側からON・OFF操作
【Django】DBの保存(投稿と編集)、削除に対して任意の動作をする【signals】
FastAPIでDjangoのORMを使う
Django-channelsのAsyncWebsocketConsumerのscopeの内容【JWT認証+Sec-Websocket-Protocol】
AsyncWebsocketConsumer の scope の内容は以下の通り。 ただし、JWT認証をしており、Sec-Websocket-Protocol を使用している。 { 'type': 'websocket', 'path': '/ws/chat/1/', 'raw_path': b'/ws/chat/1/', 'root_path': '', 'headers': [ (b'host', b'localhost:8000'), (b'user-agent', b'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0'), (b'accept', b'*/*'), (b'accept-language', b'ja,en-US;q=0.7,en;q=0.3'), (b'accept-encoding', b'gzip, deflate, br, zstd'), (b'sec-websocket-version', b'13'), (b'origin', b'http://localhost:3000'), (b'sec-websocket-protocol', b'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzM3MTg4NDg5LCJpYXQiOjE3MzcxODgzNDUsImp0aSI6IjI0OWRlMTUzMjY0YTQ4ZDE5YWVkZDJiODlhNTgwY2M5IiwidXNlcl9pZCI6MX0.hzS0uwx4LhPlM6wFJiIUpEkjVjkGpV87psw5MD1leyk'), (b'sec-websocket-extensions', b'permessage-deflate'), (b'sec-websocket-key', b'Q257WDS+ETm8KNLmj6cQiQ=='), (b'dnt', b'1'), (b'sec-gpc', b'1'), (b'connection', b'keep-alive, Upgrade'), (b'cookie', b'csrftoken=8ShA2y6HDOr794MF0TdrSnbEv76KCY0Y; _ga_HDX0LW64ZT=GS1.1.1737184513.53.1.1737184805.0.0.0;'), (b'sec-fetch-dest', b'empty'), (b'sec-fetch-mode', b'websocket'), (b'sec-fetch-site', b'same-site'), (b'pragma', b'no-cache'), (b'cache-control', b'no-cache'), (b'upgrade', b'websocket') ], 'query_string': b'', 'client': ['127.0.0.1', 35492], 'server': ['127.0.0.1', 8000], 'subprotocols': ['eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNzM3MTg4NDg5LCJpYXQiOjE3MzcxODgzNDUsImp0aSI6IjI0OWRlMTUzMjY0YTQ4ZDE5YWVkZDJiODlhNTgwY2M5IiwidXNlcl9pZCI6MX0.hzS0uwx4LhPlM6wFJiIUpEkjVjkGpV87psw5MD1leyk'], 'asgi': {'version': '3.0'}, 'user': <User: asahina>, 'path_remaining': '', 'url_route': {'args': (), 'kwargs': {'room_name': '1'}} } ユーザーエージェントやCookieのデータも含まれる。 今回、ミドルウェアなどで操作しているため、状況によっ ...DRF+ReactのSPAでCRUD簡易掲示板をつくる
SQliteはマルチスレッド・マルチプロセスに対応していない
SQliteはマルチスレッド・マルチプロセスに対応していない。 同時に大量のクエリをさばくことはできない。 実際にやってみる djangoで実際にやってみる。ベースは、40分django from django.shortcuts import render,redirect from django.views import View from .models import Topic from .forms import TopicForm import threading def writing(data): form = TopicForm(data) if form.is_valid(): form.save() class IndexView(View): def get(self, request, *args, **kwargs): print(Topic.objects.all().count()) context = {} context["topics"] = Topic.objects.all() return render(request,"bbs/index.html",context) def post(self, request, *args, **kwargs): threads = [] copied = request.POST.copy() for i in range(1000): thread = threading.Thread(target=writing, args=(copied,)) threads.append(thread) thread.start() # 全てのスレッドが終了するまで待機 for thread in threads: thread.join() return redirect("bbs:index") index = IndexView.as_view() 1回目は正常に1000個分のスレッドを処 ...DateTimeFieldで、フォーマットを指定したserializers.pyを作る
- 作成日時:
- 最終更新日時:
- Categories: サーバーサイド
- Tags: django drf serializers.py react
DateTimeFieldを含むモデルで、シリアライザをこう作ると from rest_framework import serializers from .models import Category,Todo class CategorySerializer(serializers.ModelSerializer): class Meta: model = Category fields = ("id", "created_at", "name", "color") class TodoSerializer(serializers.ModelSerializer): category = CategorySerializer() class Meta: model = Todo fields = ("id", "category", "created_at", "content", "deadline", "is_done") このようにタイムゾーン表記になってしまう。 作成日: 2024-12-25T12:00:00+09:00 締切: 2024-12-25T12:00:00+09:00 年月日表記に修正をするには、serializers.pyでフォーマットを指定する。 from rest_framework import serializers from .models import Category,Todo class CategorySerializer(serializers.ModelSerializer): created_at = serializers.DateTimeField(format="%Y年%m月 ...