forms.py
signup.html
views.py def signup(request):
회원 가입 링크 navbar.html | {% if not user.is_authenticated %} <a class="nav-link" href="{% url 'common:signup' %}">회원가입</a> {% endif %} |
common/urls.py | path('', '회원가입뷰 클래스or함수', name='signup'), from django.contrib.auth import views as auth_views from . import views app_name = 'common' urlpatterns = [ ....... path('signup/', views.signup, name='signup'), ] |
회원가입폼UserForm 필요 common/forms.py 필요한 import 모듈은? |
필요한 3가지 :: 장고폼, 오쓰폼 UserCreateionForm, User모델 from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class UserForm(UserCreationForm):
email = forms.EmailField(label="이메일")
class Meta:
model = User
fields = ("username", "password1", "password2", "email")
|
common/views.py 인증, 로그인 세션 회원 가입폼 UserForm django.contrib.auth.authenticate - 사용자명과 비밀번호가 정확한지 검증한다.) django.contrib.auth.login - 로그인. 사용자 세션을 생성 |
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from common.forms import UserForm
def signup(request):
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, 'common/signup.html', {'form': form})
|
common/signup.html | ![]() |
회원가입 |
{% extends "base.html" %}
{% block content %}
<div class="container my-3">
<form method="post" action="{% url 'common:signup' %}">
{% csrf_token %}
{% include "form_errors.html" %}
<div class="mb-3">
<label for="username">사용자 이름</label>
<input type="text" class="form-control" name="username" id="username"
value="{{ form.username.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="password1">비밀번호</label>
<input type="password" class="form-control" name="password1" id="password1"
value="{{ form.password1.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<label for="password2">비밀번호 확인</label>
<input type="password" class="form-control" name="password2" id="password2"
value="{{ form.password2.value|default_if_none:'' }}">
</div>
<div class="mb-3">
<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 %}
|
'장고 > 점프투장고' 카테고리의 다른 글
점프 투 장고. 실습한 소스 (1) | 2023.11.18 |
---|---|
회원가입 폼 (부트스트랩) (1) | 2023.11.16 |
댓글 수: {% if question.answer_set.count > 0 %} (0) | 2023.11.15 |
로그인 로그아웃 구현 + 리다이렉트 URL ( config/urls.py ) (0) | 2023.11.15 |
urls.py <int:pk> <------- views.py : redirect(___, pk=question.id) (0) | 2023.11.14 |
폼 에러 표시. class , form.errors/field.label/field.errors (0) | 2023.11.13 |
forms.py 에서 폼디자인( form.as_p 폼위젯, 수동폼 사용) (0) | 2023.11.12 |
테이블 모양 / 부트스트랩 (0) | 2023.11.12 |
댓글