python - Django परीक्षण ढांचे में बेसिक HTTP एक्सेस प्रमाणीकरण का उपयोग करना




unit-testing http-authentication (4)

Python3 के लिए, आप अपने username:password स्ट्रिंग को आधार-एनकोड कर सकते username:password :

base64.b64encode(b'username:password')

यह बाइट देता है, इसलिए आपको इसे ASCII स्ट्रिंग में .decode('ascii') साथ स्थानांतरित करने की आवश्यकता है:

पूरा उदाहरण:

import base64

from django.test import TestCase


def test_authorized(self):
    headers = {
        'HTTP_AUTHORIZATION': 'Basic ' + base64.b64encode(b'username:password').decode("ascii")
    }
    response = self.client.get('/', **headers)
    self.assertEqual(response.status_code, 200)

मेरे कुछ Django के विचारों के लिए मैंने एक डेकोरेटर बनाया है जो बेसिक HTTP एक्सेस ऑथेंटिकेशन करता है। हालांकि, Django में परीक्षण मामलों को लिखते समय, मुझे यह देखने के लिए कैसे प्रमाणीकृत करना है, यह जानने में थोड़ा समय लगा। यहाँ है कि मैं यह कैसे किया। मुझे आशा है कि किसी को यह उपयोगी लगता है।


अपने Django TestCase में आप अपने HTTP बेसिक क्रेडेंशियल को शामिल करने के लिए क्लाइंट डिफॉल्ट्स को अपडेट कर सकते हैं।

import base64
from django.test import TestCase

class TestMyStuff(TestCase):

    def setUp(self):
        credentials = base64.b64encode('username:password')
        self.client.defaults['HTTP_AUTHORIZATION'] = 'Basic ' + credentials

मान लें कि मेरे पास एक लॉगिन फ़ॉर्म है, मैं परीक्षण रूपरेखा के माध्यम से लॉगिन करने के लिए निम्न तकनीक का उपयोग करता हूं:

    client = Client()
    client.post('/login/', {'username': 'john.smith', 'password': 'secret'})

मैं client को अपने अन्य परीक्षणों में इधर-उधर करता हूं क्योंकि यह पहले से ही प्रमाणित है। इस पोस्ट पर आपका क्या सवाल है?


यहाँ है कि मैंने यह कैसे किया:

from django.test import Client
import base64
auth_headers = {
    'HTTP_AUTHORIZATION': 'Basic ' + base64.b64encode('username:password'),
}
c = Client()
response = c.get('/my-protected-url/', **auth_headers)

नोट: आपको एक उपयोगकर्ता बनाने की भी आवश्यकता होगी।







django-testing