장고/점프투장고

회원 가입view - 글쓴이 추가(모델에 fk 추가)

나도초딩 2023. 11. 16.

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 %}

 

댓글