Django में उपयोगकर्ता कैसे बनाएं?


92

मैं निम्नलिखित कोड द्वारा एक Django परियोजना में एक नया उपयोगकर्ता बनाने की कोशिश कर रहा हूं, लेकिन हाइलाइट की गई पंक्ति एक अपवाद को निकालती है।

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed

    **user = User.objects.create_user(userName, userMail, userPass)**
    user.save()

    return render_to_response('home.html', context_instance=RequestContext(request))

कोई मदद?


6
अपवाद किस तरह का है?
सेसर

2
@ user1364223 अपवाद ट्रेसबैक?
जोसफ विक्टर ज़ममिट

मुझे लगता है कि User.objects.create को काम करना चाहिए। docs.djangoproject.com/en/1.4/ref/models/querysets/#create
iJK

जवाबों:


189

Django में उपयोगकर्ता बनाने का सही तरीका create_user फ़ंक्शन का उपयोग करना है। यह पासवर्ड आदि की हैशिंग को संभाल लेगा।

from django.contrib.auth.models import User
user = User.objects.create_user(username='john',
                                 email='jlennon@beatles.com',
                                 password='glass onion')

क्या यह पासवर्ड हैश करेगा?
15

8
@ एमपीआरपी - हाँ। पूर्ण प्रलेखन के लिए, यहां जाएं docs.djangoproject.com/en/1.9/ref/contrib/auth/…
keithhackbarth

2
मैं इसे कैसे / कहां से चलाऊं? अगर मैं सिर्फ उस कोड को चलाता हूं तो मुझे django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.EDIT मिलता है : यह काम करता हैDJANGO_SETTINGS_MODULE=app.settings.dev python manage.py shell < register-user.py
citynorman

4
अधिक आधुनिक Django के लिए एक अद्यतन के रूप में, का उपयोग करें from django.contrib.auth import get_user_modelऔरuser = get_user_model().objects.create_user(...
मार्क Chackerian

@keithhackbarth किस फाइल में मुझे django फ़ाइल संरचना में यह कोड डालना चाहिए?
हैंगऑन

23

क्या आपने पुष्टि की है कि आप वास्तविक मूल्यों से गुजर रहे हैं और नहीं None?

from django.shortcuts import render

def createUser(request):
    userName = request.REQUEST.get('username', None)
    userPass = request.REQUEST.get('password', None)
    userMail = request.REQUEST.get('email', None)

    # TODO: check if already existed
    if userName and userPass and userMail:
       u,created = User.objects.get_or_create(userName, userMail)
       if created:
          # user was created
          # set the password here
       else:
          # user was retrieved
    else:
       # request was empty

    return render(request,'home.html')

1
यदि वे कोई भी नहीं हैं .is_valid () विधि विफल?
एमपी 3

11

के साथ थोक उपयोगकर्ता निर्माण set_password

मैं आपको कई परीक्षण उपयोगकर्ता बना रहा हूं, bulk_createबहुत तेज है, लेकिन हम इसका उपयोग नहीं कर सकते create_user

set_password हैशेड पासवर्ड जनरेट करने का एक और तरीका है:

def users_iterator():
    for i in range(nusers):
        is_superuser = (i == 0)
        user = User(
            first_name='First' + str(i),
            is_staff=is_superuser,
            is_superuser=is_superuser,
            last_name='Last' + str(i),
            username='user' + str(i),
        )
        user.set_password('asdfqwer')
        yield user

class Command(BaseCommand):
    def handle(self, **options):
        User.objects.bulk_create(iter(users_iterator()))

पासवर्ड हैशिंग के बारे में विशिष्ट प्रश्न: Django में पासवर्ड एन्क्रिप्ट करने के लिए Bcrypt का उपयोग कैसे करें

Django 1.9 में परीक्षण किया गया।


1
स्वीकार किए जाते हैं की तुलना में बेहतर; यदि आप प्रोग्रामेटिक रूप से उस उपयोगकर्ता को जोड़ने पर विचार कर रहे हैं जिसे आप संभवतः अधिक उपयोगों के लिए कुछ स्वचालित करते हैं।
सोलोमोइर लेनार्ट

5

यदि आप सामान्य रूप से उपयोगकर्ता बनाते हैं, तो आप लॉगिन नहीं कर पाएंगे क्योंकि पासवर्ड निर्माण विधि भिन्न हो सकती है। आप उसके लिए डिफ़ॉल्ट साइनअप फ़ॉर्म का उपयोग कर सकते हैं

from django.contrib.auth.forms import UserCreationForm

आप वह भी बढ़ा सकते हैं

from django.contrib.auth.forms import UserCreationForm

class UserForm(UserCreationForm):
    mobile = forms.CharField(max_length=15, min_length=10)
    email = forms.EmailField(required=True)
    class Meta:
        model = User
        fields = ['username', 'password', 'first_name', 'last_name', 'email', 'mobile' ]

तब देखने में इस वर्ग का उपयोग करें

class UserCreate(CreateView):
    form_class = UserForm
    template_name = 'registration/signup.html'
    success_url = reverse_lazy('list')

    def form_valid(self, form):
        user = form.save()

1
मुझे लगता है कि फॉर्म बनाते समय UserForm बनाते समय एक गलती होती है। ModelForm। मुझे लगता है कि इसके बजाय UserCreationForm का विस्तार करना चाहिए
vladimir.gorea

इसके अलावा, UserFreate क्लास व्यू के फॉर्म_क्लास को UserForm नहीं होना चाहिए?
vladimir.gorea
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.