Django "लॉगिन () बिल्कुल 1 तर्क (2 दिया)" त्रुटि लेता है


86

मैं django.contrib.auth.login का उपयोग करके सत्र में उपयोगकर्ता की आईडी संग्रहीत करने का प्रयास कर रहा हूं। लेकिन यह उम्मीद के मुताबिक काम नहीं कर रहा है।

मुझे त्रुटि लॉग इन हो रही है () दिए गए ठीक 1 तर्क (2 दिए गए)

लॉगिन (उपयोगकर्ता) के साथ मुझे एट्रीब्यूट मिल रहा है / लॉगिन / उपयोगकर्ता की वस्तु में कोई विशेषता नहीं है 'विधि'

मैं थोड़ा संशोधित उदाहरण फॉर्म का उपयोग कर रहा हूं http://docs.djangoproject.com/en/dev/topics/auth/ :

from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login

def login(request):
    msg = []
    if request.method == 'POST':
        username = request.POST['u']
        password = request.POST['p']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                msg.append("login successful")
            else:
                msg.append("disabled account")
        else:
            msg.append("invalid login")
    return render_to_response('login.html', {'errors': msg})

login.html के बारे में कुछ खास नहीं है:

<html>
<head>
    <title></title>
</head>
<body>
    <form action="/login/" method="post">
        Login:&nbsp; <input type="text" name="u">
    <br/>
        Password:&nbsp; <input type="password" name="p">
        <input type="submit" value="Login">
    </form>
    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

</body>
</html>

क्या किसी को यह पता है कि लॉगिन () काम कैसे करना है।


4
काम करेंगे यदि आप अपना दृष्टिकोण बदल देते हैं
इवगेनी

बस सवाल और जवाब की मुझे तलाश थी। Conjts vs RequestContexts का उपयोग करने और csrf_tokens को छोड़ने के साथ, django में लॉगिन करने और चलाने की कोशिश करते समय मैं कई गलतियों में से एक था।
चकमाश

यहाँ आप Django उपयोगकर्ताओं के बारे में एक ट्यूटोरियल पा सकते हैं lowcoupling.com/post/71289666862/django-the-user-tutorial , एक GitHub प्रोजेक्ट भी है जिसे आप क्लोन कर सकते हैं और जांचें
lowcoupling 28'13

जवाबों:


236

आपका दृश्य फ़ंक्शन भी कहा जाता है login, और login(request, user)इस फ़ंक्शन को पुनरावर्ती रूप से कॉल करने के प्रयास के रूप में व्याख्या की जा रही है।

def login(request):
    ...
    login(request, user)

इससे बचने के लिए अपने दृश्य फ़ंक्शन का नाम बदलें या कुछ अलग तरीके loginसे से देखें django.contrib.auth। उदाहरण के लिए आप लॉगिन फ़ंक्शन का नाम बदलने के लिए आयात बदल सकते हैं:

from django.contrib.auth import login as auth_login

...
auth_login(request, user)

वाह, मैं Django के स्रोत कोड के माध्यम से ब्राउज़ कर रहा था, और उपलब्ध हर पुराने संस्करण की कोशिश कर रहा था, सोच रहा था कि मैं पागल हो रहा हूं
Mojimi

16

एक संभावित फिक्स:

from django.contrib import auth

def login(request):
    # ....
    auth.login(request, user)
    # ...

अब आपका दृश्य नाम django के दृश्य नाम को अधिलेखित नहीं करता है।


9

दूसरा रास्ता:

from django.contrib.auth import login as auth_login

auth_login(request, user)इसके बजाय कॉल करें login(request, user)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.