7

DjangoでWebアプリを作成しています。https://docs.djangoproject.com/en/dev/intro/およびドキュメントの一部からDjangoチュートリアルをすでに実行しました

サーバー側のリクエスト間に追加データを保存する方法について質問があります。Djangoは、次のようにユーザーに対して非常に優れています。

views.pyで:

def login_user(request):
    if request.POST:
        username = request.POST.get('username')
        password = request.POST.get('password')

        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return HttpResponseRedirect(settings.LOGIN_REDIRECT_URL)

これで、別の関数で、次のようにcsrfトークンを介して関連付けられたバックエンドに格納された情報を使用できます。

views.pyで

@login_required
def myappformmethod(request):
    user = request.user
    msg = 'hello '+user.username

生成されたhtmlファイルには、ログに記録されたユーザーに関する直接情報は含まれていませんが、csrfトークンはフォームフィールドとして保持されます。

<form name="myform" action="/myapp/myappformmethod" method="post" onsubmit="prepare()">
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='NwKW2lFWSkkNEasdd3ExHe1l5ltzQi' /></div>

HTMLには表示されないが、サーバー側に保存され、次のようなものを使用して利用できるセッション関連のデータ(お気に入りの色など)を保存したいと思います。

if request.favourite_color:
    color = request.favourite_color

使用しない

if request.POST.get('favourite_color'):
    request.POST.get('favourite_color')

これは手動のフォーム要素操作に対して脆弱です(フォームフィールドを使用して渡された場合[type:hiddenは編集できるため、役に立ちません])

適切なアプローチは、リクエストにフィールドを追加し、前述の「ログイン」メソッドのようなものを生成することです...しかし、それを行う方法は?

ありがとう!

4

1 に答える 1

12

あなたが探している機能は「セッション」と呼ばれ、Djangoによって直接サポートされています。

https://docs.djangoproject.com/en/dev/topics/http/sessions/

...そしてここにそのページからの2つの例があります:

request.session['fav_color'] = 'blue'

fav_color = request.session['fav_color']
于 2012-08-28T17:30:56.197 に答える