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

2024年6月25日火曜日

Django: django-debug-toolbarのパネルが表示されない

django-debug-toolbarを設定したところ右サイドバーは表示されたが、右サイドバー項目をクリックしたときメインの画面が表示されず困りました。

Django管理画面では表示されるのですが、公開ページでは表示されないという現象。


調べたところ、公開ページでページ内スクロールするJavaScriptコードがdjango-debug-toolbarとかぶっていたのが原因でした。

$('a[href^="#"]').click(function () { //・・・ }


一例ですが、以下のように公開ページのイベントの動作範囲を制限して表示できるようになりました。

$('.anker a[href^="#"]').click(function ()  { //・・・ }


参考:django-debug-toolbarが動かない - エンジニアもどきの技術メモ
https://chantsune.github.io/articles/122/


2024年5月11日土曜日

Linux findとgrepでファイル内文字列検索

# 現在のディレクトリ以下にある「xyz*」ファイル内に「aiueo」が含まれているものを検索する

$ find . -name 'xyz*' -type f -print0 | xargs -0 grep aiueo


# 現在のディレクトリ以下にあるphpファイル内に「aiueo」が含まれているものを検索する

$ find . -name '*.php' -print0 | xargs -0 grep aiueo


# /var/www/htmlディレクトリ以下にあるファイル内に「aiueo」が含まれているものを検索する

$ find /var/www/html -type f -print0 | xargs -0 grep aiueo


2024年5月10日金曜日

PHP URL文字列の取得まとめ

URL例: https://example.co.jp/ja/company/

$_SERVER['REQUEST_URI']; 
パスとクエリ取得(ファイル名あり)
⇒ /ja/company/index.html?year=2017&page=2 

$_SERVER['QUERY_STRING']; 
 クエリ取得(?は除外)
⇒ year=2017&page=2 

$_SERVER['SCRIPT_NAME'];
クエリを除外したパス(ファイル名あり) 
⇒ /ja/company/index.html 

str_replace($_SERVER['QUERY_STRING'],"",$_SERVER['REQUEST_URI']); 
ファイル名無しパス(末尾に?が残る)
⇒ /ja/company/?

2024年5月2日木曜日

PHP 連想配列をJSONにしてHTTP送信する



  $data = array();
  $data["name"] = 'tanaka';
  $data["age"] = 30;

  // 連想配列をJSON形式に変換する
  $json_data = json_encode($data);

  // HTTPヘッダを設定してJSONデータを送信する
  header("Content-Type: application/json");
  
  echo $json_data;