로 볼 수 데이터를 전송하지 않습니다 해당 요청을 트리거 뷰 foo
:장고 self.client.post 내가 유효한 데이터와 <code>POST</code> 요청이 200 상태 코드를 가진 HTML 응답을 반환 확인하는 간단한 테스트 케이스를 장식
@enter_exit_tracer
함수를/입력 종료 추적하는 장식이
logger = logging.getLogger(__name__)
# decorator to trace enter and exit events
enter_exit_tracer = enter_exit_Tracer(logger)
@enter_exit_tracer
def foo(request):
if request.method == 'POST':
#
print('request.POST:', request.POST)
#
# some stuff
이 장식자를 foo
함수에 추가하면 self.client.post
을 통해 전송 된 POST
데이터는 실제로 foo
으로 전달되지 않습니다. 그들은 테스트 요청에서 누락 - 나의 테스트가 실패 :
DEBUG: [] Enter foo.
request.POST: <QueryDict: {}>
ERROR: Invalid form
F
======================================================================
FAIL: test_valid_post_request (textstat.tests.PostRequestTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/user/Pro/myapp/tests.py", line 111, in test_valid_post_request
self.assertEqual(response.status_code, 200)
AssertionError: 400 != 200
----------------------------------------------------------------------
Ran 1 test in 0.018s
FAILED (failures=1)
우리는
request.POST: <QueryDict: {}>
을보고 결국이
ERROR: Invalid form
에 연결됩니다.
동시에 내가 비슷한 POST
요청을하지만 웹 브라우저를 통해 모든 것이 잘 작동합니다. 양식에 데이터가 채워지면 웹 페이지가 정상적으로 렌더링되고 @enter_exit_tracer
은 예상대로 로깅을 수행합니다.
request.POST: <QueryDict: {'text': ['bar']}>
.
----------------------------------------------------------------------
Ran 1 test in 0.007s
OK
질문 : 다음 request.POST
데이터가 장식으로보기에 전달되지 않는 이유
- 을
나는 그 모든도 OK 작동 테스트를 통과
@enter_exit_tracer
장식을 주석 경우self.client.post
요청의 경우? - 데코레이터에 이상이있는 경우 - 웹 요청이 정상적으로 작동하는 이유는 무엇입니까?
- 데코레이터를 유지하고
self.client.post
을보기로 전달할 수 있습니까?
로깅이 클라이언트와 함께 호출 되나요? –
예, 로거는 뷰 데코레이터에서 초기화 될 때 클라이언트와 함께 호출됩니다. 예를 들어,'self.client.post'에는 출력 로그에'DEBUG : Enter foo.'가 있습니다. –
실제로 질문에있는 코드는 데코레이터의 게시 된 코드에서 args [-1] else '[]''의 'session_key'가 있으면 'session_string = args [-1]'을 제거하여 지나치게 단순화했습니다. 코드의이 줄이 pb의 원인이 될 수 없다고 생각했습니다. 그리고 나는 틀렸어.이 줄은 돼지의 근원 이었어. 아래 내 대답에 대한 자세한 내용. –