8

ユーザーが配色の選択など、さまざまな設定を行う Web サイトをプログラミングしています。これらをプレーン テキスト ファイルとして保存しても問題なく、セキュリティは問題になりません。

私が現在見ている方法は次のとおりです。すべてのキーがユーザーであり、値がユーザーの設定を含む辞書である辞書があります。

たとえば、userdb["bob"]["colour_scheme"] の値は "blue" になります。

ファイルに保存する最良の方法は何ですか? 辞書を漬ける?

私がやろうとしていることを行うためのより良い方法はありますか?

4

12 に答える 12

9

私はConfigParserモジュールを使用します。これは、あなたの例に対してかなり読みやすく、ユーザーが編集可能な出力を生成します。

[ボブ]
color_scheme: 青
イギリス人: はい
[ジョー]
color_scheme: それは「色」です、ばかげています!
イギリス人: いいえ

次のコードは、上記の構成ファイルを生成し、それを出力します。

import sys
from ConfigParser import *

c = ConfigParser()

c.add_section("bob")
c.set("bob", "colour_scheme", "blue")
c.set("bob", "british", str(True))

c.add_section("joe")
c.set("joe", "color_scheme", "that's 'color', silly!")
c.set("joe", "british", str(False))

c.write(sys.stdout)  # this outputs the configuration to stdout
                     # you could put a file-handle here instead

for section in c.sections(): # this is how you read the options back in
    print section
    for option in c.options(section):
            print "\t", option, "=", c.get(section, option)

print c.get("bob", "british") # To access the "british" attribute for bob directly

ConfigParser は文字列のみをサポートすることに注意してください。そのため、上記のブール値のように変換する必要があります。基本の概要については、 effbotを参照してください。

于 2008-10-14T21:50:29.490 に答える
7

辞書でcPickleを使用するのが私の選択です。辞書はこの種のデータに自然に適合するため、要件を考えると辞書を使用しない理由はないと思います。Python 以外のアプリケーションからそれらを読み取ることを考えていない限り、その場合は、言語に中立なテキスト形式を使用する必要があります。ここでも、ピクルとエクスポート ツールを使えば問題ありません。

于 2008-10-14T10:10:11.900 に答える
6

どちらが良いかという問題には触れません。テキストファイルを処理したい場合は、ConfigParser -moduleを検討します。他に試してみることができるのは、simplejsonまたはyamlです。実際の db テーブルを検討することもできます。

たとえば、次の 3 つの列を持つ userattrs というテーブルを作成できます。

  • int user_id
  • 文字列属性名
  • 文字列属性値

数が少ない場合は、すばやく取得できるように Cookie に保存できます。

于 2008-10-14T10:15:35.400 に答える
5

これが最も簡単な方法です。単純な変数とimport設定ファイルを使用します。

ファイル userprefs.py を呼び出します

# a user prefs file
color = 0x010203
font = "times new roman"
position = ( 12, 13 )
size = ( 640, 480 )

アプリケーションでは、このファイルをインポートできることを確認する必要があります。多くの選択肢があります。

  1. を使用しPYTHONPATHます。PYTHONPATH環境設定ファイルを含むディレクトリを含めるように設定する必要があります。

    を。ファイルに名前を付けるための明示的なコマンドライン パラメータ (最適ではありませんが、単純です)

    b. ファイルに名前を付けるための環境変数。

  2. sys.pathユーザーのホーム ディレクトリを含むように拡張する

import sys
import os
sys.path.insert(0,os.path.expanduser("~"))
import userprefs 
print userprefs.color
于 2008-10-14T10:15:49.517 に答える
3

もちろん、データベース駆動型の Web サイトの場合、最適なオプションは db テーブルです。私はあなたがデータベースのことをしていないと仮定しています。

人間が読める形式を気にしない場合pickleは、単純で簡単な方法です。についての良い報告も聞いていsimplejsonます。

人間の可読性が重要な場合、次の 2 つの単純なオプションが提示されます。

モジュール:モジュールを使用するだけです。必要なのはいくつかのグローバルで、派手なものが何もない場合は、これが道です。本当にやむを得ない場合は、セクションをエミュレートするクラスとクラス変数を定義できます。ここでの欠点: ファイルがユーザーによって手動で編集される場合、エラーを見つけてデバッグするのが難しくなる可能性があります。

INI 形式:これにはConfigObjを使用しており、かなりの成功を収めています。ConfigObj は基本的に ConfigParser の代替であり、ネストされたセクションなどをサポートしています。必要に応じて、ファイルの予想されるタイプまたは値を定義して検証し、ユーザー/管理者にセーフティ ネット (および重要なエラー フィードバック) を提供できます。

于 2008-10-14T14:08:57.097 に答える
2

組み込みのsqlite3モジュールは、おそらくほとんどの代替モジュールよりもはるかに単純であり、必要に応じて完全な RDBMS に更新する準備が整います。

于 2008-10-14T21:58:00.693 に答える
2

これらの設定をファイル システムに保存する必要がある場合は、shelve または sqlite データベース使用ます。とはいえ、あなたはウェブサイトを構築しているので、おそらくある種のデータベースを使用するので、それを使用しないのはなぜですか?

于 2008-10-14T12:32:07.027 に答える
1

configfiles の可読性が重要な場合、.ini のようなファイルの読み書きを可能にする ConfigParser モジュールが代替手段になる可能性があります。ただし、ネスト レベルは 1 つに制限されます。

于 2008-10-14T10:19:53.987 に答える
0

データベースがある場合は、データベースに設定を保存することをお勧めします。ただし、通常のファイルの方が環境に適しているように思えます。

おそらく、すべてのユーザー設定を同じファイルに保存したくないでしょう。その 1 つのファイルへの同時アクセスで問題が発生する可能性があるからです。各ユーザーの設定を独自の pickle ファイルにディクショナリとして保存すると、ユーザーは独立して動作できるようになります。

ピクルはそのようなデータを保存するための合理的な方法ですが、残念ながらピクルのデータ形式は人間が読めないことで有名です。repr(dictionary)より読みやすい形式で保存することをお勧めします。ユーザー設定をリロードするには、eval(open("file").read())またはそのようなものを使用します。

于 2008-10-14T10:13:48.197 に答える
0

Pickled Dictionary の使用についての回答に同意します。単純なデータを Dictionary 構造に格納するのに非常に単純で効果的です。

于 2008-10-14T14:01:44.727 に答える
0

自分でファイルを編集できることを気にせず、Python オブジェクトを永続化する簡単な方法が必要な場合は、pickleを使用してください。ファイルを人間が読み取れるようにするか、他のアプリで読み取れるようにする場合は、ConfigParserを使用します。より複雑なものが必要な場合は、リレーショナル ( sqlite ) またはオブジェクト指向 ( axiomzodb ) など、ある種のデータベースを使用してください。

于 2008-10-14T14:02:28.000 に答える
0

このためにデータベースを使用していない特別な理由はありますか? それは通常の自然なことのようです-または、ユーザーIDなどをキーにしたデータベースに設定のピクルスを保存します。

ウェブサイトの使用パターンを説明していませんが、一般的なウェブサイトを考えているだけですが、データベースに設定を保持すると、ファイルを使用するよりもディスク I/O がはるかに少なくなると思います。

OTOH、クライアント側のコードで使用される可能性のある設定については、それらをキャッシュ可能な静的ファイルに JavaScript として保存すると便利です。(おそらく、これらの設定をデータベースに保存し、必要に応じて静的ファイルを再構築します)

于 2008-10-14T12:50:27.240 に答える