Python」タグアーカイブ

Python + Django してみた。 その2.とりあえずページを出してみる。

どーも。みむらんです。
というわけで、 第1回 の続きとして適当にぺけぺけと。

 

1. settings.py を編集する。

settings.py を編集して、 任意のアプリケーションを読み込むように指示します。

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    # 'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
)

上記のようなことが書かれている箇所があるのですが、
そこに、

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'test_app',
)

というように、(最下行)
test_app (作成したアプリケーション名) を追記。

 

2. urls.py を編集。

urls.py を編集し、任意の URI へのアクセスを
任意のアプリケーションのコールバック関数に渡るように、 URI と関数を関連づけます。

”””
どの本読んでも、
みんなコールバック関数じゃなくて、関数やメソッドと書かれているから、関数と書いた方がいい気がしてきた。

・・他の言語での用語に合わせるならば、ハンドラとも書けそうな気がするけど、むー。 
”””

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'test_project.views.home', name='home'),
    # url(r'^test_project/', include('test_project.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    # url(r'^admin/', include(admin.site.urls)),
)

デフォルトではこのようになっていますが、これを変更し、

urlpatterns = patterns('',
    (r'\$', 'test_app.views.home'),
)

という感じに。

こうすることで、全てのアクセスが、
test_app の、 views.py の中で定義されている、 home メソッドにて処理されるようになります。

第1引数は正規表現で記述しますので、
(r’^lang/(python|CSharp)/$’, ‘test_app.views.correct’)
なんて書き方も可能です。

 

3.views.py を書く。

先ほど作成した、アプリケーションのディレクトリへ移動して、
その中の views.py を編集し、処理内容を定義します。

views.py :

from django.http import HttpResponse

def home(req):
    return HttpResponse('Hello Django World !')

 

4.動かしてみる。

image

 

テキストが表示された!

Python + Django してみた。 その1.とりあえず動かしてみる。

image

どうもみむらんです。
ろーたすに「みむらん」と言われたので、 Web やるときは「みむらん」としようかな、いあいあ。

とりあえず、普段ネイティブアプリケーションや、クライアントソフトウェアをやる人が、
ウェブアプリケーションをやってみるコーナー第何弾ですよっと。

 

閑話休題

 

というわけで早速使ってみます。

 

1.下準備:インストール

$ easy_install django

これでおっけーです。

今回は Apache + mod_wsgi で行いましたが、
もしその辺の環境がそろってなくとも、単体でも実行可能なので問題ありません。

 

2.プロジェクト作成

作業ディレクトリに移動し、下記のコマンドを実行。

$ django-admin startproject testproject

 

3.アプリケーション作成

$ cd testproject
$ ./manage.py startapp testapp

2で作成したプロジェクト(上記例だと 「testproject」)のディレクトリに移動し、
startapp するだけです。

 

4. (Apache の場合のみ) mod_wsgi で動くようにする。

djangoをmod_wsgiやcgiで使うためのpythonスクリプト – ラシウラ

ここを参考に。

掲載されているスクリプトを、 index.wsgi として保存して、
.htaccess で見に行かせる。

またこのとき、以下のことを行う。

1.apps = os.path.dirname(__file__) の __file__ を settings.py のあるパスに書き換える。
2.必要に応じて、 os.environ[“DJANGO_SETTINGS_MODULE”]  の行をコメントアウト。

 

4.(スタンドアロン の場合のみ)  サーバを立ち上げる。

$ python manage.py runserver localhost:8080

 

5.アクセスする。

image

It worked! と出れば成功。

Excel のマクロを Python で書く。

みむらです。IronPython ってのがあるので、ちょちょいと。

仕組みとしては、Visual Studio の VSTO (Visual Studio Tools for Office) を使って、
Office 向けのアドインを作って、その中で IronPython を動かそうーってこと。

359870206

結果としてはこんな感じ!

とりあえず、VSTO の書き方とかは割愛して。

ソースはここに:
https://github.com/mimura1133/mm_Python_for_Excel

using Microsoft.Scripting.Hosting;
using IronPython.Hosting;

namespace ExcelAddIn1
{
    public partial class ThisAddIn
    {
        public static string Code = "";

        static ScriptEngine _python;
        static ScriptScope _python_scope;

        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            _python = Python.CreateEngine();
            _python_scope = _python.CreateScope();
            _python_scope.SetVariable("Application", Application);
            _python_scope.SetVariable("Function", Application.WorksheetFunction);
            _python_scope.SetVariable("Cells", Application.Cells);
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        public static void Run()
        {
            var cc =_python.CreateScriptSourceFromString(Code);
            cc.Execute(_python_scope);
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}

メインソースはこんな感じ!

Python.CreateEngine() で、 Python のエンジン作って、

Scope に対して、 SetVariable を使って、参照をがしがし。( python で言うところの、 import )

あと、どこかから Run が実行されたらコンパイルして実行する仕掛け。

動作例ですと、「Run」 ボタンですね。

これ使った場合、 Function 以下に、Excel の関数が存在していて、

Cells 以下に、各セル情報が入っているので、キー入力を捕まえてくれば、Python によるマクロも可能かも。

制作時間30分だから、とっても汚くて、実装がふざけた感じになっているけど、許してね。

Python + pywin32 で COM 叩いてしゃべらせる。

どうもみむらです。
普段は SUA (UNIX 互換環境) 上で叩いているのですが、
今日は堂々と Windows 上で叩いてみます。

PyWin32 ってのをつかって、 COM コントロールを叩いてみます。

とりあえず。COM コントロールとは。

Microsoft社が提唱する、部品化されたプログラムを作成・利用するための基盤となる技術仕様。特定の機能のみを持つプログラム部品を組み合わせることでアプリケーションソフトの開発が容易になる。この仕様に基づいてデータのやりとりができるプログラム部品のことをCOMコンポーネントと呼ぶ。

COMとは【Component Object Model】 – 意味-解説-説明-定義 : IT用語辞典

だそーです! (ぉ

夢のある話をすると、COM コントロールを使うことで、
音声認識や音声合成、各種 Office アプリケーションの制御、その他 COM コンポーネントが提供する機能を
使うことが出来ます。


1.Python の導入

http://www.python.jp/Zope/download/pythoncore
上記URL から、 Python 2.x 系をインストールします。

えーと、Python 3.x 系はいろいろと変わったようで。でも動くのかなぁ。うーん

2.Python for Windows extensions の導入

http://sourceforge.net/projects/pywin32/files/pywin32/
ここから最新ビルド(一覧の 「Build???」 の数字が一番大きい物を選択)のうちの、
上で導入したバージョンと同じ物(無ければ近いバージョン)をインストール。

3.叩く。

ばんばん! ちがいます。
スタートメニューから Python を立ち上げて、

image

このように立ち上げておきます。

続けて、

import win32com.client

とタイプ。

image

今回は音声合成ということで、「Sapi.SpVoice」を使って、

Speak メソッドを叩いてしゃべらせます。

もし今回使う、「Microsoft Speech API」が気になる人は、

http://msdn.microsoft.com/en-us/library/ms723602(v=VS.85).aspx

この辺の資料を参考にして下さい。

speech = win32com.client.Dispatch("Sapi.SpVoice")
speech.Speak("Hello Python World!")

実行しますと、Win7 / Vista 環境では、多分、米国英語のおねいさんが

しゃべってくれると思います。

XP 環境ですと、なんか相当声のしゃくれたおっちゃんがしゃべってくれた気がします。

・・試してないですが。

とりあえずこんな感じでー。