2012-07-02 20 views
8

Kullanıcı girişini kullanarak Django'daki uygulamam için yeni kullanıcılar oluşturmak/eklemek istiyorum. Django tarafından sağlanan varsayılan girişi kullanıyorum. Kullanıcıları varsayılan girişe eklemeye çalışıyorum. https://docs.djangoproject.com/en/dev/topics/auth/ örnek:Kullanıcı Girdisini Django'da Oluşturmak İçin Giriş Yapıyor

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

kullanıcı adı ve şifre geçer. Ama bunun kullanıcı girişi ile olmasını istiyorum. Bunu nasıl yaparım?

bazı rehberlik Need

...

Bu çalıştı ama işe görünmüyor:

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

Bu örnek bariz hatalar var gönderin. Bu görüş ile elde etmek istediğiniz mantık nedir? – jdi

+0

Yeni bir kullanıcı eklemeye çalışıyorum ve ekledikten sonra onu ana sayfaya gönderirseniz kullanıcı sayfasına geri göndermek için onu geri gönderin ... – lakesh

+0

Bu bölümü anlıyorum, ancak kimlik doğrulama ile neyi başarmaya çalışıyorsunuz? Var olmayan bir 'user' nesnesini kaydediyorsunuz ve o zaman varolmayan değişkenleri doğrulıyorsunuz. – jdi

cevap

24

ilk şey bir ModelForm oluşturmaktır. Alanlara göre doğrulamaları işler.

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}) 

Eğer onun bir POST isteği, biz POST değerlerinden bir UserForm oluşturmak. Sonra geçerli bir form olup olmadığını kontrol ederiz. Öyleyse, kullanıcıyı oluştururuz, aksi takdirde formu hatalarla birlikte göndeririz. onun değil bir POST isteği, biz temiz bir formu

şablon

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

Bu cevap benim için yararlıydı, ancak eksik. Form şablonu CSRF belirteci kodunu ve bir gönder düğmesi içermelidir. Sadece devam edip bunları düzenleyeceğim. Bu formun varsayılan olarak güzel olmayacağını, ancak çalışacağını unutmayın. İyi görünmesini sağlamak, soru kapsamında değildir. – steveha

+0

Daha fazla bilgiye buradan ulaşabilirsiniz: http://www.tangowithdjango.com/book/chapters/login.html – steveha

0

bir formu kullanın. Hava burada kodlama:

forms.py

from django.contrib.auth.models import User 

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

A ModelForm otomatik formu kapalı sağladığınız bir model oluşturur: Yapmanız gereken

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

bu, kullanıcıyı varsayılan sağa eklemez. Bu, yeni bir model oluşturmaya benzer midir? eğer yanılıyorsam, beni düzeltin ... – lakesh

+0

@lakesh: Naddiseo sizin görüşünüzde bir form kullanmayı önerir, fakat bu cevap çok belirsizdir, bu yüzden bu konuda net olmadığınıza şaşırmam. Onun yeni bir model değil. – jdi

İlgili konular