Iris における Django アプリケーションの実行

説明
これは、ネイティブウェブアプリケーションとして IRIS にデプロイできる Django アプリケーションのテンプレートです。
インストール
- リポジトリをクローンする
- 仮想環境を作成する
- 要件をインストールする
- docker-compose ファイルを実行する
git clone
cd iris-django-template
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
docker-compose up
使用法
ベース URL は http://localhost:53795/django/ です。
エンドポイント
/iris- IRISAPP ネームスペースに存在する上位 10 個のクラスを持つ JSON オブジェクトを返します。/interop- IRIS の相互運用性フレームワークをテストするための ping エンドポイント。/api/posts- Post オブジェクトの単純な CRUD エンドポイント。- ``/api/comments` - Comment オブジェクトの単純な CRUD エンドポイント。
このテンプレートからの開発方法
WSGI 導入記事をご覧ください: wsgi-introduction。
概要: セキュリティポータルで DEBUG フラグをトグルすると、開発作業の過程で変更内容がアプリケーションに反映されるようになります。
コードの説明
Django アプリケーションは次のように構造化されています。
app- Django プロジェクトフォルダapp- 構成用の Django アプリフォルダsettings.py- Django の設定ファイルurls.py- ビューを URL に接続する Django URL 構成ファイルwsgi.py- Django WSGI ファイルasgi.py- Django ASGI ファイル
community- コミュニティアプリの Django アプリフォルダ、Post と Comment オブジェクトでの CRUD 操作models.py- Post と Comment オブジェクトの Django モデルファイルviews.py- Post と Comment オブジェクトにアクセスするための Django ビューファイルserializers.py- Post と Comment オブジェクトの Django シリアライザーファイルadmin.py- 管理インターフェースに CRUD 操作を追加する Django 管理ファイルmigrations- データベースを構築するための Django マイグレーションフォルダfixtures- Django fixtures フォルダデモデータ
sqloniris- IRIS アプリでの SQL に使用する Django アプリフォルダviews.py- IRISAPP ネームスペースをクエリするための Django ビューファイルapps.py- Django アプリ構成ファイル
interop- 相互運用性アプリ用の Django アプリフォルダviews.py- 相互運用性フレームワークをテストするための Django ビューファイルapps.py- Django アプリ構成ファイル
manage.py- Django 管理ファイル
app/settings.py
このファイルには、アプリケーションの Django 設定が含まれます。
...
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'community',
'sqloniris',
'interop',
'rest_framework'
]
...
REST_FRAMEWORK = {
# Use Django's standard `django.contrib.auth` permissions,
# or allow read-only access for unauthenticated users.
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination',
'PAGE_SIZE': 20
}
...
DATABASES = {
"default": {
"ENGINE": "django_iris",
"EMBEDDED": True,
"NAMESPACE": "IRISAPP",
"USER":"SuperUser",
"PASSWORD":"SYS",
}
}
一部の重要な設定:
INSTALLED_APPS- Django プロジェクトにインストール済みのアプリのリストが含まれます。community- Post と Comment オブジェクトでの CRUD 操作用 Django アプリ。sqloniris- IRIS での SQL 操作に使用する Django アプリ。interop- 相互運用性操作用の Django アプリ。rest_framework- REST API 用の Django REST フレームワーク。
REST_FRAMEWORK- Django REST フレームワークの設定が含まれます。DEFAULT_PERMISSION_CLASSES- 認証済みのユーザーのみが CRUD 操作を実行できます。DEFAULT_PAGINATION_CLASS- REST API のページネーションクラス。
DATABASES- IRIS データベース接続の設定が含まれます。- ここでは、
django_irisエンジンを使って IRIS データベースに接続しています。
- ここでは、
app/urls.py
このファイルには、Django アプリケーションの URL 構成が含まれます。
from django.contrib import admin
from django.urls import path,include
from rest_framework import routers
from community.views import PostViewSet, CommentViewSet
from sqloniris.views import index
from interop.views import index as interop_index
router = routers.DefaultRouter()
router.register(r'posts', PostViewSet)
router.register(r'comments', CommentViewSet)
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include(router.urls)),
path('iris/', index),
path('interop/', interop_index)
]
router- REST API のデフォルトのルーターが含まれます。routeer.register- Post と Comment ビューセットをルーターに登録します。urlpatterns- Django アプリケーションの URL パターンが含まれます。/admin/- Django 管理インターフェース。/api/- Post と Comment オブジェクトの REST API。/iris/- IRIS エンドポイントでの SQL。/interop/- 相互運用性エンドポイント。
app/wsgi.py
このファイルには、Django アプリケーションの WSGI 構成が含まれます。
これが、Django アプリケーションを実行するために IRIS に提供する必要のあるファイルです。
Security->Applications->Web Applications セクションで、このファイルへのパスを指定する必要があります。
- アプリケーション名
app.wsgi
- コーラブル名
application
- WSGI アプリディレクトリ
/irisdev/app/app
community/models.py
このファイルには、Post と Comment オブジェクトの Django モデルが含まれます。
from django.db import models
# Create your models here.
class Post(models.Model):
title = models.CharField(max_length=100)
content = models.TextField()
class Comment(models.Model):
content = models.TextField()
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='comments')
Post- Post オブジェクトのモデル。title- 投稿のタイトル。content- 投稿のコンテンツ。
Comment- Comment オブジェクトのモデル。content- コメントのコンテンツ。post- Post オブジェクトの外部キー。related_name- コメントの関連名。
community/seializers.py
このファイルには、Post と Comment オブジェクトの Django シリアライザーが含まれます。
Django REST フレームワークでは、Django モデルを JSON オブジェクトにシリアル化できます。
from rest_framework import serializers
from community.models import Post, Comment
class PostSerializer(serializers.ModelSerializer):
class Meta:
model = Post
fields = ('id', 'title', 'content', 'comments')
class CommentSerializer(serializers.ModelSerializer):
class Meta:
model = Comment
fields = ('id', 'content', 'post')
PostSerializer- Post オブジェクトのシリアライザー。CommentSerializer- Comment オブジェクトのシリアライザー。fields- シリアル化されるフィールド。
community/views.py
このファイルには、Post と Comment オブジェクトの Django ビューが含まれます。
Django REST フレームワークを使て、Django モデルの CRUD 操作を作成できます。
from django.shortcuts import render
from rest_framework import viewsets
# Import the Post and Comment models
from community.models import Post, Comment
# Import the Post and Comment serializers
from community.serializers import PostSerializer, CommentSerializer
# Create your views here.
class PostViewSet(viewsets.ModelViewSet):
queryset = Post.objects.all()
serializer_class = PostSerializer
class CommentViewSet(viewsets.ModelViewSet):
queryset = Comment.objects.all()
serializer_class = CommentSerializer
PostViewSet- Post オブジェクトのビューセット。CommentViewSet- Comment オブジェクトのビューセット。queryset- ビューセットのクエリセット。serializer_class- ビューセットのシリアライザークラス。
sqloniris/views.py
このファイルには、IRIS 操作における SQL の Django ビューが含まれます。
from django.http import JsonResponse
import iris
def index(request):
query = "SELECT top 10 * FROM %Dictionary.ClassDefinition"
rs = iris.sql.exec(query)
# Convert the result to a list of dictionaries
result = []
for row in rs:
result.append(row)
return JsonResponse(result, safe=False)
index- IRIS 操作における SQL のビュー。query- IRIS データベースで実行される SQL クエリ。rs- クエリの結果セット。result- 結果セットからのリストのリスト。JsonResponse- ビューの JSON レスポンス。リストのリスト表示を許可するには safe を False に設定します。
interop/views.py
このファイルには、相互運用性操作における SQL の Django ビューが含まれます。
from django.http import HttpResponse
from grongier.pex import Director
bs = Director.create_python_business_service('BS')
def index(request):
result = bs.on_process_input(request)
return HttpResponse(result, safe=False)
bs-Directorクラスを使用して作成されるビジネスサービスオブジェクト。index- 相互運用性操作のビュー。result- ビジネスサービスの結果。
注: コードを単純化するために JsonResponse は使用しません。JSON オブジェクトを返す場合は使用できます。
トラブルシューティング
スタンドアロンモードで Django アプリケーションを実行する方法
スタンドアロンモードで Django アプリケーションを実行するには、以下のコマンドを使用できます。
cd /irisdev/app/app
python3 manage.py runserver 8001
これは、デフォルトのポート 8001 で Django アプリケーションを実行します。
注: このコマンドを実行するには、コンテナー内にいる必要があります。
docker exec -it iris-django-template-iris-1 bash
IRIS でアプリケーションを再起動する
DEBUG モードでアプリケーションに複数の呼び出しを行うと、変更はアプリケーションに反映されます。
IRIS 管理ポータルへのアクセス方法
http://localhost:53795/csp/sys/UtilHome.csp に移動すると、IRIS 管理ポータルにアクセスできます。
このテンプレートをローカルで実行する
これには、マシンに IRIS がインストールされている必要があります。
次に、IRISAPP というネームスペースを作成する必要があります。
要件をインストールします。
# Move to the app directory
cd /irisdev/app/app
# python manage.py flush --no-input
python3 manage.py migrate
# create superuser
export DJANGO_SUPERUSER_PASSWORD=SYS
python3 manage.py createsuperuser --no-input --username SuperUser --email admin@admin.fr
# load demo data
python3 manage.py loaddata community/fixtures/demo.json
# collect static files
python3 manage.py collectstatic --no-input --clear
# init iop
iop --init
# load production
iop -m /irisdev/app/app/interop/settings.py
# start production
iop --start Python.Production
静的ファイルの配信方法
Django アプリケーションで静的ファイルを配信するには、以下のコマンドを使用できます。
cd /irisdev/app
python3 manage.py collectstatic
これは、Django アプリケーションから静的ファイルを収集して、/irisdev/app/static ディレクトリに配信します。
IRIS で静的ファイルを公開するには、Security->Applications->Web Applications セクションを構成します。
