Установите метод RequestFactory () Django равным 'POST' - PullRequest
0 голосов
/ 30 января 2020

Пример функции представления:

def example_view(request):
    if request.method == "POST":

        print(request.session['Key'])

        return HttpResponse("Success")

Тестовый пример для проверки представления:

from django.contrib.sessions.backends.db import SessionStore
from django.test import RequestFactory, TestCase
from website.views import example_view

class ExampleTestCase(TestCase):

    def test_example(self):

        # Create request and session
        request = RequestFactory()
        request.session = SessionStore()

        request.session['Key'] = "Value"

        response = example_view(request)

        self.assertEquals(response.status_code, 200)

Файл urls.py на тот случай, если кто-нибудь попросит его:

urlpatterns = [    
    path('example', views.example_view, name="example_view"),
]

Ответ об ошибке:

AttributeError: 'RequestFactory' object has no attribute 'method'

Без:

if request.method == 'POST':

это работает как ожидалось.

Как мне установить request.method равным post?

1 Ответ

2 голосов
/ 30 января 2020

RequestFactory дает вам фабрику, а не запрос, чтобы получить запрос, вы должны позвонить на фабрику, как если бы вы использовали Django клиент тестирования:

factory = RequestFactory()
request = factory.post('/your/view/url')
response = example_view(request)
...