1. account이름의 app만들기
#manage.py가 있는 곳으로 이동
python manage.py startapp account
2. settings.py에 account 추가
3. 새로만들어진 account 폴더의 views.py 수정
from django.shortcuts import render
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
def login_view(request):
form = AuthenticationForm()
return render(request, 'login.html',{'form' : form})
4. account폴더에 urls.py 생성
from django.urls import path
from .views import *
urlpatterns = [
path('login/', login_view, name="login"),
]
5. lionproject 폴더의 urls.py 코드 수정(account.urls연결)
from django.contrib import admin
from django.urls import path, include
from blog.views import home
from django.conf import settings #setting.py를 뜻하는게 아니다.
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="name"),
path('blog/', include('blog.urls')),
path('account/', include('account.urls')),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
6. account/templates 에 login.html 생성하기
{% extends 'base.html' %}
{% block content %}
<h1>Login</h1>
<form action="{%url 'create' %}" method="post" >
{%csrf_token%}
{{form}}
<button type="submit">Submit</button>
</form>
{% endblock %}
7. base.html에 a태그로 login.html 연결해주기 : 36번째 줄 수정
<li class="nav-item">
<a class="nav-link" href="{% url 'login' %}">Login</a>
</li>
8. runserver
9. login.html의 action 수정
{% extends 'base.html' %}
{% block content %}
<h1>Login</h1>
<form action="{%url 'login' %}" method="post" >
{%csrf_token%}
{{form}}
<button type="submit">Submit</button>
</form>
{% endblock %}
10. views.py 수정
from django.shortcuts import redirect, render
from django.contrib.auth.forms import AuthenticationForm, UserCreationForm
from django.contrib.auth import authenticate,login,logout
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(request=request, data = request.POST)
if form.is_valid(): #유효성 검사
username = form.cleaned_data.get("username") #클린한 데이터를 get해와서 저장
password = form.cleaned_data.get("password")
user = authenticate(request=request, username=username, password=password)
if user is not None: #유저가 존재할때
login(request, user)
return redirect('home')
else :
form = AuthenticationForm()
return render(request, 'login.html',{'form' : form})
def logout_view(request):
logout(request)
return redirect('home')
11. urls.py에 logout함수의 path추가
from django.urls import path
from .views import *
urlpatterns = [
path('login/', login_view, name="login"),
path('logout/', logout_view, name="logout")
]
12. base.html에 logout 태그 추가
<li class="nav-item">
<a class="nav-link" href="{% url 'logout' %}">Loout</a>
</li>
13. home.html 코드 수정통해 로그인이 제대로 되는지 확인하기
{% extends 'base.html' %}
{% block content %}
{% if usser.is_authenticated %}
{{user.name}}
{% endif %}
<h1>Blog Project</h1>
<div>
<a href="{%url 'new' %}">Write</a>
</div>
<div class="container">
{%for blog in blogs %}
<div>
<h3>{{blog.title}} </h3>
{{blog.id}}
{{blog.writer}}
{{blog.summary}} <a href="{% url 'detail' blog.id %}"> ...more </a>
<!--detail이라는 url에 요청을 보내는데, blog.id도 같이 보낸다.-->
<br>
</div>
{% endfor %}
</div>
{% endblock %}
14. runserver(오류 발생...!)
NoReverseMatch
Reverse for 'home' not found. 'home' is not a valid view function or pattern name.
---> 해결 (lionproject 파일의 urls.py에 오타...!)
from django.contrib import admin
from django.urls import path, include
from blog.views import home
from django.conf import settings #setting.py를 뜻하는게 아니다.
from django.conf.urls.static import static
urlpatterns = [
path('admin/', admin.site.urls),
path('', home, name="home"), # name = "name" 이라고 되어 있었다...!
path('blog/', include('blog.urls')),
path('account/', include('account.urls')),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
'Back-end > Django' 카테고리의 다른 글
[Django] User 확장과 인증 (실습2) (0) | 2021.07.20 |
---|---|
[Django] User 확장과 인증(이론) (0) | 2021.07.20 |
[Django] Form (0) | 2021.07.19 |
[Django] Media (0) | 2021.07.19 |
[Django] Static (0) | 2021.07.19 |
댓글