2024年10月3日木曜日

Windows IISサーバーの停止

Windows 11に設置したIISサーバーを停止するコマンド

停止
> iisreset /stop

開始
> iisreset /start




2024年10月2日水曜日

Python: ジェネレーター作成方法

ChatGPTによる回答

#### 1. ジェネレーター式(generator expression)を使った方法

```python

data_a = [0, 1, 2, 3]

gen_a = (item for item in data_a)

```

このコードでは、**ジェネレーター式**(generator expression)を使ってジェネレーターを作成しています。ジェネレーター式は、リスト内包表記のような書き方で、`()` で囲むことでジェネレーターを生成する方法です。



#### 2. `yield` キーワードを使ったジェネレーター関数

関数の中で `yield` キーワードを使うと、ジェネレーターを作成できます。この方法は、ジェネレーター式より柔軟で、複雑な処理を行いたい場合に便利です。



```python

# ジェネレーター関数の定義

def my_generator():

    for i in range(4):

        yield i



# ジェネレーターの作成

gen_a = my_generator()



# 1つずつ値を取り出す

for value in gen_a:

    print(value)

```



このコードでは、`my_generator` 関数は `yield` を使って値を一つずつ返すジェネレーターを作成しています。



#### 3. `itertools` モジュールを使う

Pythonの標準ライブラリ `itertools` には、ジェネレーターを扱うための便利な関数が多数用意されています。いくつかの例を紹介します。



```python

import itertools



# 無限の数値を生成するジェネレーター

gen_a = itertools.count(start=0, step=1)  # 0, 1, 2, 3, ...



# リストの要素を繰り返すジェネレーター

data_a = [0, 1, 2]

gen_b = itertools.cycle(data_a)  # 0, 1, 2, 0, 1, 2, ...



# 要素を繰り返し指定回数生成するジェネレーター

gen_c = itertools.repeat('A', times=3)  # 'A', 'A', 'A'

```



これらのジェネレーターは、無限に続くものや、特定の条件に基づいて値を生成するものなど、多様な使い方ができます。



#### 4. `map` や `filter` 関数を使う

`map` や `filter` もジェネレーターの一種として機能します。`map` は関数を適用した結果を逐次生成し、`filter` は条件を満たす要素だけを生成します。



```python

# mapを使ったジェネレーター

data_a = [0, 1, 2, 3]

gen_a = map(lambda x: x * 2, data_a)  # 0, 2, 4, 6



# filterを使ったジェネレーター

gen_b = filter(lambda x: x % 2 == 0, data_a)  # 0, 2

```



### まとめ

- `()` を使った **ジェネレーター式**(質問の方法)

- `yield` を使った **ジェネレーター関数**

- `itertools` モジュールの関数を使ったジェネレーター

- `map` や `filter` での関数適用によるジェネレーター



これらが Python でジェネレーターを作成する主な方法です。用途に応じて最適な方法を選んでください。

2024年9月5日木曜日

WordPress: プラグインBogoを利用して翻訳した投稿を他のユーザーが編集できない場合

WordPressのBogoを利用して投稿を英訳しました。
他のユーザー(編集者権限)は、日本語(元言語)は編集できるのですが、英語の投稿が編集できません。

管理者のユーザー一覧で、他のユーザー(編集者権限)にアクセス権限を与えないといけませんでした。
以下の画面で英語にチェックを入れます。




2024年7月31日水曜日

Django: プロジェクト全体でテンプレートタグを使いたい

以下のような構成とします。

/myproject
/myproject/myproject
/myproject/myapp
/myproject/templates
/myproject/templatetags/__init__.py
/myproject/templatetags/custom_tags.py

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], #/myproject/templates
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            'libraries': {
                'custom_tags': 'templatetags.custom_tags', #myproject/myproject以下にしたい場合はmyproject.templatetags.custom_tags とすればよい
            }
        },
    },
]

テンプレートの方で {% load custom_tags %} とすれば、自作テンプレートタグがプロジェクトで共用できるようになる。

2024年7月4日木曜日

MySQL プライマリキーのインクリメントをリセットする

MySQLでは、以下の手順でincrementを1に初期化できます。

MySQLのDBに接続して以下のalterコマンドを実行します。


$ use <データベース名>;

$ alter table <テーブル名> auto_increment = 1;


auto_increment = 10にすると、10から始まります。


参考 Djangoノウハウ集【データベース操作編】
https://sinyblog.com/django/knowledge/


Django: 今日の日付 datetime.date.today() が1日前になってしまう

settings.py で、タイムゾーン設定 USE_TZ が True になっている場合、DjangoはデフォルトでUTCを使用します。このため、表示時に適切なタイムゾーンに変換する必要があります。

Djangoのタイムゾーン設定を確認する:

# settings.py
USE_TZ = True  # タイムゾーン対応を有効にする
TIME_ZONE = 'Asia/Tokyo'  # サーバーのデフォルトタイムゾーンを設定する


ビューでのタイムゾーン変換:
Djangoのビューで、datetime.date.today()を使う場合は、タイムゾーンを考慮して今日の日付を取得します。

from django.utils import timezone
from datetime import date

def get_today_date():
    # 現在のタイムゾーンを取得
    current_tz = timezone.get_current_timezone()
    # 現在の日付と時刻を取得し、タイムゾーンを設定
    now = timezone.now().astimezone(current_tz)
    # 現在の日付を返す
    return now.date()

テンプレートでの表示:
Djangoのテンプレートで日付を表示する際には、タイムゾーンを考慮して表示します。

<!-- テンプレートファイル (例: my_template.html) -->
{% load tz %}

{% get_current_timezone as TIME_ZONE %}
{% localtime on %}
    <p>今日の日付: {{ today }}</p>
{% localtime off %}

2024年7月1日月曜日

Django: フォームのウィジエットテンプレート上書き

フォームのウィジェットテンプレートをDjangoアプリのテンプレートで上書きしたいとき
settings.py に以下の追加1、追加2部分が必要

INSTALLED_APPS = [
    'app.apps.AppConfig',  # マイアプリケーション
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.forms',  # 追加1
]

FORM_RENDERER = 'django.forms.renderers.TemplatesSetting' # 追加2
例: 以下のようにアプリ下のtemplatesにデフォルトのウィジェットテンプレートを保存する場合
/myproject/app_name/templates/django/forms/widgets/select_option.html