OutSystems
OutSystemsのロールセキュリティ
Usersに登録して管理
Usersにアクセスする方法
https://<サーバー>/Users
UI で確実にアクセスを制限できている場合でも、可能な限りビジネスロジックでロールを確認す るというのが OutSystems のベストプラクティス
ロールには、ユーザーが<ロール名>というロールを持っているかどうかを判断する Check<ロール名>Role()というアクション/機能もあります。
OutSystemsのサイトプロパティ
使い方
・Dataタブで設定 ・ServiceCenterで設定
ServiceCenterで変更する場合、再パブリッシュ不要、即反映される。
ServiceCenterへのアクセス
https://<サーバー>/ServiceCenter
OutSystemsのイメージファイル
Imagesに追加したものは以下でアクセスする
http://<サーバー>/モジュール名/img/イメージファイル名.png
ReactiveWebのイベントの発生順
・Initialize →画面初期化時 ・Ready →DOMの読み込みが終わった時 ・Render →AggregateのDBFetchが終わった時 ・Destroy →画面を破棄した時
Python, Flask, PostgreSQLで画面作成(2)
21/03/22
しばらく放置してしまったので、最初からやり直した。 目的はFlaskでPostgreSQLの内容を画面に表示すること。 実質4時間ほどで完成。
■ 参考URL
python postgreSQLのライブラリpsycopg2の使い方メモ - Qiita
- postgreSQLに対象のテーブルを作成
id:number title:string body:string
準備 venvを作成しておく
Flask、psycopg2インストール
pip install Flask pip install psycopg2
- PycharmでFlaskを動作させる設定
FLASK_APP=main.py FLASK_DEBUG=1 flask run
- PycharmでFlaskを動作させる設定
FLASK_APP=main.py FLASK_DEBUG=1 flask run
- main.pyを作成する。
from flask import Flask, render_template import psycopg2, psycopg2.extras app = Flask(__name__) def get_connection(): # postgreSQLに接続(接続情報は環境変数、PG_XXX) connection = psycopg2.connect( \ host='localhost', \ user='flask', \ password='flask', \ database='flask', \ port=int('5432')) # クライアントプログラムのエンコードを設定(DBの文字コードから自動変換してくれる) connection.set_client_encoding('utf-8') # select結果を辞書形式で取得するように設定 connection.cursor_factory = psycopg2.extras.DictCursor return connection @app.route('/') def main(): conn = get_connection() cur = conn.cursor() sql = 'SELECT * FROM entry' cur.execute(sql) # 引数ありの場合 #sql = 'SELECT * FROM entry where id = %(target_id)s' #cur.execute(sql, {'target_id': (target_id,)}) members = cur.fetchall() cur.close() conn.close() return render_template('dbtest.html', title='flask test', members=members) ## おまじない if __name__ == "__main__": app.run(debug=True)
templatesフォルダを作成する。
templates/layout.htmlを作成する。
templates/dbtest.htmlを作成する。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% block content %} <!-- ここにメインコンテンツを書く --> {% endblock %} </body> </html>
{% extends "layout.html" %} {% block content %} <h3>DbTest</h3> <ul> {% for member in members %} <li>{{ member.title }} : {{ member.body }}</li> {% endfor %} </ul> {% endblock %}
Python, Flask, PostgreSQLで画面作成
11/12
今日のやったこと
- Hello World作成
- ProgreSQL連携(途中)
ノート
- Flaskインストールコマンド
pip install Flask
- FlaskでPostgreSQLにアクセスするにはSQLAlchemyとpsycopg2が必要
pip install flask_sqlalchemy pip install psycopg2
- PycharmでFlaskを動作させる設定
デバッグ構成のパラメータに以下を設定
FLASK_APP=hello.py FLASK_DEBUG=1 flask run
■参考URL
FlaskとPostgreSQLでウェブアプリを作ってHerokuで無料で運用する - Qiita
Flask-SQLAlchemy + PostgreSQLでWebサービスを作成する - Qiita
12/15~
今日のやったこと
- ProgreSQL連携用のDBを用意
- ProgreSQL連携の方法を読む
■参考URL
FlaskとPostgreSQLでウェブアプリを作ってHerokuで無料で運用する - Qiita SQLAlchemyの基本的な使い方 - Qiita
Androidでアプリ作成(2)
やりたいこと
開発力の向上を目的とする。
Androidアプリ作成2回目。
Google Play Storeに乗せるまでを目標とする。
画像認識にGoogle Vision APIを使うことで、 使用量で課金されるため、Play Storeには乗せられなくなった。
挑戦する技術
- カメラで画像認識
- Androidアプリ内にDB作成
2020/07/10
画像認識のやり方について調べる
Google Vision APIを使ったやり方がいくつか見つかる
Google Vision APIはGoogle Cloud Platform(GCP)のサービスで、
使用料で課金されるので注意が必要。1000ユニット/月まで無料。
1ユニットは1回の画像認識。
GCPアカウントの作成について
第0回 Google Cloud Platformをはじめよう! アカウント登録~画像認識APIを試してみよう|Tech Book Zone Manatee
第5回 もう議事録不要? 写真から手書き文字を認識するAndroidアプリを作ろう~アプリ開発編~|Tech Book Zone Manatee
前回の記事
やること
Python、Djangoでオリジナルのシステム開発(6)
今日のやること
- 一覧のページング
- モックの作成
一覧のページング
DjangoでページングするにはPaginateを使用する。
参考: ペジネータ (paginator) — Django v1.0 documentation
Viewに以下を追加。
from django.core.paginator import Paginator
htmlにページングの参照をつける。
こんな感じにできあがる。
モックの作成
Djangoで作成したアプリのモック用のHTMLを作ってみる。
以下のフォルダ構成を作る。
moc
├static
└templates
staticフォルダに開発で使用したstaticフォルダをそのまま入れる。 templatesフォルダにhtmlファイルを入れる。
Djangoで表示されたHTMLは以下の手直しをする必要がある。
- /static を../staticに置換
- submitはhrefなどに変換
- 画面遷移先は../templates/***.html
Androidでアプリ作成(1)
やりたいこと
開発力の向上を目的とする。
Androidアプリ作成2回目。
Google Play Storeに乗せるまでを目標とする。
挑戦する技術
- カメラで画像認識
- Androidアプリ内にDB作成
2020/07/01
やること
- プロジェクト作成
- GIT構築
以前書いた記事を参考にする。
https://blog.hatena.ne.jp/ebi40/ebi40.hatenablog.com/edit?entry=26006613448435527
プロジェクト作成
Android Studioで「start a new project」
「Buttom Navigation Activity」選択
今回はJavaで作成。
GIT構築
記述は省略。
2020/07/06
やること
- ナビバーのボタンを設定
ナビバーのボタンを設定
fragmentについて調べる
ナビバーボタンアイコンを設定
ナビバーボタンの設定が完了
やること
Python、Djangoでオリジナルのシステム開発(5)
今日のやること
- Djangoフォームで作成した画面で、編集時に特定の項目を変更不可にする
- 一覧で削除時のモーダルウィンドウ表示
Djangoフォームで作成した画面で、編集時に特定の項目を変更不可にする
参考:Django入門|編集できないフォームフィールドに変更する方法|dot blog
forms.py(ModelForm)で初期化時にインスタンスが新規かどうか判定し、dsabled属性を追加する。
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
if self.instance.foodstaff_id is not None:
self.fields['foodstaff'].widget.attrs['disabled'] = 'disabled'
これだけだとdisabledにした項目がPOSTされず、更新時にNot Null違反になる。
どうやらform.is_validの時点で、dsabledの値がNullになってしまうようだ。
なので更新時は変数に退避しておいて、更新直前に設定するようにする。
もっとスマートなやりようはないだろうかと思うけど・・・
一応、Djangoフォームでの編集不可は実現できた。
データ削除時のモーダルウィンドウ表示
Bootstrap公式のソースをコピペすればモーダル自体は実現できるが、各画面でこれを書くのは冗長すぎる。
viewでメッセージの内容を作ってHTMLに渡して、ベースのHTMLでモーダルの記述をメッセージ内容分ループするようにして汎用的に作る。
削除ボタンを個別から選択、一括削除に変更しようとする。
参考:一覧画面に削除機能を追加しよう — DjangoによるWebアプリケーション開発入門
<form method="post" action="{{ message.action }}">
としたいところで、逆引きURLを設定する方法がわからずにはまる。
参考:DjangoでのURL⇔view関数の正引き・逆引き - orangain flavor
やりたいことはできた・・・が、そもそも、モーダルをPOSTしたところで、
送りたいフォームはPOSTされないことに気が付いた。
送付したいFormをJavascriptで呼び出すよう細工する必要がある。
参考:【intra-mart】formタグの中で別のformを働かせる方法 | 株式会社アースリンク
一応、できた。
後日やりたいこと
- ボタン用フッター
- 献立入力画面作成
- ポップアップ選択
- 一覧のページング
- 賞味期限切れメール通知機能実装