Django

仕組み
ユーザがURLを叩いた時=>urls.pyで該当のビューが呼び出され=>
・リクエストされたURLとビューのマッピング定義は、urls.pyに記載
・よびだすHTML文書(template)とフィールドの定義は、views.pyに記載
views.pyに定義された、
 ビュー関 数の第一引数には HttpRequest が、それ以降の引 数には正規表現でキャプチャした値が渡され、
URL 中の値を取り出すには、正規表現にて、単に丸括弧で囲むだけです。
 
例えば、 (r’^articles/(\d{4})/(\d{2})/$’, ‘news.views.month_archive’)と定義されており、合致するリクエスト、/articles/2005/03/ が来た場合、
ビュー関数、news.views.month_archive(request, '2005', '03') を 呼び出します。第二引数、第三引数に2005,03がそれぞれ入ります。
 
^ ・・・行頭にマッチ。\d・・・0-9の数字。{m}・・・前にある RE の m 回の正確なコピーとマッチ。\d{4}は4桁の0-9の数字。$・・・行尾をさす。
 
(?P<name>pattern) ・・・名前つきの 正規表現グループで URL から情報を取り出し、ビュー の キーワード引数 に渡す
 
・templateはbase.htmlやそのたhtmlファイルに記載
・データベースに格納するテーブル、フィールドの定義は、models.pyに記載
urls.pyのurl関数は、正規表現を持ちいる。
正規表現例
 ‘^’   文字列の先頭とマッチします
 ‘+’  直前にある RE に作用して、RE を、1 回以上繰り返したものにマッチさせるようにします。例えば ab+ は ‘a’ に一つ以上の ‘b’ が続いたものにマッチし、’a’ 単体にはマッチしません
 ‘$’  文字列の末尾、あるいは文字列の末尾の改行の直前にマッチします。例えば、foo は ‘foo’ と ‘foobar’ の両方にマッチします。一方、正規表現 foo$ は ‘foo’ だけとマッチします。興味深いことに、’foo1\nfoo2\n’ を foo.$ で検索した場合、通常のモードでは ‘foo2’ だけにマッチし、MULTILINE モードでは ‘foo1’ にもマッチします。$ だけで ‘foo\n’ を検索した場合、2箇所 (内容は空) でマッチします: 1つは、改行の直前で、もう1つは、文字列の最後です。
 ¥d  任意の Unicode 10進数 (Unicode 文字カテゴリ [Nd]) とマッチします
 (?P<name>…)  (?P<name>…) はグループに名前 name を付けます。
参考:第 4 回 正規表現とジェネレータ http://www.geocities.jp/m_hiroi/light/python04.html
6.2. re — 正規表現操作 http://docs.python.jp/3.4/library/re.html
 Django用語         意味
 テンプレート Django ではテンプレートという仕組みによって、HTML によるビューをロジックから分離している。Webブラウザで表示させるhtmlのことをテンプレートという
 マイグレーション Djangoで内部的に利用しているデータベースのスキーマを変更することをMigrationという

Migrationって? http://blog.hoerin.com/category/python/
 モデル モデルとはサイトを構成するデータの、唯一絶対的なデータソースを指します。 モデルには、保存したいデータを表すデータフィールドと、データのビヘイビアを 定義します。通常、一つのモデルは一つのデータベーステーブルに対応しています。
 URLConf  URL 構造を定義す るには、 URLconf と呼ばれる Python モジュールを作成します。 Django は URLconf を使ってどの URL をどの Python コードに関連づけるかを決めています
 URL パターン (単純な正規表現) から Python のコールバック関数 (自作のビュー) へのマッピングが入っている

URLConf(urls.py)の一例

 テンプレート  Djangoはテンプレートファイル(html)を呼び出し、WEB画面のデザインのテンプレートとして表示させる
 Django テンプレート言語  テンプレートの表記法。Pythonとは違った文法。

コンテキスト (context) はテンプレートに渡される「変数名」から「変数の値」 へのマッピング.

 IDLE  PYTHONインストすると自動で入るコマンドインタフェース。C:\Python34\Lib\idlelibにidle.batが含まれており、それで起動する。
 
 文法          解説
 __str__(self):  データベースから返される文字列は全て Unicode 文字列であり、メソッドにこの__str__を定義しておくと、戻り値をUnicodeに変換して返してくれる。この定義がないと、具体的な格納値がDjango adminなどから確認できない。
   
I
Djangoの始め方
1.projectの作成 ↓たとえばmysiteというプロジェクトを作る

django-admin.py startproject mysite

上記コマンドを実行したカレントフォルダにmysiteフォルダができる
↓このようなファイル構成
mysite
|
|   manage.py
|
\—mysite
        settings.py
        urls.py
        wsgi.py
        __init__.py
2.データベースのセットアップ ↓データベースの設定は、settings.py にありますが、標準では、SQlite3を使うよう設定済

python manage.py migrate

3.スーパーユーザーを作成
python manage.py createsuperuser
C:\Python34\mysite>python manage.py createsuperuser
Username (leave blank to use ‘hide’): admin
Email address:
Password:
Password (again):
Superuser created successfully.
4.開発サーバの起動

python manage.py runserver

5.アプリケーションの作成

アプリケーションは、プロジェクトを構成する機能の単位で、場合によっては再利用の対象とできる単位

python manage.py startapp cms

6.データベースに定義したいデータ モデルを、cms/models.py に定義
 
7.モデルを有効にする
cms アプリケーションをインストールしたことを、プロジェクトに教えてあげる必要があります。/settings.py の INSTALLED_APPS の最後に cms を追加。
 
8.言語とタイムゾーンを日本にします
9.以下のコマンドで、models.py の変更を拾って、マイグレーションファイルを作成

python manage.py makemigrations cms

10.このマイグレートファイルが、どのような SQL になるか、以下のコマンドで確認

python manage.py sqlmigrate cms 0001

11.まだデータベースに反映していないマイグレートファイルを、以下のコマンドでデータベースに反映

python manage.py migrate

12.管理サイトの有効化
管理サイトというものがあって、ここからマスターメンテナンス的なデータ投入がすべてできてしまいます。
 1python manage.py runserver で開発用サーバを起動します。
 2http://127.0.0.1:8000/admin/ にブラウザでアクセスします。
 3初回の $ python manage.py createsuperuser で初期化したスーパーユーザー admin/admin でログインします。
13 cms モデルを admin 上で編集できるようにする
cms/admin.py に、管理サイトへ表示したいモデルを追加
14 データの追加、修正、削除を確認

管理サイトの一覧を見た時、models.py の

で設定したものが、レコード名として見えています。

15もう少しレコードの項目全体が見えるよう、cms/admin.py を修正

モデルに追加したテーブルの一覧、登録、修正、削除が簡単にできました
 
Bootstrapの導入
Bootstrap で必要な jQuery を含めて、以下からダウンロード
ダウンロードしたファイルを、mybook プロジェクト ディレクトリの下に static というディレクトリを作って、以下のように配置
この static というディレクトリは、mybook/settings.py の STATIC_URL で指定されたディレクトリ
ここを探してくれるよう、mybook/settings.py の最後に、STATICFILES_DIRS を追加
 

django-bootstrap-form

一覧系HTMLは、Bootstrapで必要なclassを手書きして、登録/修正のフォーム系HTMLは django-bootstrap-form という Python モジュールを使います。

 
mybook/settings.py の INSTALLED_APPS に ‘bootstrapform’ を追加
 

ビューをざっと作る

一覧、登録、修正、削除のファンクションが必要なので、`cms/views.py’ にひな形を作る

URL スキームの設計

cms/urls.py というファイルは存在しないので、新しく作る。この中で、URLと、ビューのファンクションの紐付けを行う
============================

Djangoのバージョン確認
C:\Python34>pip freeze|find “Django”
Django==1.8.3

メールの送信

1.setting.pyに以下を記載
EMAIL_HOST=’SMTPサーバ名’
EMAIL_PORT = 25
EMAIL_HOST_USER = ”
EMAIL_HOST_PASSWORD = ”
EMAIL_USE_TLS = False
2.views.pyに以下を記載
from django.core.mail import EmailMessage
def <ここにview名>(request):
    email = EmailMessage(‘Hello’, ‘World’, to=[‘root@test.com’])
    email.send()
viewが呼ばれた瞬間にメールが対象のSMTPサーバ宛に飛ぶ

タイトルの通り、同一フォーム内でクリックしたボタンによって異なる処理を行いたい場合は以下のように書きます。

hoge.html

views.py

Djangoで使える開発用SMTPサーバ

メール挙動の確認のために、開発用SMTPサーバが用意されている

以下を一行で実行すれば、1025番でSMTPサーバが立ち上がる。

Djangoのsettings.pyに独自設定を定義する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Djangoの設定はsettings.pyにいろいろ書かれています。
なので自分が作成するアプリケーション用の設定も同じく書いておきたいわけです。
それは、
http://djangoproject.jp/doc/ja/1.0/topics/settings.html#topics-settings
にちゃんと書いてあるので、そこを見ればOKです。

要約すると
settings.pyには、普通にオリジナルの設定を他の既存のパラメータと同様な感じで定義できます。
例えば、
MY_CONF = ‘test conf’
とか普通に書きます。

使うときですが、利用するファイルで
from django.conf import settings
として、
val = settings.MY_CONF
で利用できます。

ユーザ認証

必要な設定:
 
■settings.py

・settings.pyのINSTALLED_APPSにデフォルトでは次のアプリが含まれているはずなので、有無を確認

 ’django.contrib.auth’
‘django.contrib.contenttypes’
・settings.pyの、LOGIN_URLにて、ログイン画面を表示するURLを定義。
 LOGIN_REDIRECT_URLにて、ログイン後のリダイレクト先を指定。
 
■ログイン、ログアウトのHTMLtemplateを用意。ログイン用のtemplateは、ユーザー名とパスワード入力を求める画面となる。
 
djangoにはログイン・ログアウト用のviewがデフォルトで用意されている。それをurls.pyで指定
 
 
■login_requiredデコレータを使えば,ページの閲覧をログイン済みのユーザだけに制限することが出来る.
login_req_requiredを使わないと、if not request.user.is_authenticated():と記述しないといけないので手間。

Django tuttorial

Django公式サイトのチュートリアル https://docs.djangoproject.com/en/1.8/intro/tutorial01/

以下を作成する。
・ユーザが投票できるsite
・管理者がデータをCRUIDできる管理画面
・プロジェクト作成
django-admin startproject  polltutorial
↓生成されるもの
polltutorial/     <==プロジェクトフォルダ
    manage.py   <==管理用コマンドラインユーテリティ
    mysite/
        __init__.py  <==空ファイル。このファイルがあることで、PythonがこのフォルダがPythonパッケージであると認識する。
        settings.py  <==setting/config用ファイル
        urls.py     <==URL宣言
        wsgi.py
・models.pyでモデルを作成。
作成するモデルは、django.db.models.Model のサブクラスとなる。models.pyで定義するクラスは、表に相当し、クラス内で定義するフィールドが表の列に相当。
 
外部キー
参照制約において定義され、他の列との値の依存関係を持つ。例えば、FOREIGN KEY(A) REFERENCES TABLE1(B)と記述した場合、外部キー列Aの値は、TABLE1の列Bが持つ値に含まれるかNULL値でなければならない。
外部キーが参照する列は、主キー(Primary Key)か代理キー(Alternate Key)でなければならず、同一テーブル内の列でも、他のテーブルの列のどちらも指定可能である。なお、同一テーブル内の列を参照することを自己参照と呼ぶ。

Django form

FormのフィールドのHTMLテンプレートにおける表現方法
 
{{ form.as_p }}・・・・forms.pyで定義した各フィールドとラベルをパラグラフ (<p>) タグ で囲って出力します
{{ form.as_table }}・・・各フィールドがテーブルの各行になるように出力で きます (自分で <table> タグで囲む必要があります)。
↓このように name=”XXXXX”のところに、Formフィールド名を指定すると、当該フィールドとして認識され、画面インプットの値が
当該フィールドの値として入る
<p><label for=”id_subject”>Subject:</label>
<input id=”id_subject” type=”text” name=”subject” maxlength=”100″ /></p>
 
また、↓このような書き方もHTMLテンプレート上にできる
{{form.subject}}  <==forms.pyで定義したsubjectフィールド

ruby

ruby入門
http://www.rubylife.jp/ini/

文法

  • Rubyでは基本的に1つの処理を行うプログラムを1行に記述する
  • そして改行が1つの処理の区切りとなる。改行の代わりにセミコロン(;)を使用することも可能。

Ruby on Rails

http://www.rubylife.jp/rails/

RubyOnRails を使ってみる  http://jp.rubyist.net/magazine/?0004-RubyOnRails

リバースプロキシ経由のinotesの構成

参考資料: LDD Today: iNotes Web AccessをWebSphere Edgeリバース・プロキシー・サーバーを活用して使った構成

製品体系:
WebSphere Application Server(Base版)- WAS本体(IBM HTTP Server(IHS)同梱)が存在する。
これにクラスタ対応(Edgeコンポーネント、セッション共有、Deployment Managerなど)を追加したものが、WebSphere Application Server Network Deployment(ND版)という。

Apache as a reverse proxy for IBM Domino iNotes with home server redirection

How to Configure a Reverse Proxy server for iNotes and Sametime Proxy Integration

IBM HTTP Server(IHS)をDomnoと同居させて利用

Domino9からIHSをDominoと同時にインストール可能となった。
メリット: SSLの後継版であるよりセキュアなTLSを利用できる。DominoとIHSを別々にたてずに1台でTLS利用可能。
デメリット:Windowsサーバのみ対応。DMZにリバースプロキシサーバ用途で配置し、内部ゾーンにDominoを配置するという2台構成の場合は結局別々に建てる必要があるので
この1台に同居は意味がないと思われる。

DominoバンドルのIHSのインストール手順
 
↓下記サイトが画面ショット付きで解説している
1.インストレーションタイプでカスタマイズDomino Serverを選択し、IBM HTTP Serverを追加選択してインストール実行. 続けて日本語ランゲージパックのインストール実行。
2.デスクトップにできているServerアイコンをダブルクリックして、サーバセットアップを実行し、ドメインなど個別サーバパラメータを定義。
3.IHSでSSL/TLSを利用するにはキーデータベースが必要。SSL/TLSキーデータベースの作成には鍵管理ツールを使う。
 3-1.C:\Program Files\IBM\Domino\ihs\binにあるikeyman.batを実行。GUIが立ち上がる。鍵データベース>新規を押下
 
 3-2.データベースタイプにCMS、ファイル名と場所を任意にセットしOKを押す。
  

 
 3-3.passwordを設定。パスワードをファイルに隠すをチェックすると、    暗号化されたパスワードがキーファイルと同じフォルダに格納される(拡張子はsth)
 
 3-4.自己署名をするため新規自己署名ボタンを押下。認証機関に認証要求する場合は、個人認証要求を選択して、新規とすすむ(詳細は、http://xpagetips.blogspot.jp/2013/05/setting-up-ibm-http-server-with-domino-9.htmlにかかれている)
 3-5.オレオレ証明書を作成する画面。鍵ラベルは適当にサーバ名、有効期間はテストなので長めに変更し、OK押下。
4.インスト後、notes.iniにてHTTPIHSEnabled=1を追加
5.C:\Program Files\IBM\Domino\ihs\conf\domino.confにて、#Listen 0.0.0.0:80の#をはずす。これでHTTPが有効になる。
6.同じくdomino.confの以下の行の#をはずす。これでSSL(TLS)が有効になる。
 
#Listen 0.0.0.0:443
#<VirtualHost *:443>
#SSLEnable
#</VirtualHost>
#KeyFile “C:\Program Files\IBM\Domino\ihs\key.kdb” <==ツールで作成したキーデータベースのありか。ダブルクォートでかこむ。
#SSLDisable
7.Dominoサーバを起動させる

rubyでの正規表現

http://www.geocities.jp/m_hiroi/light/abcruby05.html

表 1 : 正規表現で使用する基本的なメタ文字
メタ文字 意味
| この前後にある正規表現のどちらかと一致する
* 直前の正規表現の 0 回以上の繰り返しに一致する
+ 直前の正規表現の 1 回以上の繰り返しに一致する
? 直前の正規表現に 0 回もしくは1回一致する
{m,n} 直前の正規表現の m 回以上 n 回以下の繰り返し
*? 直前の正規表現の 0 回以上の繰り返しに一致する(最短一致)
+? 直前の正規表現の 1 回以上の繰り返しに一致する(最短一致)
?? 直前の正規表現に 0 回もしくは1回一致する(最短一致)
{m,n}? 直前の正規表現の m 回以上 n 回以下の繰り返し(最短一致)
[ ] [ ] 内に指定した文字のどれかと一致する
[^ ] [ ] 内に指定した文字でない場合に一致する
. 任意の1文字と一致する
^ 行頭と一致する
$ 行末と一致する
( ) 正規表現をグループにまとめる
\ メタ文字を打ち消す
\A 文字列の先頭と一致
\b 単語境界と一致 (\w と \W の間の空文字列と一致)
\B \B 以外と一致
\d 数字と一致 ([0-9] と同じ)
\D \d 以外と一致
\s 空白文字と一致 ([ \t\n\r\f] と同じ)
\S \s 以外と一致
\w 英数字とアンダースコア _ に一致 ([_a-zA-Z0-9] と同じ)
\W \w 以外と一致
\Z 文字列の末尾と一致

ruby環境セットアップ

Redhat Linuxでrubyインストール
yumでRubyをインストールすることもできるが、バージョンがかなり古いため、Rubyをインストールする際はソースからビルドする
http://blog.takkinoue.com/entry/2014/12/16/225442
 
 
 
Redhat Linuxでrubygemsインストール    rubygemsとはrubyのリポジトリ管理システム。
 
○rubyでmailを扱う場合、mailライブラリをインストする。
 
 
○エディタ
 
Ruby用エディタ:Sublime-Text

http://matome.naver.jp/odai/2138657649717812101

SublimeText3でRubyをコーディングする際の最低限のインストール&設定(Windows)

http://tigawa.github.io/blog/2014/03/09/st3-win-ruby/

EPELとは

EPEL は “Extra Packages for Enterprise Linux” の略。すなわち、Red Hat Enterprise Linux や CentOS 向けに、Fedora Project によって開発・テスト・改良されているパッケージ群を使えるようにするためのリポジトリです。

早い話、Fedora Project で開発されている、サードパーティ製のパッケージ群。Red Hat 社から提供されているリポジトリとは別に、Fedora では比較的新しいパッケージが提供されているのが特長です。

単にリポジトリが提供されているのではなく、RHEL がサポートされている期間は、EPEL リポジトリに含まれるパッケージも、同様にメンテナンスされます。またRHELに含まれるパッケージとは競合や干渉しないように努められています。

これまでも、サードパーティ製のパッケージやリポジトリを統合する動きはありましたが、多くが失敗に終わったようです。EPEL プロジェクトは、研究グループとしてではなく、それが1つのプロジェクトとしてスタートしています。何年もの時間をかけた後、FESCo(Fedora運営グループ)で承認を受け、現在のプロジェクトに至ります