"회원관리 3. 회원가입"의 두 판 사이의 차이
(→계정생성기능) |
|||
(같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
22번째 줄: | 22번째 줄: | ||
class User_create_form(UserCreationForm): | class User_create_form(UserCreationForm): | ||
class Meta: | class Meta: | ||
− | model = get_user_model # 설정된 커스텀모델 | + | model = get_user_model() # 설정된 커스텀모델 |
− | fields = [" | + | fields = ["identifier",] # password1,2 필드는 자동추가된다. |
</syntaxhighlight>위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다. | </syntaxhighlight>위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다. | ||
29번째 줄: | 29번째 줄: | ||
===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 | + | from .forms import User_create_form |
def signup(request): | def signup(request): | ||
− | |||
if request.method == "POST": | if request.method == "POST": | ||
− | form = | + | form = User_create_form(request.POST) |
if form.is_valid(): | if form.is_valid(): | ||
− | form.save()#폼값을 | + | form.save() # 폼값을 불러와 저장.(회원객체가 생긴다.) |
− | username = form.cleaned_data.get(' | + | 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(' | + | return redirect('main') # 회원가입 후 어디로 돌릴지. |
else: | else: | ||
− | form = | + | form = User_create_form() |
− | return render(request, ' | + | 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 " | + | {% extends "base.html" %} |
{% block content %} | {% block content %} | ||
59번째 줄: | 58번째 줄: | ||
</div> | </div> | ||
<div class="col-8"> | <div class="col-8"> | ||
− | <span>또는 <a href="{% url ' | + | <span>또는 <a href="{% url 'account:login' %}">로그인 하세요.</a></span> |
</div> | </div> | ||
68번째 줄: | 67번째 줄: | ||
{% include "form_errors.html" %} | {% include "form_errors.html" %} | ||
<div class="form-group"> | <div class="form-group"> | ||
− | <label for=" | + | <label for="identifier">사용자 이름</label> |
− | <input type="text" class="form-control" name=" | + | <input type="text" class="form-control" name="identifier" id="identifier" |
− | value="{{ form. | + | value="{{ form.identifier.value|default_if_none:'' }}"> |
</div> | </div> | ||
<div class="form-group"> | <div class="form-group"> | ||
82번째 줄: | 81번째 줄: | ||
value="{{ form.password2.value|default_if_none:'' }}"> | value="{{ form.password2.value|default_if_none:'' }}"> | ||
</div> | </div> | ||
− | + | ||
− | + | <button type="submit" class="btn btn-primary">가입하기</button> | |
− | |||
− | |||
− | |||
− | <button type="submit" class="btn btn-primary"> | ||
</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 %}