hero-image

Django myapp

Django is a high-performance web application framework using the Python programming language.
This template project implements the elements required for a standard web application.

What is this?

Djangoの基本的なログイン・ログアウトなどの認証、セキュリティ対策やユーザプロフィール、お問い合わせなどのアプリケーションに共通して必要となる機能を備えたテンプレートで、学習として作成しました

メールアドレスに関する情報の暗号化や特定IPアドレスからのアクセス遮断などセキュリティ対策も備えています

認証機能

  • メール送信によるアドレス確認(仮登録、本登録機能)
  • django-axesによるログイン試行回数制限など
  • social-auth-app-djangoによるソーシャルログイン

セキュリティ

  • django-searchable-encrypted-fieldsによるデータベース上の暗号化(主にメールアドレスの情報)
  • 特定のIPアドレスからのアクセスを遮断
  • adminサイトのURLを.envで管理、アクセスできるIPアドレスを制限

その他

  • rePATCHA v2によるスパム対策
  • 短時間に大量アクセスしてきたIPアドレスをブロックリストへ登録しアクセス遮断

ユーザ設定画面

  • プロフィール画像、表示名の変更
  • メール受信設定
  • メールアドレスの変更(変更の確定前に申請されたメールアドレスへ認証URLを送信)
  • パスワードの再設定(再設定時に登録済みメールアドレスへ認証URLを送信)
  • パスワードの変更
  • アカウントの削除

サンプル機能(demo)

scloll spyを用いたページ、ajaxを用いたリスト一覧の検索・ソート、plotly / Cytoscapeなどを用いたグラフ可視化の他、OpenAI APIでの文書生成のサンプルを作成しています

scloll spy

段落のある簡単な読み物のページ作成に有効です

レスポンジブル対応しており、md以下で目次が先頭に移動します

フォーム

一般的に利用されるフォームのデモです

selectにはselect2、日時入力にはtempus-dominusを使っています

WYSIWYG editor

summernoteを用いてWYSIWYG editorを実装しています

画像のアップロード

  • アップロードした画像は apps.summernote で管理され、設定したサイズ以上の場合の縮小リサイズ、画像の削除時にはデータベースからも画像ファイル削除します
    処理内容は apps.summernote.converter.parts 内の image_modify と image_revert をご覧ください

メンション機能

  • 登録されているユーザへの@メンション機能を実装しています
    サンプルではアカウント名の候補から選択できます。apps.summernote.converter.parts.html_modify の投稿処理時のテキスト処理に追加実装を加えることでメンションされたユーザのユーザページなどに自動リンクを加えることもできます

絵文字

その他

  • undo/redo ボタンを追加しています
  • コード入力画面ではcodemirrorを用いてシンタックスハイライトを追加しています

リスト一覧

  • ajaxを用いて非同期にページ遷移やソート、検索結果の表示を行います

ネットワーク可視化

Cytoscapeを用いてインタラクティブなグラフ可視化を実装しています

クリックアクション

  • ノードをクリックした場合、有向グラフでは子要素全体、無向グラフでは最近傍ノードをハイライトします
  • エッジをクリックした場合、接続ノードをハイライトします
  • グラフのハイライト時には、ページ内で TextHighlightArea クラスを付与されたエリアのテキストも同様にハイライトします

インターフェース

ネットワークレイアウト

デフォルト以外に以下のレイアウトを追加しています

ワードクラウド

  • word_cloudを用いてワードクラウドを表示します

OpenAI API

  • OpenAI APIを非同期で実行して文書要約を実装しています

グラフ可視化

plotlyを用いてインタラクティブなグラフ可視化を実装しています

デザイン

Boostrap 5.3.2 / jquery 3.6 / Font Awesome 6.1.1 / Noto Sans JP をベースに作成しています

レスポンシブル

すべてのページがレスポンシブルに対応しています

ダークモード

すべてのページで対応したカラーモードの配色が行われます

設置

config > settings.pyでの設定

以下デフォルトのため True/False を変更できます

  • デバックモード設定
  • DEBUG = True
  • スーパーユーザへのメール通知を行う設定
  • IS_NOTIFICATION_ADMIN = False
  • 認証設定
  • IS_USE_EMAIL_CERTIFICATION = False # メール送信でメールアドレスを認証する
    IS_USE_SOCIAL_LOGIN = False # ソーシャルログインを有効にする
    IS_USE_RECAPTCHA = False # RECAPTCHA を有効にする
  • GMAIL/GCPの使用
  • GCPへデプロイできることを確認しています IS_USE_GMAIL = False # メール送信にGmailを利用する
    IS_USE_GCS = False # GCS を利用する
    IS_USE_GC_SQL = False # CloudSQL を利用する

.envファイル用意

サンプルとして sample.env を一緒に格納しています

  • DJANGO_SECRET_KEY
  • DJANGO_SECRET_KEY='***YOUR_DJANGO_SECRET_KEY***'
  • データベース暗号化キー
  • FIELD_ENCRYPTION_KEYS_01='***YOUR_FIELD_ENCRYPTION_KEYS***'
    ENCRYPTION_HASH_KEY='***YOUR_ENCRYPTION_HASH_KEY***'
  • フロントエンドURL
  • FRONTEND_URL='*** YOUR DEPLOY FRONT END URL (ex. http://127.0.0.1:8000) ***'
  • スーパーユーザへのメール通知を行う場合
  • ADMIN_NOTICE_EMAIL'*** YOUR MAIL ADDRESS (ex.admin@debug.debug) ***'
  • メール送受信にGmailを使う場合
  • DEFAULT_FROM_EMAIL='*** YOUR GMAIL ADDRESS(@gmail.com) ***'
    DEFAULT_REPLY_EMAIL='*** YOUR GMAIL ADDRESS(@gmail.com) ***'
    EMAIL_HOST_USER='*** YOUR GMAIL ADDRESS(@gmail.com) ***'
    EMAIL_HOST_PASSWORD='*** YOUR SOCIAL_AUTH_GOOGLE_OAUTH2_KEY ***'
  • ソーシャルログインを有効にする場合
  • SOCIAL_AUTH_GOOGLE_OAUTH2_KEY='*** YOUR SOCIAL_AUTH_GOOGLE_OAUTH2_KEY ***'
    SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET='*** YOUR SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET ***'
  • rePATCHAを有効にする場合
  • RECAPTCHA_PUBLIC_KEY='*** YOUR RECAPTCHA_PUBLIC_KEY ***'
    RECAPTCHA_PRIVATE_KEY='*** YOUR RECAPTCHA_PRIVATE_KEY ***'
  • OpenAI APIを有効にする場合
  • OPENAI_API_KEY='*** YOUR OPENAI_API_KEY ***'

実行

  • pip listall
  • $ pip install -r requirements-base.txt
  • マイグレーション(batファイルがあります)
  • $ ProjectSetupBat
  • RunServer
  • $ python manage.py runserver

主な実行環境

詳細は requirements-base.txt をご覧ください

  • python=3.9.18
  • Django==4.2.1
contents end.

w: -  /   h: -  /   srl: -  /   cls: -