2015-08-29 2 views
0

Я хочу загрузить файл на веб-сервер, для которого я написал простой клиентский файл, подобный этому.Python Requests 403 Ошибка

client.py

import requests 
def main(): 
    url_link = "http://localhost:8000/Home/UploadFile/" 
    fileObj= open('VOI-0204.zip', 'rb') 
    r=requests.post(url_link, files={'docfile': fileObj}) 
    print r.text 
if __name__ == '__main__': 
    main() 

Джанго URL картографа объявлен следующим образом:

urls.py

url(r'^Home/UploadFile/$', 'WebApp.views.uploadZip', name='uploadZip'), 

Everytime Я побежал client.py он дает мне 403 ошибка как это.

[29/Aug/2015 10:28:02] "POST /Home/UploadFile/ HTTP/1.1" 403 2282 

Но если изменить URL_LINK в файле клиента, как этот

url_link = "http://localhost:8000/Home/UploadFile" 

Теперь он показывает ошибку сервера [500], как этот

[29/Aug/2015 10:33:32] "POST /Home/UploadFile HTTP/1.1" 500 63766 

Любые идеи ??

+0

В этом нет аутентификации. В самом начале я просто хочу посмотреть, какие данные я получаю. Но там он сломан, и я даже не могу отлаживать. –

ответ

2

Django ожидает токен CSRF для каждого запроса POST. Украсьте свой вид декоратором csrf_exempt, чтобы этот сценарий успешно работал. Проверьте this. Хотя я бы не предложил пойти по этому пути. Значки CSRF предназначены для вашей защиты.

from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def upload_zip(request): 
... 
+0

Спасибо. Это сработало. –

0

Вам необходимо добавить маркер CSRF на ваш взгляд, добавить {% csrf_token%}, если вы используете форму. Если вам нужно выполнить запрос ajax, вам необходимо реализовать код javascript. Официальный документ Django содержит некоторые хорошие статьи об этом, вы можете увидеть https://docs.djangoproject.com/en/1.7/ref/contrib/csrf/