로그인 페이지 /sign-in/
<!-- templates/tweet/home.html -->
{% extends 'base.html' %} # base.html을 기본으로 가져오고
{% block content %} # 남는 content 공간에 우리 코드를 추가한다.
<div class="container timeline-container">
<div class="row">
<!-- 왼쪽 컬럼 -->
<div class="col-md-3">
<div class="card">
<div class="card-body">
<h5 class="card-title">Card title</h5>
<h6 class="card-subtitle mb-2 text-muted">Card subtitle</h6>
<p class="card-text">Some quick example text to build on the card title and make up the bulk of
the card's content.</p>
</div>
</div>
</div>
<!-- 오른 쪽 컬럼-->
<div class="col-md-7">
<!-- 글을 작성 하는 곳 -->
<div class="row mb-2">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<div class="media">
<div class="media-body">
<h5 class="mt-0">나의 이야기를 적어주세요</h5>
<p>
<form>
<div class="form-group mb-2">
<textarea class="form-control" style="resize: none" name='my-content'
id="my-content"></textarea>
</div>
<button type="submit" class="btn btn-primary" style="float:right;">작성하기
</button>
</form>
</p>
</div>
</div>
</div>
</div>
</div>
</div>
<hr>
<!-- 작성 된 글이 나오는 곳 -->
<div class="row">
<div class="col-md-12">
<div class="card">
<div class="card-body">
<div class="media">
<div class="media-body">
<h5 class="mt-0">Media heading</h5>
<p>Will you do the same for me? It's time to face the music I'm no longer your
muse.
Heard it's
beautiful, be the judge and my girls gonna take a vote. I can feel a phoenix
inside
of me.
Heaven is
jealous of our love, angels are crying from up above. Yeah, you take me to
utopia.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="col-md-2"></div>
</div>
</div>
{% endblock %}
로그인에 성공하면 위 home 화면을 보여주는 작업을 하려면
from django.shortcuts import render, redirect
def home(request): # 로그인 된 사람만 보여주기
user = request.user.is_authenticated # 유저가 로그인(인증)이 되어 있는지 확인
if user:
return redirect('/tweet') # 되어 있다면 tweet 화면을
else:
return redirect('/sign-in') # 실패했다면 다시 로그인 화면
def tweet(request): # request GET 요청이 오면 tweet/home.html 보여주는 함수.
if request.method == 'GET': # 페이지 보여주기는 GET
return render(request, 'tweet/home.html')
render
는 html을 보여주는 함수
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 빈 url로 접속하면 views.py의 home 함수를 연결한다.
path('tweet/', views.tweet, name='tweet') # /tweet로 접속한다면 views.py의 tweet 함수와 연결
]
home 함수에서 로그인에 성공하면
> /tweet > (아래 urls.py 통해 views.tweet 함수 호출)
> home.html 보여지는 원리
전체 폴더(MySpartaSnS)의 settings.py와 urls.py는
전체 프로젝트의 환경설정과 접속 경로를 담당한다.
여기에 등록하지 않았기 때문에 아직 위 페이지가 뜨지 않는다.
from django.contrib import admin
from django.urls import path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('test/', views.base_response, name='first_test'),
path('first/', views.first_view, name='first_view'),
path('', include('user.urls')),
path('', include('tweet.urls')), # tweet의 url과 연결했다.
]
마지막 단계, 로그인 화면.
로그인 화면에서 로그인을 한 후 해당하는 페이지를 보여주려면
from django.shortcuts import render, redirect
from .models import UserModel
# from django.http import HttpResponse
from django.contrib.auth import get_user_model
from django.contrib import auth
def sign_in_view(request):
if request.method == 'POST':
username = request.POST.get('username', None)
password = request.POST.get('password', None)
me = auth.authenticate(request, username=username, password=password) # 인증이 된 후에
if me is not None:
auth.login(request, me) # 해당 유저에 로그인을 하고
return redirect('/') # /라는 기본 url로 넘어감. 기본 url은 tweet/urls에 있다.
else:
return redirect('/login')
elif request.method == 'GET':
return render(request, 'user/signin.html')
로그인 화면에서 로그인을 한 후 바로 해당 페이지를 보여줘야 하기 때문에 return HttpResponse(me.username)
을 return redirect('/')
로 바꿔준다.
사용자정보를 입력하고 로그인을 누르면 인증이 된 후 /
라는 기본 url로 넘어가게 된다.
이 기본 url은 tweet/urls.py에 있다.
기본 url은 home 함수를 실행한다.
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'), # 빈 url로 접속하면 views.py의 home 함수를 연결한다.
path('tweet/', views.tweet, name='tweet') # /tweet로 접속한다면 views.py의 tweet 함수와 연결
]
home 함수는 로그인이 성공하면 tweet 화면 보여주고
아니면 login page로 이동하게 해주는 함수다.
from django.shortcuts import render, redirect
def home(request): # 로그인 된 사람만 보여주기
user = request.user.is_authenticated # 유저가 로그인(인증)이 되어 있는지 확인
if user:
return redirect('/tweet') # 되어 있다면 tweet 화면을
else:
return redirect('/sign-in') # 실패했다면 다시 로그인 화면