"회원관리 3. 회원가입"의 두 판 사이의 차이

(새 문서: =계정생성기능= ===탬플릿 수정=== 적당한 곳에 아래 내용을 담는다.<syntaxhighlight lang="html+django"> <a href="{% url 'membership:signup' %}">회원가입</a>...)
 
 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
2번째 줄: 2번째 줄:
 
=계정생성기능=
 
=계정생성기능=
 
===탬플릿 수정===
 
===탬플릿 수정===
적당한 곳에 아래 내용을 담는다.<syntaxhighlight lang="html+django">
+
적당한 곳에 회원가입 링크를 담는다.<syntaxhighlight lang="html+django">
<a href="{% url 'membership:signup' %}">회원가입</a>
+
<a href="{% url 'account:signup' %}">회원가입</a>
 
</syntaxhighlight>
 
</syntaxhighlight>
 
===urls.py 수정===
 
===urls.py 수정===
20번째 줄: 20번째 줄:
 
from django.contrib.auth.models import User #그리고 제공되는 모델과...
 
from django.contrib.auth.models import User #그리고 제공되는 모델과...
  
class UserForm(UserCreationForm):
+
class User_create_form(UserCreationForm):
 
     class Meta:
 
     class Meta:
         model = User
+
         model = get_user_model()  # 설정된 커스텀모델
         fields = ["username","password1", "password2","email"]#모델의 어떤 부분을 기입할지
+
         fields = ["identifier",]  # password1,2 필드는 자동추가된다.
 
</syntaxhighlight>위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다.
 
</syntaxhighlight>위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다.
  
 
비밀번호가 2개인 것은 서로 대조해서 같은지 확인하기 위함.
 
비밀번호가 2개인 것은 서로 대조해서 같은지 확인하기 위함.
 
[한가지 의문인 것은...  모델에 들어갈 내용 뜯어고칠 순 없나?]
 
 
===view 작성===
 
===view 작성===
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
from django.contrib.auth import authenticate, login#로그인기능을 위해
+
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect#탬플릿으로 넘기기 위해
+
from django.shortcuts import render, redirect
from membership.forms import UserForm#폼 소환~
+
from .forms import User_create_form
  
 
def signup(request):
 
def signup(request):
    #글쓰기 view와 같이 입력과 보내기를 한 링크에서 관리한다.
 
 
     if request.method == "POST":
 
     if request.method == "POST":
         form = UserForm(request.POST)
+
         form = User_create_form(request.POST)
 
         if form.is_valid():
 
         if form.is_valid():
             form.save()#폼값을 불러오는 역할
+
             form.save() # 폼값을 불러와 저장.(회원객체가 생긴다.)
             username = form.cleaned_data.get('username')
+
             username = form.cleaned_data.get('identifier')
 
             raw_password = form.cleaned_data.get('password1')
 
             raw_password = form.cleaned_data.get('password1')
 
             user = authenticate(username=username, password=raw_password)
 
             user = authenticate(username=username, password=raw_password)
 
             login(request, user)
 
             login(request, user)
             return redirect('index')#회원가입 후 어디로 돌릴지. 보고 있던 페이지로는 안되나;;?
+
             return redirect('main') # 회원가입 후 어디로 돌릴지.
 
     else:
 
     else:
         form = UserForm()
+
         form = User_create_form()
     return render(request, 'membership/signup.html', {'form': form})
+
     return render(request, 'custum_account/signup.html', {'form': form})
 
</syntaxhighlight>한꺼번에 form을 저장하는 게 아니라 굳이 개별값을 얻고 싶을 땐 <code>form.cleaned_data.get('속성')</code>을 이용한다. 속성엔 탬플릿 해당 폼의 name에 담긴 것을 쓰면 된다.
 
</syntaxhighlight>한꺼번에 form을 저장하는 게 아니라 굳이 개별값을 얻고 싶을 땐 <code>form.cleaned_data.get('속성')</code>을 이용한다. 속성엔 탬플릿 해당 폼의 name에 담긴 것을 쓰면 된다.
 
===template 작성===
 
===template 작성===
<syntaxhighlight lang="html+django">
+
identifier 대신 식별자로 사용할 필드명을 넣으면 된다.<syntaxhighlight lang="html+django">
{% extends "common.html" %}
+
{% extends "base.html" %}
  
 
{% block content %}
 
{% block content %}
61번째 줄: 58번째 줄:
 
         </div>
 
         </div>
 
         <div class="col-8">
 
         <div class="col-8">
             <span>또는 <a href="{% url 'membership:login' %}">로그인 하세요.</a></span>
+
             <span>또는 <a href="{% url 'account:login' %}">로그인 하세요.</a></span>
 
         </div>
 
         </div>
  
70번째 줄: 67번째 줄:
 
         {% include "form_errors.html" %}
 
         {% include "form_errors.html" %}
 
         <div class="form-group">
 
         <div class="form-group">
             <label for="username">사용자 이름</label>
+
             <label for="identifier">사용자 이름</label>
             <input type="text" class="form-control" name="username" id="username"
+
             <input type="text" class="form-control" name="identifier" id="identifier"
                   value="{{ form.username.value|default_if_none:'' }}">
+
                   value="{{ form.identifier.value|default_if_none:'' }}">
 
         </div>
 
         </div>
 
         <div class="form-group">
 
         <div class="form-group">
84번째 줄: 81번째 줄:
 
                   value="{{ form.password2.value|default_if_none:'' }}">
 
                   value="{{ form.password2.value|default_if_none:'' }}">
 
         </div>
 
         </div>
        <div class="form-group">
+
 
            <label for="email">이메일</label>
+
         <button type="submit" class="btn btn-primary">가입하기</button>
            <input type="text" class="form-control" name="email" id="email"
 
                  value="{{ form.email.value|default_if_none:'' }}">
 
        </div>
 
         <button type="submit" class="btn btn-primary">생성하기</button>
 
 
     </form>
 
     </form>
 
</div>
 
</div>

2021년 11월 9일 (화) 17:45 기준 최신판

1 계정생성기능편집

1.1 탬플릿 수정편집

적당한 곳에 회원가입 링크를 담는다.

<a href="{% url 'account:signup' %}">회원가입</a>

1.2 urls.py 수정편집

다음의 내용이 포함되게끔 수정한다.(회원가입은 제공되는 뷰가 없거든..ㅜㅜ)

from . import views

urlpatterns = [
    path('signup/', views.signup, name='signup'),
]

1.3 forms.py 생성편집

from django import forms #폼을 불러오는데...
from django.contrib.auth.forms import UserCreationForm #제공하는 폼이 있다.
from django.contrib.auth.models import User #그리고 제공되는 모델과...

class User_create_form(UserCreationForm):
    class Meta:
        model = get_user_model()  # 설정된 커스텀모델
        fields = ["identifier",]  # password1,2 필드는 자동추가된다.

위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다.

비밀번호가 2개인 것은 서로 대조해서 같은지 확인하기 위함.

1.4 view 작성편집

from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from .forms import User_create_form

def signup(request):
    if request.method == "POST":
        form = User_create_form(request.POST)
        if form.is_valid():
            form.save()  # 폼값을 불러와 저장.(회원객체가 생긴다.)
            username = form.cleaned_data.get('identifier')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('main')  # 회원가입 후 어디로 돌릴지.
    else:
        form = User_create_form()
    return render(request, 'custum_account/signup.html', {'form': form})

한꺼번에 form을 저장하는 게 아니라 굳이 개별값을 얻고 싶을 땐 form.cleaned_data.get('속성')을 이용한다. 속성엔 탬플릿 해당 폼의 name에 담긴 것을 쓰면 된다.

1.5 template 작성편집

identifier 대신 식별자로 사용할 필드명을 넣으면 된다.

{% extends "base.html" %}

{% block content %}
<div class="container my-3">
    <div class="row my-3">
        <div class="col-4">
            <span>계정생성</span>
        </div>
        <div class="col-8">
            <span>또는 <a href="{% url 'account:login' %}">로그인 하세요.</a></span>
        </div>

    </div>

    <form method="post" class="post-form">
        {% csrf_token %}
        {% include "form_errors.html" %}
        <div class="form-group">
            <label for="identifier">사용자 이름</label>
            <input type="text" class="form-control" name="identifier" id="identifier"
                   value="{{ form.identifier.value|default_if_none:'' }}">
        </div>
        <div class="form-group">
            <label for="password1">비밀번호</label>
            <input type="password" class="form-control" name="password1" id="password1"
                   value="{{ form.password1.value|default_if_none:'' }}">
        </div>
        <div class="form-group">
            <label for="password2">비밀번호 확인</label>
            <input type="password" class="form-control" name="password2" id="password2"
                   value="{{ form.password2.value|default_if_none:'' }}">
        </div>

        <button type="submit" class="btn btn-primary">가입하기</button>
    </form>
</div>
{% endblock %}