2016-08-02 25 views
0

我想使auth_user_model登錄,但我需要使用電子郵件和密碼登錄。所以我想我可以做到這一點,如果我可以在'用戶名'字段中保存電子郵件的價值。Django auth_user_model

class HeepooUser(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 

    phone = models.CharField(max_length=15, null=True) 
    allow_phone = models.BooleanField(default=False) 
    school = models.ForeignKey(School) 
    date_join = models.DateTimeField(auto_now_add=True) 


def register(request): 
    registered = False 

    if request.method == 'POST': 
     user_form = UserForm(request.POST) 
     profile_form = RegisterForm(request.POST) 

     if user_form.is_valid() and profile_form.is_valid(): 
      user = user_form.save(commit=False) 
      user.set_password(user.password) 
      user = user_form.save() 

      profile = profile_form.save(commit=False) 
      profile.user = user 
      profile = profile_form.save() 

      registered = True 
      return HttpResponseRedirect("/books/") 
     else: 
      return HttpResponse('Wrong access1') 

    else: 
     user_form = UserForm() 
     profile_form = RegisterForm() 

    return render(request, "register.html", { 
     'user_form': user_form, 
     'profile_form': profile_form, 
     'registered': registered, 
}) 

forms.py

class UserForm(forms.ModelForm): 
    email = forms.EmailField(max_length=50, required=True, 
         widget=forms.TextInput(attrs={'class':'form-control', }), 
) 
    password = forms.CharField(widget=forms.PasswordInput()) 
    class Meta: 
     model = User 
     fields = ('email', 'password',) 


class RegisterForm(forms.ModelForm): 
    class Meta: 
     model = HeepooUser 
     exclude = ('allow_phone', 'user',) 

Register.html

<form action="" method="post"> 
     {% csrf_token %} 
     {{ user_form.as_p }} 
     {{ profile_form.as_p }} 
     <input type="submit" value="Register"> 
    </form> 

能否請你幫我嗎? 謝謝!

回答

0

您可以在登錄表單中向用戶請求電子郵件而不是用戶名,然後爲該用戶生成一個用戶名,您可以使用他的電子郵件或名稱進行操作。編輯: 您只需要生成一個用戶名。假設您正在向用戶請求姓名和姓氏。我們來創建一個方法來生成它。

def generate_username(first_name, last_name): 
     username = '%s.%s' % (first_name.lower(), last_name.lower()) 
     username = '{:.29}'.format(username) 
     counter = User.objects.filter(first_name=first_name,last_name=last_name).count() 
     if counter > 0: 
      username += '%s' % (counter + 1) 
     return username 

然後你可以在你的視圖中使用它。

 user = user_form.save(commit=False) 
     user.set_password(user.password) 
     user.username = generate_username(first_name, last_name) 
     ..... 

如果您不想要求名字或姓氏,您也可以使用他的電子郵件生成用戶名。

+0

我添加了forms.py你能告訴我如何修改嗎? – MrKarl

+0

@MkKarl檢查它。 – levi