2023年12月14日

DJangoで自作の404ページを表示する方法。

michael-dziedzic-JHMm7EK8y88-unsplash.jpg
通常の404ページが出てしまうと少しみっともない感じがするので



自作の404ページを出せるようにしてみます。



質問

Djangoで自作の404ページを表示する方法。


解答

Djangoでは、カスタムの404エラーページを作成して表示することができます。
以下はその手順です。


### 1. カスタムの404ページを作成する

まず、Djangoプロジェクトのテンプレートディレクトリ内に、
`templates`フォルダ内に`404.html`という名前のファイルを作成します。



```html

<!-- templates/404.html -->
<!DOCTYPE html>
<html>
head>
    <title>404 Not Found</title>
</head>
<body>
    <h1>404 Not Found</h1>
    <p>お探しのページは見つかりませんでした。</p>
</body>
</html>




### 2. Djangoの設定を変更する

`settings.py`ファイルにて、
`TEMPLATES`の中の`DIRS`にテンプレートディレクトリのパスを追加します。


```python

# settings.py

TEMPLATES = [ {
                              # ...
                              'DIRS': [os.path.join(BASE_DIR, 'templates')],
                              # ...
                           },
 ] ```




### 3. エラーハンドリングの設定を変更する

`urls.py`ファイルにて、`handler404`ビューをカスタムの404ビューに設定します。



```python

# urls.py

from django.urls import path
from django.conf.urls import handler404
from myapp import views

# 自分のアプリ名に変更する
urlpatterns = [ # 既存のURLパターン ]


handler404 = 'myapp.views.custom_404' # カスタムの404ビューを指定する

```





### 4. カスタムの404ビューを作成する

最後に、指定したビューで404エラーを処理するためのビューを作成します。



```python

# views.py

from django.shortcuts import render

def custom_404(request, exception):
    return render(request, '404.html', status=404)

```



これで、カスタムの404エラーページが設定されました。

ユーザーが存在しないページにアクセスした場合に、
自作の404ページが表示されるようになります。







Python[完全]入門 [ 松浦健一郎 ]

価格:3190円
(2023/12/2 00:51時点)
感想(1件)


小一時間でゲームをつくる──7つの定番ゲームのプログラミングを体験【電子書籍】[ ゲヱム道館 ]

価格:3278円
(2023/11/14 22:26時点)
感想(0件)


 

ブログランキング・にほんブログ村へ
【下記、広告です。クリックいただけると励みになります。】
posted by モニー at 18:00| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

Rustについて解説してください。

pramod-tiwari-k0lTVz7i5TI-unsplash.jpg
実は私もひそかに気になっている言語




Rustについて聞いていきます。






C言語系に置き換わる新時代の言語




みたいな評価もされていますが




はたして





とにかく難しそう





というイメージが先行していますが





どんなものやら




質問

Rustについて解説してください。


解答

Rust(ラスト)は、Mozillaが開発したシステムプログラミング言語であり、
メモリ安全性と並行性を強調した、高性能で安全なプログラミング言語です。
RustはCやC++などの伝統的なシステム言語と競合することなく、
その独自の特性により広く注目されています。


以下は、Rustの主な特徴や利点です:


1. **メモリ安全性**:

- Rustの最も大きな特徴は、メモリ安全性を保証することです。
所有権システムと借用(borrowing)により、メモリリークや
データ競合(data races)などの一般的なプログラミングエラーを防止します。


2. **並行性と並列性**:

- Rustは安全な並行プログラミングをサポートしており、スレッドセーフなコードを書くための仕組みを提供します。
所有権システムと型システムにより、競合状態やデッドロックを回避する手助けをします。


3. **パフォーマンス**:

- Rustはハードウェアリソースの効率的な利用を重視しており、C/C++に匹敵するパフォーマンスを持ちます。
メモリ管理やランタイムがないため、高速な処理が可能です。


4. **コミュニティとツール**:

- Rustには活発なコミュニティがあり、豊富なドキュメントやライブラリが提供されています。
また、Cargoと呼ばれるパッケージ管理ツールやビルドシステムが付属しており、効率的な開発が可能です。


5. **クロスプラットフォーム**:

- Rustはクロスプラットフォーム対応で、さまざまなプラットフォーム(Windows、macOS、Linuxなど)で
実行されるアプリケーションの開発が可能です。
Rustは、システムプログラミングからWeb開発、組み込みシステム、ブロックチェーン、ゲーム開発など
幅広い分野で利用されています。


その安全性とパフォーマンス、そして拡張性の高さから、プログラミングコミュニティで高い関心を集めています。




どうやらライブラリなども豊富になりつつあるようです。




Rustの紹介文を読むと


セーフとか安全性という言葉をよく見かける気がします。



競合状態やデッドロックを回避する機能が標準で備わっているのでしょうか





フレームワークやwebでの使用なんかもたまに耳にしますし



目が離せない言語ですね。






プログラミングRust 第2版 [ Jim Blandy ]

価格:5280円
(2023/11/21 20:37時点)
感想(0件)


自動車誌MOOK SWIFT MAGAZINE Vol.8 with ALTO WORKS【電子書籍】[ 三栄 ]

価格:1900円
(2023/11/14 22:16時点)
感想(0件)


 

ブログランキング・にほんブログ村へ
【下記、広告です。クリックいただけると励みになります。】
posted by モニー at 12:00| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2023年12月11日

Djangoでログを出力をする方法。

julia-giacomini-7U0tNirGT6o-unsplash.jpg
Djangoのログ出力について聞いていきます。


といってもloggingライブラリで簡単にできてしまうんですけれど。。



質問

Djangoでログ出力をする方法。


解答

Djangoでログを出力するには、以下の手順に従うことが一般的です。


### 1. ログの設定 Djangoでログを出力するためには、設定ファイルでログの設定を行います。

settings.py`ファイル内にある`LOGGING`設定を編集します。


```python

# settings.py

LOGGING = {
            'version': 1,
            'disable_existing_loggers': False,
            'handlers': {
            'file': {
                  'level': 'DEBUG', # ログの出力レベル(DEBUG, INFO, WARNING, ERROR, CRITICALなど)
                  'class': 'logging.FileHandler',
                  'filename': 'app.log', # ログの出力先ファイル名
                },
            },
            'loggers': {
            'django': {
                  'handlers': ['file'],
                  'level': 'DEBUG',
                  'propagate': True,
                },
            },
 }

```




### 2. ログの出力 ログを出力するために、`logger`を使用します。

以下は、ログを出力する例です。


```python

import logging

# ロガーを取得する
logger = logging.getLogger(__name__)

def my_view(request):
    logger.debug('This is a debug message') # DEBUGレベルのログ出力
    logger.info('This is an info message') # INFOレベルのログ出力
    logger.warning('This is a warning message') # WARNINGレベルのログ出力
    logger.error('This is an error message') # ERRORレベルのログ出力
    logger.critical('This is a critical message') # CRITICALレベルのログ出力 ```





### 3. ログレベルの設定

上記の例では、`logger`オブジェクトを使用して、さまざまなレベルのログを出力しています。
各ログの重要度に応じて適切なログレベルを指定します。



### 4. ログの場所

上記の設定では、`app.log`という名前のファイルにログが書き込まれます。
適切なパスやファイル名を設定してください。


これらの手順に従うことで、Djangoアプリケーションでログを設定し、出力することができます。
ログはアプリケーションの動作やエラーのトラッキングなどに役立ちます。








Setting.pyでログの出力先やレベルなどを設定し、


view内でのログ出力メソッドの呼び出し方を書いてくれたようです




もっと細かい設定もできるはずなので公式ドキュメント見た方が早いかもですね




ジャンゴロジー〜スペシャル・エディション [ ジャンゴ・ラインハルト ]

価格:1056円
(2023/12/2 00:40時点)
感想(1件)


はじめてのプログラミングカー(1個)【学研ステイフル】

価格:4429円
(2023/11/14 00:19時点)
感想(7件)


 

ブログランキング・にほんブログ村へ
【下記、広告です。クリックいただけると励みになります。】
posted by モニー at 19:00| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

Djangoでトランザクション処理をする方法。

wes-hicks-MEL-jJnm7RQ-unsplash.jpg
pythonで人気のDjangoフレームワークを使った際に



DB操作をするときのトランザクションの書き方が複数あるようだったので聞いてみます。


質問

Djangoでトランザクション処理をする方法。


解答

Djangoにおいて、トランザクション処理はデータベースの操作をグループ化し、
すべての操作が成功するか失敗するかを確認するための重要な方法です。

Djangoでは、トランザクションを使ってデータベースの操作を制御する方法が提供されています。


基本的なトランザクションの操作方法は以下の通りです:


1. **トランザクションの開始と終了**:



```python

from django.db import transaction

# トランザクションを開始
with transaction.atomic():

# トランザクション内で実行されるコード
# データベースの操作など ```


transaction.atomic()`を使うことで、トランザクションの境界を定義し、
その中で実行されるすべてのデータベース操作がまとめて処理されます。

このブロック内の操作が全て成功した場合、トランザクションはコミットされます。
もしエラーが発生した場合は、トランザクションはロールバックされます。



2. **トランザクション内でのデータベース操作**:


```python

from django.db import transaction

with transaction.atomic(): # データベース操作

# 例: モデルの作成や更新
    obj1 = MyModel.objects.create(field1=value1, field2=value2)
    obj2 = MyModel.objects.get(id=1)
    obj2.field3 = new_value
    obj2.save()

```

 


トランザクション内では、通常通りDjangoのモデルやクエリを使ってデータベース操作が可能です。



3. **トランザクションのネスト**:

Djangoのトランザクションはネストすることができます。
トランザクション内でさらに別のトランザクションを開始することが可能です。



```python

from django.db import transaction

with transaction.atomic(): # トランザクション1のコード

    with transaction.atomic(): # トランザクション2のコード ```


 



これらの手法を使って、Djangoでトランザクション処理を実装できます。

トランザクションを適切に使用することで、データベース操作の一貫性を保ち、
エラーが発生した場合にロールバックしてデータの整合性を保つことができます。







トランザクションのネストなんてこともできるんか。へー。(どういうときに使うんだ。。)



with transaction.atomic()
を使ったコードばかりですが



自分が使ったのはデコレータを使用したトランザクションだったんですよね。



いろいろな書き方があるのがDjangoの面白いところでもあり難しいところでもありますね。


実践Django Pythonによる本格Webアプリケーション開発/芝田将【3000円以上送料無料】

価格:3850円
(2023/12/2 00:19時点)
感想(0件)


WEB DB PRESS Vol.125 [ WEB DB PRESS編集部編 ]

価格:1628円
(2023/11/14 12:46時点)
感想(0件)


 

ブログランキング・にほんブログ村へ
【下記、広告です。クリックいただけると励みになります。】
posted by モニー at 13:00| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする

2023年12月03日

javascriptで使うdocumentってなに?

mk-s-z1XElmA3XrA-unsplash.jpg
javascriptを書いたことがある人ならだれでも一度は使ったことがあるコードに







document.getElementById()






と言うものがあると思います。






documentに格納されている()引数のidのelement(要素)を取得しろ!





ってことだとは思うのですが







documentってなに?







と思ったので聞いてみます。




質問

javascriptで指定するdocumentとは何を指していますか


解答

JavaScriptの `document` は、Webページの構造やコンテンツを操作するためのオブジェクトです。


`document` オブジェクトは、
ブラウザ上で表示される現在のウェブページ全体を表し、
HTML要素やその属性、テキスト、スタイルなどにアクセスするための手段を提供します。


具体的には、`document` オブジェクトを使用することで、以下のような操作が可能です:


1. **要素の検索・取得**:

- `document.getElementById()` や `document.querySelector()` を使用して、ページ内の特定の要素を取得できます。



2. **要素の操作**:

- 取得した要素を通じて、テキストや属性、スタイルなどのプロパティを変更できます。
例えば、`element.textContent` や `element.style.color` を使用して、要素のテキストやスタイルを変更できます。



3. **要素の作成・追加**:

- `document.createElement()` を使用して新しい要素を作成し、
`element.appendChild()` を使用して既存の要素に新しい要素を追加できます。



4. **イベントの追加**:

- `element.addEventListener()` を使用して、要素にイベントリスナーを追加できます。
これにより、クリックやマウスオーバーなどのイベントを処理できます。



5. **ドキュメント全体の操作**:

- `document.title` を使用してページのタイトルを変更したり、
`document.body` を通じてページ全体の要素にアクセスしたりできます。



`document` オブジェクトは、JavaScriptからウェブページの構造やコンテンツを制御し、
動的な変更や操作を行うための重要な手段です。








html上にある要素を操作するためにあるのね


まあそうか



html全体がdocumentってイメージでいいのかしらん


element.addEventListener()やonclickで特定の要素のみでfnを呼び出すやり方を見ても


そういうことなのかな




普段何気なく使っているコードでも突き詰めていくと面白いですね


開眼!JavaScript 言語仕様から学ぶJavaScriptの本質 [ コディ・リンドレー ]

価格:2420円
(2023/11/25 20:41時点)
感想(0件)


WEB DB PRESS Vol.125 [ WEB DB PRESS編集部編 ]

価格:1628円
(2023/11/14 12:46時点)
感想(0件)


 

アフィリエイトブログのくせにあまり商品宣伝はやらないのですが『開眼!Javascript」は良書です。

私自身、この本を読んでからjavascriptの理解と言うか、おもしろさがわかるようになりました。


エンジニアなりたて!という方には少し難しいと思いますが、

すでにほかの言語で業務をこなしていて、でもなんかjavascriptって動き方が独特で苦手。。くらいのレベルの方にはおすすめです。

きっといいjavascriptライフが送れると思います。
ブログランキング・にほんブログ村へ
【下記、広告です。クリックいただけると励みになります。】
posted by モニー at 16:00| Comment(0) | プログラミング | このブログの読者になる | 更新情報をチェックする