スポンサーサイト

0

    一定期間更新がないため広告を表示しています


    • 2014.12.23 Tuesday
    • -
    • -
    • -
    • -
    • -
    • by スポンサードリンク

    さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ

    0
      自分の趣味サイトなら喜んであれこれ探求しますが^^; 急ぎだったので結局SQLiteを使って解決しました。
      結果、MySQL4.0系+utf8サイトは諦めたほうが早いかも??
      (このエントリーは次回さくら使用のお客様から依頼があったときのためにメモ)

      1.SSHでログイン。

      2.virtual-python http://peak.telecommunity.com/dist/virtual-python.pyとez_setup http://peak.telecommunity.com/dist/ez_setup.pyのイントール。

      3.sqlite3 http://www.sqlite.org/download.htmlのインストール。
      ./configure --prefix=$HOME
      make
      make install
      /home/****(さくらアカウント)***/bin/sqlite3にsqliteのバイナリができていることを確認。

      4.pysqlite http://initd.org/pub/software/pysqlite/releases/のインストール。
      微妙に最新版だとインストールでエラーになったので、2.2.2ぐらいまでバージョンを落としてみた。※今度時間のあるときに自環境でテストしてエラーが出ない最新verを探しましょう。。。

      5.あとはXREAの時と同じように、CGI版でdjangoを使うためのセットアップの続きをします。(最近Coreserverでdjango利用報告が増えてますが^^XREAとcoreは基本的に使い方が同じなのでXREAの方法で行けます。django製3サイトXREA→core移動済みの私が保証します。笑)


      普段MySQL愛好者の私にとっては、DBの中身がdjango.contrib.admin経由しか気軽に確認/修正できないというのは、実は非常に不安だったのですが^^;
      検索したらsqliteのコマンドラインの使い方が見つかったので、こちらを参考にさせていただいて、MySQLからエクスポート→SQLiteへインポート&定期dump(CRON使用)処理にも無事成功しました☆


      さくらインターネット スタンダードプランでdjango使ってる方、DBは?

      0
        偶々さくらをお使いのお客様からCMS/デザインの入れ替え(従来私がphp4で自作したものを使用していただいてました^^;)を依頼されてます。

        で、折角なのでdjangoで作ってみたんですが^^;
        DBがmysql4.0系なのが原因なのか、Unicodeエラーでさっぱり動きません。
        元のサイトには影響でないようにサブドメを切ってテストしてますが、さくらの共用鯖でdjangoを動かしている方々は、DBどうしてますか?

        一応解決策?としてsqlite3とpysqliteを自前でインスコ&sqliteで利用を考えてます。
        が、以前のmysqlのデータをインポートする必要があるため、phpSQLiteAdminで簡単に操作もできたらいいなーという超わがままな条件がありまして^^;

        php5.2.4をインスコした上で.htaccessを弄ってみましたが、phpSQLiteAdminは500エラーになってしまって動きませんでしたorz

        最悪の場合は手動でdjango.contrib.admin上で手動コピペするかなぁ…。


        wxPythonに手を出す

        0
          3ヶ月以上かかってgdgdしてた案件が今月末でようやく手放せそうです。長かったー!
          社内にPG・SEがいなくて、散文的な機能要望だけ頻繁に送ってくる会社とのお付き合いは大変です…。一見IT系でもこういう会社多いので、皆さんお気をつけて。

          正式スタートまで時間の掛かりそうなpython案件がもう1件迷い込んできたので、「このままpythonを極めてやるぜ!」な心境に。
          案件の正式スタートまでwxPythonで遊ぶことにしました(遊んでないできちんと他の仕事もしましょうfーーメ)

          チュートリアル(英文)が検索にひっかかったので喜んでコピペしてやってみたら、「from wxPytho.wx import * じゃなくてimport wxにしなさい!」と怒られた(´・ω・`)
          最初の1章でこの調子だと、折角使い方覚えたつもりでも後からあれこれ最新版にキャッチアップするのが大変そうなので、改めてwxPythoの公式サイト内を探索すると、最新版チュートリアルらしきもの(英語だけど)を見つけました。
          しばらくこれで遊びます。
          気が向いたらdjango book(TBA多いし最近本家が更新されてないですが)の和訳版と一緒に和訳を公開するかも。


          ……ところで、名古屋でpythonやってる人って多いのかしら?
          迷い込んできたpython案件は、名古屋の某社が発注元ですし、eversさんのブログに「名古屋在住ですよ」とカミングアウトしたら「momoさん★も★名古屋かよー」という反応をいただきました^^;
          日本ではマイナーな(?)Pythonですが、名古屋から盛り上がると嬉しいです♪


          クッキーを使わない認証できました!

          0
            何とかできたようなので公開します★
            everesさん、常山さん、ありがとうございましたm(_ _)m

            セッションキーを取ろうとするとNoneが返ってきてうまく行かないので(saveする前にとってんのかな??)、結局ユーザーIDとパスワードをGETで持ちまわる形にしました。

            ■デコレータ(見づらくてすみません)
            前回everesさんに手直しして頂いたものを元に作ってます。

            from django.contrib.auth import REDIRECT_FIELD_NAME
            from django.contrib.auth.models import User
            from django.http import HttpResponseRedirect
            from myproject.lib.minihash import hash, hashdecode
            from django.conf import settings
            from urllib import quote

            def login_required(view_func):
            login_url = "/accounts/login/"
            def _checklogin(request, *args, **kwargs):
            if request.user.is_authenticated():
            return view_func(request, *args, **kwargs)
            else:
            try:
            request.META['HTTP_USER_AGENT'].index("DoCoMo")
            user = User.objects.get(is_active=True,id=request.GET['user'])
            if user.check_password(hashdecode(request.GET['pwd'])):
            request.user = user
            return view_func(request, *args, **kwargs)
            except:
            pass
            return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, quote(request.get_full_path())))

            _checklogin.__doc__ = view_func.__doc__
            _checklogin.__dict__ = view_func.__dict__
            return _checklogin

            パスワードを生のまま持ってると何かと危険だと思うので、簡単ですが暗号化をかけてあります^^;
            minihashというのが自作の簡単なhash化用モジュール(?)で、hash(暗号)・hashdecode(復号)という関数を入れてあります。

            ■コンテキスト

            def mobile_session(request):
            try:
            request.META['HTTP_USER_AGENT'].index("DoCoMo")
            q = "?user=%s&pwd=%s" % (request.GET['user'],request.GET['pwd'])
            except:
            q = ""
            return { 'q':q }

            説明は不要かと思いますが、Docomo携帯でアクセス、かつGETでuserとpwdを持っていれば
            それをqという変数に入れています。
            何に使うかというと、ログイン後のページ遷移でuser/pwdを持ち廻るために、テンプレート内の全てのリンクタグ&FORMタグに追加しました。←これが一番面倒でした…


            ■ログイン用ビュー
            #ついでですが、newformsを使って自分で書いたものなので参考になるかと。


            djangoでクッキー利用しない認証は可能か?(ドツボ中)

            0
              ここ2か月ばかり怒涛のように仕事と親戚付き合いに忙殺されてブログ書けませんでした。

              ようやく一段落ついた、と思ったらまたハマったので「ヘルプ!」を兼ねてメモしときます。
              djangoで作ったPC版コミュニティサイトに携帯サイトをつけようと思ったんですが、djangoのcontrib.authってクッキー必須なんですよね(http://michilu.com/django/doc-ja/authentication/)

              で、クッキーの使える携帯(AU現行全機種&WILLCOM&SoftBankの一部機種)は問題なくエンコードとテンプレを変更するだけで使えるんですが、問題はi-mode様。
              奴はクッキーが使えないので、login_requiredしてるビューがことごとくログインフォームにぶっ飛ばされて、その後ログインができない状態になります(当然)。

              自分の携帯はAUなので、自分で使うだけならいいんですが、i-modeで使いたい人がいるので、「GETでセッションIDを持ってる人」かつ「リモートアドレスがi-mode」の人を対象に、特別なログイン方式を使いたいと思ってるんです。

              最初に考えたのが、
              ★ドコモ携帯用のビューを全部新たに書いて、login_requiredを外し、1回1回GETをチェック。→→書くビューの数が膨大になり、非常にめんどくさい。が、確実に実装できそう。

              面倒なのはいやなので次に考えたのが
              ★login_requiredデコレータをカスタマイズ。user.is_authenticated()をチェック→認証不可ならGETのセッションIDをチェック→両方外したらログインに飛ばす というmyprj.myapp.mydeco.login_requiredを書き、現行ビューのインポート先をcontrib.auth.decoratorsから変更する。
              →→デコレータの書き方さえできれば、楽に実装できそう。

              で。
              早速やってみたんですが、結論としてうまくデコレータが書けず、エラーでドツボにはまってます。(´・ω・`)
              とりあえずdjango.contrib.auth.decorators.user_passes_testを参考に、

              from django.contrib.auth import REDIRECT_FIELD_NAME
              from django.contrib.auth.models import User
              from django.contrib.sessions.models import Session
              from django.http import HttpResponseRedirect
              from urllib import quote

              def login_required():
              login_url = "/accounts/login/"
              def _dec(view_func):
              def _checklogin(request, *args, **kwargs):
              if request.user.is_authenticated():
              return view_func(request, *args, **kwargs)
              else:
              try:
              request.META['HTTP_USER_AGENT'].index("DoCoMo")
              data = Session.objects.get(pk=request.GET['sessionid']).get_decoded()
              user = User.objects.get(id=data['user_id'])
              return view_func(request, *args, **kwargs)
              except:
              pass
              return HttpResponseRedirect('%s?%s=%s' % (login_url, REDIRECT_FIELD_NAME, quote(request.get_full_path())))
              _checklogin.__doc__ = view_func.__doc__
              _checklogin.__dict__ = view_func.__dict__

              return _checklogin
              return _dec

              というデコレータを書いたら、djangoのエラー画面で「login_requiredは引数を持たないって書いてるけど引数1個もらっちゃってるよ!」と怒られました。

              じゃあ。ということで
              def login_required()を
              def login_required(request)とか
              def login_required(view_func)とか
              色々変えてみたんですが、今度はdjangoのエラー画面まで行かず500エラー。
              エラーログを見るとresponseオブジェクトがどうのこうので怒られてる様子。

              GETで持たせるのをセッションIDを持たせる形じゃなくて、携帯の無料HPスペース系にありがちなユーザ名&簡単にハッシュしたパスワードにする形も考えたんだけど、このデコレータでつまづいてる限りそれも無理だよねー。
              認証バックエンドとかミドルウェアの類から自分で書かないとダメ??
              ああ困ったな。誰かヘルプw


              …携帯版だけPHP手書きで書き直そうかどうしようか、一瞬本気で悩んだ。
              一度djangoのテンプレート継承の楽さに慣れてしまったらsymfonyとかPHP手書きには戻れないorz

              そして、djangoはフレームワークというものの教育用には良いけれど(例:強制的にMVC(MTV)を分離させてくれる等)、CMS系用途に限定して使ったほうがいいのかなと思ったw
              トリッキーなハックをしなくて済むように、もう少し自由度がほしいというか。


              1

              PR

              calendar

              S M T W T F S
                    1
              2345678
              9101112131415
              16171819202122
              23242526272829
              30      
              << September 2007 >>

              twitter

              selected entries

              categories

              archives

              recent comment

              • djangoテンプレート上でmodelのメソッドに引数を渡す方法(djangoで出勤簿アプリ試作中♪)
                GavannITサービス-なりとみ
              • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
                bose wireless speaker
              • FastCGIでdjango…400エラー???
                levi's
              • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
                salomon running shoes
              • 私がそれでも名古屋市に住み続ける理由を6つにまとめてみた!
                louboutin shoes
              • FastCGIでdjango…400エラー???
                yeezy boost 350
              • さくらインターネットdjangoが突然500エラー!?(Pythonバージョンアップされてた
                jordan 11
              • Silexでエラーページをカスタマイズする方法 : Symfony Advent Calendar 2011 - day 12
                pandora jewelry
              • django対symfony 日本語メール送信(その1 symfony編)
                nike air vapormax
              • 解決!XREAでCGI版Pythonを使ってdjangoを動かす(人柱?)
                kate spade

              recent trackback

              • HTMLの表(TABLE)のセル(TD)に斜線を引くjavascriptライブラリ slash.js 作っちゃいました
                常山日記
              • django対symfony 日本語メール送信(その1 symfony編)
                CPA-LABテクニカル
              • CodeIgniterでユーザー認証
                されどLAMPな日々
              • 久々にdjangoを最新版にしたらHTMLがエスケープされちゃった!!(解決済み)
                常山日記
              • FastCGIを諦めてmod_pythonを使う。Apacheのアップグレード
                サーバー用語集
              • さくらインターネット、sqlite3でdjango@CGI版を使う際の設定メモ
                常山日記
              • さくらインターネット スタンダードプランでdjango使ってる方、DBは?
                mitszoの日記
              • python多次元リストをsort(並べ替え)する方法?
                mitszoの日記
              • フォームから送信した値とrequest.POSTの挙動($_POST@PHPとの比較)
                Humming Via Kitchen
              • 日本語テキストをtruncate@django(Python全般にも??)
                常山日記

              recommend

              links

              profile

              search this site.

              others

              mobile

              qrcode

              powered

              無料ブログ作成サービス JUGEM