2010-08-19 48 views
33

Tôi đang cố triển khai Đăng ký người dùng cho ứng dụng Django của mình. Cuốn sách tôi đọc đề cập đến UserCreationForm nhưng tôi không chỉ cần tên, mật khẩu và địa chỉ email. Tôi có thể thực hiện đối tượng người dùng của riêng tôi và sử dụng ModelForm tôi nghĩ, nhưng sau đó tôi bị mất trên một số tiện ích django để xác thực. Cuối cùng, tôi đã đọc một số thông tin về UserProfiles bổ sung cho những người dùng mà tôi đoán, vì vậy tôi nghĩ rằng tôi cần sự kết hợp của tất cả những thứ này. Đây là những gì tôi có cho đến nay.Cách tốt nhất để đăng ký người dùng ở Django

Chế độ xem - điều này đủ đơn giản. Tất cả những gì tôi muốn làm ở đây là tạo biểu mẫu của tôi và lưu người dùng

def main(request): 
    rform1 = forms.RegisterForm1() 
    rform2 = forms.RegisterForm2() 
    return render_to_response("authentication/index.html", {'form1': rform1, 'form2':rform2}) 

def register(request): 
    if request.method == 'POST': 
     rform1 = forms.RegisterForm1(request.POST) 
     rform2 = forms.RegisterForm2(request.POST) 
     if rform1.is_valid() and rform2.is_valid(): 
      new_user = rform1.save() 
      return HttpResponseRedirect("/register-success/") 
    return render_to_response("authentication/index.html", {'form1': rform1,'form2':rform2}) 

Biểu mẫu - đây là biểu mẫu của tôi để tạo người dùng. Hoặc bắt đầu ít nhất là

class RegisterForm1(forms.ModelForm): 
    class Meta: 
     model = User 

class RegisterForm2(forms.ModelForm): 
    class Meta: 
     model = UserProfile 

Mẫu - đây là UserProfile mà tôi muốn bổ sung Người dùng.

class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    phonenumber = PhoneNumberField() 

Có rõ ràng những gì tôi đang cố gắng làm không? Tôi đang đi đúng hướng

Trả lời

29

Tạo hai mẫu mô hình, một cho mẫu User và một cho mô hình UserProfile.

class UserForm(django.forms.ModelForm): 
    class Meta: 
     model = User 

class UserProfileForm(django.forms.ModelForm): 
    class Meta: 
     model = UserProfile 
     exclude = ['user'] 

Cung cấp cho họ tiền tố và hiển thị chúng cùng nhau trong cùng một phần tử biểu mẫu HTML. Trong chế độ xem, hãy kiểm tra xem cả hai có hợp lệ hay không trước khi bạn lưu Người dùng và sau đó là UserProfile.

def register(request): 
    if request.method == 'POST': 
     uf = UserForm(request.POST, prefix='user') 
     upf = UserProfileForm(request.POST, prefix='userprofile') 
     if uf.is_valid() * upf.is_valid(): 
      user = uf.save() 
      userprofile = upf.save(commit=False) 
      userprofile.user = user 
      userprofile.save() 
      return django.http.HttpResponseRedirect(…something…) 
    else: 
     uf = UserForm(prefix='user') 
     upf = UserProfileForm(prefix='userprofile') 
    return django.shortcuts.render_to_response('register.html', 
               dict(userform=uf, 
                userprofileform=upf), 
               context_instance=django.template.RequestContext(request)) 

Trong register.html:

<form method="POST" action=""> 
    {% csrf_token %} 
    {{userform}} 
    {{userprofileform}} 
    <input type="submit"> 
</form> 
+0

tôi sửa mã của tôi. Tôi nghĩ tôi đang tiến gần hơn. Cảm ơn! – JPC

22

Tôi đã chỉ nhìn vào điều này, và phát hiện ra rằng Django có một hình thức sáng tạo người dùng rất đơn giản built-in mới, mà bạn có thể sử dụng nếu bạn muốn đăng ký đơn giản - không có tùy chọn, ví dụ, lưu địa chỉ email và xác nhận địa chỉ email, vì vậy nó sẽ không hoạt động cho trường hợp sử dụng của OP, nhưng đăng nó ở đây trong trường hợp khác đi qua câu hỏi này như tôi đã làm, và đang tìm kiếm thứ gì đó đơn giản.

Nếu bạn chỉ muốn mọi người có thể lựa chọn một tên người dùng và mật khẩu, sau đó built-in sẽ làm mọi thứ cho bạn, trong đó có xác nhận và tiết kiệm cho người dùng mới:

from django.views.generic.edit import CreateView 
from django.contrib.auth.forms import UserCreationForm 

urlpatterns = patterns('', 
    url('^register/', CreateView.as_view(
      template_name='register.html', 
      form_class=UserCreationForm, 
      success_url='/' 
    )), 
    url('^accounts/', include('django.contrib.auth.urls')), 

    # rest of your URLs as normal 
) 

Vì vậy, các chỉ điều bạn phải làm cho mình là tạo register.html ...

Thông tin thêm ở đây: http://www.obeythetestinggoat.com/using-the-built-in-views-and-forms-for-new-user-registration-in-django.html

+0

Bất kỳ tài nguyên nào về cách tạo register.html? – Tunisia

+0

@Tunisia jsut tạo một mẫu và hiển thị 'biểu mẫu' trên nó, giống như ví dụ về mẫu đăng nhập trong tài liệu. –

Các vấn đề liên quan