मेरा लक्ष्य: किसी उपयोगकर्ता को लॉग इन करने के लिए username/password पोस्ट करके टेस्ट क्लाइंट के साथ loging URL तक पहुंचना।

मैं Django 2.1.4 . में बिल्ट-इन contrib.auth.login का उपयोग करता हूं

Test.py :

from django.contrib.auth.models import User
from django.contrib import auth
from django.test import Client
from django.urls import reverse

def test_login_valid():
    U = {'username': 'bob','password': 'bobbobbob'}
    u = User.objects.create(**U)
    C = Client()
    r = C.post(reverse('login'), U)
    su = auth.get_user(r.wsgi_request)

    print(u)
    print(r)
    print(su)
    print(su.is_authenticated)
    print(r.wsgi_request.user)
    print(r.wsgi_request.user.is_authenticated)

चल रहा परीक्षण:

pytest --capture=no a14n/tests.py::test_login_valid
(…)
bob
<TemplateResponse status_code=200, "text/html; charset=utf-8">
AnonymousUser
False
AnonymousUser
False
.

पंजीकरण/लॉगिन.एचटीएमएल:

<form action="{% url 'login' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

Urls.py:

from a14n import views as a14n_views

urlpatterns = [
    path('signup/', a14n_views.signup, name='signup'),
    path('', include('django.contrib.auth.urls')),
]

दूसरी ओर एक Django खोल में यह एकदम सही काम करता है:

>>> from django.contrib.auth.models import User
>>> from django.test import Client
>>> from django.contrib import auth
>>> from django.urls import reverse
>>> U = {'username': 'bob','password': 'bobbobbob'}
>>> C = Client()
>>> r = C.post(reverse('login'), U)
>>> u = User.objects.create(**U)
>>> su = auth.get_user(r.wsgi_request)
>>> print(u)
bob
>>> print(r)
<HttpResponseRedirect status_code=302, "text/html; charset=utf-8", url="/accounts/profile/">
>>> print(su)
bob
>>> print(r.wsgi_request.user)
bob
>>> print(r.wsgi_request.user.is_authenticated)
True
>>> print(su.is_authenticated)
True

परीक्षण प्रतिक्रिया में मा को एक TemplateResponse वस्तु और django खोल एक HttpResponseRedirect क्यों देता है?

वैसे भी, पुनर्निर्देशित या नहीं, परीक्षण उपयोगकर्ता को लॉग इन क्यों नहीं कर सकता है?

धन्यवाद।

0
freezed 9 पद 2018, 01:25

1 उत्तर

सबसे बढ़िया उत्तर

मुझे समाधान मिला!

अपने परीक्षण में मैं u = User.objects.create(**U) का उपयोग करता हूं जो एक स्पष्ट पासवर्ड के साथ एक user बनाता है, फिर मेरा विचार कभी भी प्रमाणित नहीं हो सकता क्योंकि login() एक हैशेड पासवर्ड की अपेक्षा करता है।

u = User.objects.create_user(**U) के साथ, परीक्षण उपयोगकर्ता के लिए पासवर्ड हैश किया गया है और परीक्षण कार्य कर रहा है।

उम्मीद है कि यह किसी की मदद करेगा :-)

1
freezed 9 पद 2018, 18:54