2016-11-25 4 views
4

웹 응용 프로그램에서 allauth를 사용하여 가입 기능을 사용했습니다. socialaccount 가입에서 사용자 전자 메일, 비밀 번호, 성과 이름에서 수집됩니다. 로그인 양식에서 나는 단지 사용자로부터 전자 메일과 암호를 수집합니다.가입 후 allauth에서 사용자 프로필 필드를 사용자 지정하는 방법

일단 로그인하면 내 앱은 사용자가 자신이 원하는 프로필 페이지 (사용자가 추가 한 '기관'으로 새 필드 및 사용자 정의 된 필드 포함)로 리디렉션됩니다. .

django-allauth의 초보자로서의 질문입니다. 새 사용자 정의 필드를 내 사용자 프로필에 추가하는 방법과 사용자가 등록한 후에 해당 데이터를 업데이트하는 방법을 알고 싶습니다.

내가 무슨 짓을했는지 지금까지 :

settings.py

my_project에서
AUTH_USER_MODEL = 'auth.User' 

/models.py

profile_page.html에서
from django.db import models 
from django.contrib.auth.models import User 

class UserProfile(models.Model): 

    institution = models.TextField(max_length=254) 

{% extends 'base.html' %} 
{% block title %}Profile Page{%endblock title%} 

{% if user.is_authenticated %} 

{%block body%} 

    <div class="col-md-6" > 
     <div class="panel panel-default"> 
      <div class="panel-body"> 
       <h1 class="text-center"><b>MY ONTOLOGIES</b></h1><br> 
      </div> 
     </div> 
    </div> 
    <div class="col-md-6" > 
     <div class="panel panel-default"> 
      <div class="panel-body"> 
       <h1 class="text-center"><b>MY PROFILE</b></h1><br> 
        <div class="form-group"> 
         {% csrf_token %} 
         <label for="id_login" class="col-sm-2 control-label">E-mail:</label> 
         <div class="col-sm-10"> 
          <input type="email" id="asd" value="{{user.email}}" name="login" class="form-control" required /> 
         </div><br><br> 
         <label for="first_name" class="col-sm-2 control-label">First Name:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_first_name" value="{{user.first_name}}" name="first_name" class="form-control" required /> 
         </div><br><br> 
         <label for="last_name" class="col-sm-2 control-label">Last Name:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_last_name" value="{{user.last_name}}" name="last_name" class="form-control" required /> 
         </div><br><br> 
         <label for="institution" class="col-sm-2 control-label">Institution:</label> 
         <div class="col-sm-10"> 
          <input type="text" id="id_institution" value="{{user.institution}}" name="institution" class="form-control" placeholder="University/Company" required /> 
         </div><br><br> 
         <label for="id_password1" class="col-sm-2 control-label">New Password:</label> 
         <div class="col-sm-10"> 
          <input class="form-control" id="id_password1" name="password1" placeholder="New Password" type="password" /> 
         </div><br><br> 
         <label class="col-sm-2" for="id_password2">New Password (again):</label> 
         <div class="col-sm-10"> 
          <input class="form-control" id="id_password2" name="password2" placeholder="New Password (again)" type="password" /> 
         </div> 

        </div> 
      </div> 
     </div> 
    </div> 

{%endblock body%} 

{% endif %} 

에서 코드는 분명히 inco이다. 왜냐하면 나는 필드를 추가하고 요청할 때 필드를 올바르게 저장하는 방법을 찾지 못했기 때문이다. 감사합니다

답변

2

나는 두 단계로이 문제를 해결, 나는 내 질문에 게시 코드 리팩토링 포함 :

  1. 첫 번째 단계 (user_table하는 사용자 정의 필드 만들기)의

먼저 allauth 사용자와 관련된 모든 문제를 처리하는 CustomUser라는 응용 프로그램을 프로젝트에 추가했습니다.

CustomUser/models.py

from __future__ import unicode_literals 

from django.contrib.auth.models import AbstractUser 
from django.db import models 

class CustomUser(AbstractUser): 
    add_your_custom_fields_here 

에 settings.py

INSTALLED_APPS = [ 
    ... 
    'CustomUser.apps.CustomuserConfig', 
] 

AUTH_USER_MODEL = 'CustomUser.CustomUser' 

에서의 CustomUser/apps.py

from __future__ import unicode_literals 

from django.apps import AppConfig 


class CustomuserConfig(AppConfig): 
    name = 'CustomUser' 

은 사용자 테이블의 구성을 사용자 정의 필드 후

from django.contrib import admin 
from .models import CustomUser 

admin.site.register(CustomUser) 

admin.py CustomUser /, 당신은 이러한 필드를 추가 쉘에서 마이그레이션 명령을 실행해야합니다. 내 경우에는 작동하지 않았다. 그런 다음 데이터베이스를 플러시하고 다시 채울 필요가 있었다.

  1. 두 번째 단계는 새 사용자 테이블을 사용하여 updateform을 만드는 것입니다.

먼저 allauth의 User 클래스를 재정의해야합니다. 우리는 CustomUser 폴더에 form.py를 생성합니다 :

django에서 가져 오기 양식 에서.모델은 CustomUser/템플릿/profile.html에서 CustomUser이

class UpdateUserForm(forms.ModelForm): 
    class Meta: 
     model = CustomUser 
     # Add here the fields you want to be present in the update form 
     fields = ('first_name', 'last_name', 'institution') 

앱의 양식을 작성해야 가져올 수 있습니다. 그냥 프로필을 추가,

from django.shortcuts import render 
from .forms import UpdateUserForm 
from django.http import HttpResponseRedirect 
from django.views.generic import UpdateView 
from django.core.urlresolvers import reverse_lazy 

def profile(UpdateView): 
    if request.method == 'POST': 
     form = UpdateUserForm(request.POST) 
     if form.is_valid(): 
      return HttpResponseRedirect('/accounts/profile/') 
    else: 
     form = UpdateUserForm() 

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

class UserUpdate(UpdateView): 
     form_class = UpdateUserForm 
     template_name = 'profile.html' 
     success_url = reverse_lazy('profile') 

     #get object 
     def get_object(self, queryset=None): 
      return self.request.user 

마지막으로 당신의 profile.html 페이지의 동작 거 구성에있어 CustomUser/views.py

Update your data <br><br> 

<form action="." method="post"> 
    {% csrf_token %} 
    {{ form }} 
    <input type="submit" value="Submit" /> 
</form> 

: 내 경우에는 내가 원시적 하나를 만들어 봐라 urls.py 에 .html 중에서 페이지 :

from CustomUser import views 

url(r'^accounts/profile/$', views.UserUpdate.as_view() , name='profile'), 

가 누군가를 도움이되기를 바랍니다 ... 감사

관련 문제