5

セッションが機能していないようです。Django は、HttpRequest オブジェクトには「セッション」と呼ばれる属性がないことを訴えています。ドキュメントには、ミドルウェアが有効になっており、インストールされたアプリで django.contrib.sessions があれば、問題ないと明確に述べられています。単体テストを使用してこのエラーが発生しています。

私のviews.pyで:

def home_page(request):
    response = render(request, 'home.html', {'message_text' : request.session.get('message_text', ''),
'ip_address'    :   request.session.get('ip_address', ''),
'port_number'   :   request.session.get('port_number', ''),
'command_text'  :   request.session.get('command_text', ''),})

    request.session['message_text'] = ''

    return response

取得しようとしているセッション値は、view.py の別の場所にあるフォーム ポスト メソッドで設定しようとしている値です。

また、これらは新しいプロジェクトではデフォルトで有効になっているとも述べています。そこで、新しく新しい django プロジェクトを作成し、コンソールでセッション属性を確認しました。これがまさに私がやったことです:

(django1.5)Python $ django-admin.py startproject testing
(django1.5)Python $ cd testing/
(django1.5)testing $ python manage.py shell
Python 2.7.3 (v2.7.3:70274d53c1dd, Apr  9 2012, 20:52:43) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.http import HttpRequest
>>> r = HttpRequest()
>>> r.session
Traceback (most recent call last):
  File "<console>", line 1, in <module>
AttributeError: 'HttpRequest' object has no attribute 'session'
>>>

私は何が欠けていますか??

更新: これは単体テストでテストする場合にのみ発生します。例外を引き起こすテストは次のとおりです。

def test_home_page_returns_correct_html(self):
        request = HttpRequest()
        response = home_page(request)
        expected_html = render_to_string('home.html')
        self.assertEqual(response.content, expected_html)
4

3 に答える 3

1

解決策は、ビュー関数に渡す前に、HttpRequest オブジェクトでセッション属性を自分で作成することです。これは、Django 単体テストでセッション オブジェクトを使用するの回答にあるように、HttpRequest ファクトリが単体テストでミドルウェアをサポートしていないためです。

于 2013-05-31T21:53:22.830 に答える
0

テスト目的では、実際にテストしたくないコード (セッション ミドルウェアなど) を使用せずに、ビューまたは別の分離された部分をテストするために必要な動作を生成するMock オブジェクトを使用するだけで十分な場合があります。

于 2014-12-07T17:23:04.540 に答える