Django

2012-07-02 4 views
8

में उपयोगकर्ता बनाने के लिए उपयोगकर्ता इनपुट लेना मैं उपयोगकर्ता इनपुट का उपयोग कर Django में अपने ऐप में नए उपयोगकर्ताओं को बनाना/जोड़ना चाहता हूं। मैं django द्वारा प्रदान किया गया डिफ़ॉल्ट लॉगिन का उपयोग कर रहा हूँ। मैं उपयोगकर्ताओं को डिफ़ॉल्ट लॉगिन में जोड़ने की कोशिश कर रहा हूं। https://docs.djangoproject.com/en/dev/topics/auth/ में उदाहरण:Django

>>> from django.contrib.auth.models import User 
>>> user = User.objects.create_user('john', '[email protected]', 'john password') 

यूज़रनेम और पासवर्ड से गुजरता है। लेकिन मैं इसे उपयोगकर्ता इनपुट के साथ करना चाहता हूं। मैं यह कैसे करु?

कुछ मार्गदर्शन की आवश्यकता है ...

मैं इस कोशिश की, लेकिन यह काम करने के लिए प्रतीत नहीं होता:

def lexusadduser(request): 
    """ 
    add user 
    """ 
    if request.method == "POST": 
     user.save() 

     auth_user = authenticate(username=user.username,password=user.password) 

     if auth_user is not None: 
      lexusmain(request) 
     else: 
      return render('adduser.html') 
+0

यह उदाहरण स्पष्ट त्रुटियाँ हैं भेजें। आप इस दृष्टिकोण के साथ क्या तर्क प्राप्त करना चाहते हैं? – jdi

+0

मैं एक नया उपयोगकर्ता जोड़ने की कोशिश कर रहा हूं और यदि उसे मुख्य पृष्ठ पर भेज दिया गया है तो उसे वापस उपयोगकर्ता पृष्ठ जोड़ने के लिए भेजें ... – lakesh

+0

मैं उस हिस्से को समझता हूं, लेकिन आप प्रमाणीकरण के साथ क्या करने की कोशिश कर रहे हैं? आप एक 'उपयोगकर्ता' ऑब्जेक्ट को सहेज रहे हैं जो मौजूद नहीं है, और फिर आप उस अस्तित्वहीन चर को प्रमाणित कर रहे हैं। – jdi

उत्तर

24

पहली बात तुम क्या करने की जरूरत है एक ModelForm पैदा करते हैं। यह फ़ील्ड के आधार पर सत्यापन को संभालता है।

views.py

from forms import UserForm 
from django.contrib.auth import login 
from django.http import HttpResponseRedirect 

def lexusadduser(request): 
    if request.method == "POST": 
     form = UserForm(request.POST) 
     if form.is_valid(): 
      new_user = User.objects.create_user(**form.cleaned_data) 
      login(new_user) 
      # redirect, or however you want to get to the main view 
      return HttpResponseRedirect('main.html') 
    else: 
     form = UserForm() 

    return render(request, 'adduser.html', {'form': form}) 

तो इसकी एक पोस्ट अनुरोध, हम पोस्ट मूल्यों से एक UserForm पैदा करते हैं। फिर हम जांचते हैं कि यह एक वैध रूप है या नहीं। यदि ऐसा है, तो हम उपयोगकर्ता बनाते हैं, अन्यथा हम त्रुटियों के साथ फ़ॉर्म वापस कर देते हैं। इसकी नहीं एक पोस्ट अनुरोध है, तो हम एक स्वच्छ रूप

टेम्पलेट

<form method="post" action=""> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Create new user account" /> 
</form> 
+0

यह उत्तर मेरे लिए उपयोगी था, लेकिन यह अपूर्ण है। फॉर्म टेम्पलेट में सीएसआरएफ टोकन कोड और सबमिट बटन शामिल होना चाहिए। मैं बस आगे बढ़ने जा रहा हूं और उन्हें संपादित कर रहा हूं। ध्यान दें कि यह फॉर्म डिफ़ॉल्ट रूप से सुंदर नहीं होगा, लेकिन काम करेगा। इसे अच्छे लगाना सवाल के दायरे में नहीं है। – steveha

+0

अधिक जानकारी यहां उपलब्ध है: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

एक फार्म का उपयोग करें। एयर यहाँ कोडिंग:

forms.py

from django.contrib.auth.models import User 

class UserForm(ModelForm): 
    class Meta: 
     model = User 
     fields = ('username', 'email', 'password') 

एक ModelForm स्वचालित रूप से अपने फॉर्म में नहीं एक मॉडल उपलब्ध कराने बनाता है:

class SignupForm(forms.Form): 
    username = forms.CharField() 
    email = forms.EmailField() 
    password = forms.CharField(widget=forms.PasswordInput) 
+0

यह उपयोगकर्ता को डिफ़ॉल्ट अधिकार में नहीं जोड़ता है। यह एक नया मॉडल सही बनाने जैसा है? अगर मैं गलत हूं, तो मुझे सही करें ... – lakesh

+0

@lakesh: Naddiseo आपके विचार के भीतर एक फॉर्म का उपयोग करने का सुझाव दे रहा है, लेकिन यह जवाब बेहद अस्पष्ट है इसलिए मुझे आश्चर्य नहीं है कि आप इस पर स्पष्ट नहीं हैं। यह एक नया मॉडल नहीं है। – jdi