django 12 로그인 이후 기능

Grace Goh·2022년 10월 9일
0

Django

목록 보기
13/32

로그인 페이지 /sign-in/

1. home.html 만들기

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

2. tweet/views.py 만들기

로그인에 성공하면 위 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을 보여주는 함수

3. tweet/urls.py 만들기

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 보여지는 원리

4. MySpartaSns/urls.py

전체 폴더(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과 연결했다.
]

5. user/views.py

마지막 단계, 로그인 화면.
로그인 화면에서 로그인을 한 후 해당하는 페이지를 보여주려면

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에 있다.

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 함수와 연결
]

tweet/views.py

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') # 실패했다면 다시 로그인 화면
profile
Español, Inglés, Coreano y Python

0개의 댓글