๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ก์›น ํ”„๋กœ์ ํŠธ/(๋ฐฑ์—”๋“œ)Django - ํ”„๋กœ์ ํŠธ01

ํ”„๋กœ์ ํŠธ01. Django authentication๋ฅผ ํ™œ์šฉํ•œ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„

Django authentication๋ฅผ ์ด์šฉํ•˜๋ฉด form์€ ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์—

๊ฐ„๋‹จํ•˜๊ฒŒ ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋กœ๊ทธ์•„์›ƒ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

ํ•„์š”ํ•œ ์ฝ”๋“œ๋Š” https://www.programcreek.com/python/์ฐธ๊ณ 

github - https://github.com/seunghyun1003/web1

 

๋ชฉ์ฐจ

  • <ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„>
  • 1. urls, view, template์ž‘์—…
  • 2. ๊ฒฐ๊ณผ
  • <๋กœ๊ทธ์ธ ๊ตฌํ˜„>
  • 1. urls, view, template์ž‘์—…
  • 2. ๋กœ๊ทธ์ธ ํ›„ ํ™ˆ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์„ค์ •
  • 3. ๊ฒฐ๊ณผ
  • <๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„>
  • urls, view, template์ž‘์—…

 

<ํšŒ์›๊ฐ€์ž… ๊ตฌํ˜„>

1. urls, view, template์ž‘์—…

urls ์ž‘์—… : simp_web/urls.py์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€

path('signup', views.signup, name='signup'),  #์ถ”๊ฐ€

view ์ž‘์—… : simp_web/views.py์— signup๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

from .forms import UserForm, LoginForm
from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm


from django.http import HttpResponseRedirect
from django.urls import reverse

def signup(request):
    if request.method != 'POST':
        form = UserCreationForm()
    else:
        form = UserCreationForm(data=request.POST)
        if form.is_valid():
            new_user = form.save()
            authenticated_user = authenticate(username=new_user.username,
                                              password=request.POST['password1'])
            login(request, authenticated_user)
            return HttpResponseRedirect(reverse('index'))

    context = {'form': form}
    return render(request, 'simp_web/signup.html', context)

template ์ž‘์—…

  • templates/base_generic.html์— ์•„๋ž˜ ๋ถ€๋ถ„์ถ”๊ฐ€
<li class="nav-item">
	<a class="nav-link active" href="{% url 'signup' %}">ํšŒ์›๊ฐ€์ž…ํ•˜๊ธฐ</a>
</li>
  • templates/registration/signup.html ์ƒ์„ฑ
{% extends 'simp_web/base_generic.html' %}
{% load staticfiles %}
{% block content %}
<h2>ํšŒ์›๊ฐ€์ž…</h2>
<form method="post" action="">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="ํšŒ์›๊ฐ€์ž…" />
</form>
{% endblock content %}

 

2. ๊ฒฐ๊ณผ

 

<๋กœ๊ทธ์ธ ๊ตฌํ˜„>

1. urls, view, template์ž‘์—…

url ์ž‘์—… : urls.py์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€

path('login', views.login_view, name='login'), #์ถ”๊ฐ€

view ์ž‘์—… : views.py์— login_view๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€

from django.contrib.auth.models import User
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import AuthenticationForm

from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.template import RequestContext

def login_view(request):  #๋ฉ”์†Œ๋“œ ์ด๋ฆ„ login์œผ๋กœํ•˜๋ฉด ์˜ค๋ฅ˜๋‚  ์ˆ˜ ์žˆ์Œ
    if request.user.is_authenticated:
        return HttpResponseRedirect('/simp_web')
    if request.method == 'GET':
        form = AuthenticationForm()
        return render(request, 'simp_web/login.html', {'form': form})
    if request.method == 'POST':
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(username=username, password=password)
            if user is not None:
                print(user)
                login(request, user)
                return HttpResponseRedirect('/simp_web')
            else:
                print('User not found')
        else:
            # If there were errors, we render the form with these
            # errors
            return render(request, 'simp_web/login.html', {'form': form})

template ์ž‘์—…

  • templates/base_generic.html
<li class="nav-item">
   <a class="nav-link active" href="{% url 'login_view' %}">๋กœ๊ทธ์ธํ•˜๊ธฐ</a>
</li>
  • simp_web/login.html ์ƒ์„ฑ
{% extends 'base_generic.html' %}
{% load staticfiles %}
{% block content %}
<h2>๋กœ๊ทธ์ธ</h2>
<form method="post" action="">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="๋กœ๊ทธ์ธ" />
</form>
{% endblock content %}

 

2. ๋กœ๊ทธ์ธ ํ›„ ํ™ˆ์œผ๋กœ ์ด๋™ํ•˜๋Š” ์„ค์ •

  • settings.py
# ๋กœ๊ทธ์ธ ์ดํ›„ ๊ฒฝ๋กœ ์ˆ˜์ •
LOGIN_REDIRECT_URL = "/simp_web/"

 

3. ๊ฒฐ๊ณผ

 

<๋กœ๊ทธ์•„์›ƒ ๊ตฌํ˜„>

urls, view, template์ž‘์—…

  • url ์ž‘์—… : urls.py์— ์•„๋ž˜ ์ฝ”๋“œ ์ถ”๊ฐ€
path('logout', views.logout, name='login'), #์ถ”๊ฐ€
  • view ์ž‘์—… : simp_web/views.py์— logout๋ฉ”์†Œ๋“œ ์ถ”๊ฐ€
from django.contrib.auth.models import User
from django.contrib import auth

def logout(request):
    auth.logout(request)
    return HttpResponseRedirect(reverse('index'))
  • template ์ž‘์—… : templates/base_generic.html
<li class="nav-item">
	<a class="nav-link active" href="{% url 'logout' %}">๋กœ๊ทธ์•„์›ƒํ•˜๊ธฐ</a>
</li>