2012-03-13 2 views
0

Я использую Pinax, и я пытаюсь выполнить входной тест по проекту account, используя модуль requests.Поступило 403 Проверка CSRF не удалось при регистрации через запросы python

Я сделал это

def test001_login(self): 
    #cookies = {'csrftoken': 'a8356fd05b25fad7004994fd5da89596'} 
    r = requests.post(self.loginurl, data={'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True) 

    print r.status_code 
    print r.text 
    print r.cookies 

Cookie возвращается пустой !! С методом get я получаю файл cookie. Что вызывает эту проблему?

r.text результат:

<p>Reason given for failure:</p> 
    <pre> 
    No CSRF or session cookie. 
    </pre> 

    <p>In general, this can occur when there is a genuine Cross Site Request Forgery, or when 
    <a 
    href='http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf'>Django's 
    CSRF mechanism</a> has not been used correctly. For POST forms, you need to 
    ensure:</p> 

Я пытался держаться в cookies, но он все еще дал мне 403 ошибку.

ответ

2

Ваше сообщение не передает токен CSRF для входа. Работает ли эта работа:

r = requests.post(self.loginurl, data={'csrf_token': django.middleware.csrf.get_token(), 'username':self.username, 'password': self.password}, auth=(self.username, self.password),allow_redirects=True) 
+0

Спасибо. Я тоже это сделаю. Должен ли я импортировать вот так? 'from django.middleware import csrf' – CppLearner

+0

Да, это правильно. – Furbeenator

0

CSRF работает, добавляя в форму скрытое поле, содержащее различный токен, а затем проверяя его при отправке формы. Вы получаете эту ошибку, потому что вы не включили токен в сообщение. Вы можете обойти его или отключить, или использовать «правильные» единицы тестирования.

See the CSRF documentation.

Может быть стоит глядя Client, если вы делаете тест разработки на основе

Смежные вопросы