4,143 바이트 추가됨
, 2021년 6월 21일 (월) 14:07
=계정생성기능=
===탬플릿 수정===
적당한 곳에 아래 내용을 담는다.<syntaxhighlight lang="html+django">
<a href="{% url 'membership:signup' %}">회원가입</a>
</syntaxhighlight>
===urls.py 수정===
다음의 내용이 포함되게끔 수정한다.(회원가입은 제공되는 뷰가 없거든..ㅜㅜ)<syntaxhighlight lang="python">
from . import views
urlpatterns = [
path('signup/', views.signup, name='signup'),
]
</syntaxhighlight>
===forms.py 생성===
<syntaxhighlight lang="python">
from django import forms #폼을 불러오는데...
from django.contrib.auth.forms import UserCreationForm #제공하는 폼이 있다.
from django.contrib.auth.models import User #그리고 제공되는 모델과...
class UserForm(UserCreationForm):
class Meta:
model = User
fields = ["username","password1", "password2","email"]#모델의 어떤 부분을 기입할지
</syntaxhighlight>위에서 지정해주지 않은 fields가 폼에 적용되는데, 이 폼에 대한 공부가 따로 필요할 듯하다.
비밀번호가 2개인 것은 서로 대조해서 같은지 확인하기 위함.
[한가지 의문인 것은... 모델에 들어갈 내용 뜯어고칠 순 없나?]
===view 작성===
<syntaxhighlight lang="python">
from django.contrib.auth import authenticate, login#로그인기능을 위해
from django.shortcuts import render, redirect#탬플릿으로 넘기기 위해
from membership.forms import UserForm#폼 소환~
def signup(request):
#글쓰기 view와 같이 입력과 보내기를 한 링크에서 관리한다.
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
form.save()#폼값을 불러오는 역할
username = form.cleaned_data.get('username')
raw_password = form.cleaned_data.get('password1')
user = authenticate(username=username, password=raw_password)
login(request, user)
return redirect('index')#회원가입 후 어디로 돌릴지. 보고 있던 페이지로는 안되나;;?
else:
form = UserForm()
return render(request, 'membership/signup.html', {'form': form})
</syntaxhighlight>한꺼번에 form을 저장하는 게 아니라 굳이 개별값을 얻고 싶을 땐 <code>form.cleaned_data.get('속성')</code>을 이용한다. 속성엔 탬플릿 해당 폼의 name에 담긴 것을 쓰면 된다.
===template 작성===
<syntaxhighlight lang="html+django">
{% extends "common.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 'membership:login' %}">로그인 하세요.</a></span>
</div>
</div>
<form method="post" class="post-form">
{% csrf_token %}
{% include "form_errors.html" %}
<div class="form-group">
<label for="username">사용자 이름</label>
<input type="text" class="form-control" name="username" id="username"
value="{{ form.username.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>
<div class="form-group">
<label for="email">이메일</label>
<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>
</div>
{% endblock %}
</syntaxhighlight>
[[분류:장고 기능구현(초급)]]