DAY63
DAY63

flask 페이지를 장고로 구축해보자 2


syslog.sql 데이터베이스에 넣기

환경변수 설정
시스템 변수 추가
C:\Program Files\MySQL\MySQL Server 8.4\bin

cmd
mysql
mysql -u root -p123456 Syslog < "D:\jyb\syslog.sql"

syslog.sql 오류 구문 수정
utf8mb4_uca1400_ai_ci를 utf8mb4_unicode_ci로 수정

python manage.py runserver

http://127.0.0.1:8000/security

***workbench를 이용한 데이터베이스 넣기 방법

server > data import > 파일 선택


#192.168.0.77/dashboard/auth/login/?next=/admin/
127.0.0.1:8000/admin 접속 가능 (기본)

기본 셋팅 파일 auth_user에 유저 추가 할 수 있음
혹은
cmd
python manage.py createsuperuser
admin
t@t.com
123456

로그인 기능 만들기
urls.py
app_name='security'
path('',views.index,name='index')
path('/',views.detail,name='detail')
{% url 'security:detail' syslog.id %}

로그인, 로그아웃을 쉽게 구현하기 위한 django.contrib.auth 앱을 제공함
common을 이용할 예정

cmd
django-admin startapp common
=> djnago 하위 디렉터리로 common 생성됨

config>settings.py
# Application definition

INSTALLED_APPS = [
    'security.apps.SecurityConfig',
    'common.apps.CommonConfig', < - 추가
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]
config>urls.py
urlpatterns = [
	path('admin/', admin.site.urls),
	path('security/', include('security.urls')),
	path('common/',include('common.urls')), < - 추가
]

common>urls.py 생성
from django.urls import path
from django.contrib.auth import views as auth_views
from . import views

app_name='common'
urlpatterns=[
   path('login/',auth_views.LoginView.as_view(template_name'common/login.html'),name='login'),
]
=> 위치 특정이 가능!!


base.html 수정
{% url 'common:login' %}

django>templates>common생성>login.html 생성
{% load static %}
< !DOCTYPE html>
< html lang="en">
< head>
    < meta charset="utf-8">
    < meta http-equiv="X-UA-Compatible" content="IE=edge">
    < meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    < meta name="description" content="">
    < meta name="author" content="">

    < title>산특 로그 분석기(4기)< /title>


    < link href="{% static 'vendor/fontawesome-free/css/all.min.css' %}" rel="stylesheet">
    < link
        href="https://fonts.googleapis.com/css?family=Nunito:200,200i,300,300i,400,400i,600,600i,700,700i,800,800i,900,900i"
        rel="stylesheet">
    < link href="{% static 'css/sb-admin-2.min.css' %}" rel="stylesheet">
< /head>

< body id="page-top">

    
    < div id="wrapper">

        
        < ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar">

            
            < a class="sidebar-brand d-flex align-items-center justify-content-center" href="">
                < div class="sidebar-brand-icon rotate-n-15">
                    < i class="fas fa-laugh-wink">< /i>
                < /div>
                < div class="sidebar-brand-text mx-3">로그분석기< sup>1< /sup>< /div>
            < /a>

            
            < hr class="sidebar-divider my-0">

            
            < li class="nav-item active">
                < a class="nav-link" href="index.html">
                    < i class="fas fa-fw fa-tachometer-alt">< /i>
                    < span>Dashboard< /span>< /a>
            < /li>

            
            < hr class="sidebar-divider">

            
            < div class="sidebar-heading">
                Interface
            < /div>

            
            < li class="nav-item">
                < a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo"
                    aria-expanded="true" aria-controls="collapseTwo">
                    < i class="fas fa-fw fa-cog">< /i>
                    < span>Components< /span>
                < /a>
                < div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
                    < div class="bg-white py-2 collapse-inner rounded">
                        < h6 class="collapse-header">Custom Components:< /h6>


                     < a class="collapse-item" href="">syslog< /a>
                     < a class="collapse-item" href="">sensor< /a>

                    < /div>
                < /div>
            < /li>

            
            < li class="nav-item">
                < a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseUtilities"
                    aria-expanded="true" aria-controls="collapseUtilities">
                    < i class="fas fa-fw fa-wrench">< /i>
                    < span>Utilities< /span>
                < /a>
                < div id="collapseUtilities" class="collapse" aria-labelledby="headingUtilities"
                    data-parent="#accordionSidebar">
                    < div class="bg-white py-2 collapse-inner rounded">
                        < h6 class="collapse-header">Custom Utilities:< /h6>
                        < a class="collapse-item" href="utilities-color.html">Colors< /a>
                        < a class="collapse-item" href="utilities-border.html">Borders< /a>
                        < a class="collapse-item" href="utilities-animation.html">Animations< /a>
                        < a class="collapse-item" href="utilities-other.html">Other< /a>
                    < /div>
                < /div>
            < /li>

            
            < hr class="sidebar-divider">

            
            < div class="sidebar-heading">
                Addons
            < /div>

            
            < li class="nav-item">
                < a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages"
                    aria-expanded="true" aria-controls="collapsePages">
                    < i class="fas fa-fw fa-folder">< /i>
                    < span>Pages< /span>
                < /a>
                < div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
                    < div class="bg-white py-2 collapse-inner rounded">
                        < h6 class="collapse-header">Login Screens:< /h6>
                        < a class="collapse-item" href="{% url 'common:login' %}">Login< /a>
                        < a class="collapse-item" href="register.html">Register< /a>
                        < a class="collapse-item" href="forgot-password.html">Forgot Password< /a>
                        < div class="collapse-divider">< /div>
                        < h6 class="collapse-header">Other Pages:< /h6>
                        < a class="collapse-item" href="404.html">404 Page< /a>
                        < a class="collapse-item" href="blank.html">Blank Page< /a>
                    < /div>
                < /div>
            < /li>

            
            < li class="nav-item">
                < a class="nav-link" href="charts.html">
                    < i class="fas fa-fw fa-chart-area">< /i>
                    < span>Charts< /span>< /a>
            < /li>

            
            < li class="nav-item">
                < a class="nav-link" href="tables.html">
                    < i class="fas fa-fw fa-table">< /i>
                    < span>Tables< /span>< /a>
            < /li>

            
            < hr class="sidebar-divider d-none d-md-block">

            
            < div class="text-center d-none d-md-inline">
                < button class="rounded-circle border-0" id="sidebarToggle">< /button>
            < /div>

            
            < div class="sidebar-card d-none d-lg-flex">
                < img class="sidebar-card-illustration mb-2" src="img/undraw_rocket.svg" alt="...">
                < p class="text-center mb-2">< trong>SB Admin Pro< /strong> is packed with premium features, components, and more!< /p>
                < a class="btn btn-success btn-sm" href="https://startbootstrap.com/theme/sb-admin-pro">Upgrade to Pro!< /a>
            < /div>

        < /ul>
        

        
        < div id="content-wrapper" class="d-flex flex-column">

            
            < div id="content">

                
                < nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow">

                    
                    < button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3">
                        < i class="fa fa-bars">< /i>
                    < /button>

                    
                    < form
                        class="d-none d-sm-inline-block form-inline mr-auto ml-md-3 my-2 my-md-0 mw-100 navbar-search" id="searchForm" method="get" action="">

                        < div class="input-group">
                            < input type="text" class="form-control bg-light border-0 small" placeholder="Search for..."
                                aria-label="Search" aria-describedby="basic-addon2">
                            < div class="input-group-append">
                                < button class="btn btn-primary" type="submit">
                                    < i class="fas fa-search fa-sm">
                                < /button>
                            < /div>
                        < /div>
                    < /form>

                    
                    < ul class="navbar-nav ml-auto">

                        
                        < li class="nav-item dropdown no-arrow d-sm-none">
                            < a class="nav-link dropdown-toggle" href="#" id="searchDropdown" role="button"
                                data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                < i class="fas fa-search fa-fw">< /i>
                            < /a>
                            
                            < div class="dropdown-menu dropdown-menu-right p-3 shadow animated--grow-in"
                                aria-labelledby="searchDropdown">
                                < form class="form-inline mr-auto w-100 navbar-search">
                                    < div class="input-group">
                                        < input type="text" class="form-control bg-light border-0 small"
                                            placeholder="Search for..." aria-label="Search"
                                            aria-describedby="basic-addon2">
                                        < div class="input-group-append">
                                            < button class="btn btn-primary" type="button">
                                                < i class="fas fa-search fa-sm">< /i>
                                            < /button>
                                        < /div>
                                    < /div>
                                < /form>
                            < /div>
                        < li>

                        
                        < li class="nav-item dropdown no-arrow mx-1">
                            < a class="nav-link dropdown-toggle" href="#" id="alertsDropdown" role="button"
                                data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                < i class="fas fa-bell fa-fw">< /i>
                                
                                < span class="badge badge-danger badge-counter">3+< /span>
                            < /a>
                            
                            < div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in"
                                aria-labelledby="alertsDropdown">
                                < h6 class="dropdown-header">
                                    Alerts Center
                                < /h6>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="mr-3">
                                        < div class="icon-circle bg-primary">
                                            < i class="fas fa-file-alt text-white">< /i>
                                        < /div>
                                    < /div>
                                    < div>
                                        < div class="small text-gray-500">December 12, 2019< /div>
                                        < span class="font-weight-bold">A new monthly report is ready to download!< /span>
                                    < /div>
                                < /a>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="mr-3">
                                        < div class="icon-circle bg-success">
                                            < i class="fas fa-donate text-white">< /i>
                                        < /div>
                                    < /div>
                                    < div>
                                        < div class="small text-gray-500">December 7, 2019< /div>
                                        $290.29 has been deposited into your account!
                                    < /div>
                                < /a>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="mr-3">
                                        < div class="icon-circle bg-warning">
                                            < i class="fas fa-exclamation-triangle text-white">< /i>
                                        < /div>
                                    < /div>
                                    < div>
                                        < div class="small text-gray-500">December 2, 2019< /div>
                                        Spending Alert: We've noticed unusually high spending for your account.
                                    < /div>
                                < /a>
                                < a class="dropdown-item text-center small text-gray-500" href="#">Show All Alerts< /a>
                            < /div>
                        < /li>

                        
                        < li class="nav-item dropdown no-arrow mx-1">
                            < a class="nav-link dropdown-toggle" href="#" id="messagesDropdown" role="button"
                                data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                < i class="fas fa-envelope fa-fw">< /i>
                                
                                < span class="badge badge-danger badge-counter">7< /span>
                            < /a>
                            
                            < div class="dropdown-list dropdown-menu dropdown-menu-right shadow animated--grow-in"
                                aria-labelledby="messagesDropdown">
                                < h6 class="dropdown-header">
                                    Message Center
                                < /h6>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="dropdown-list-image mr-3">
                                        < img class="rounded-circle" src="img/undraw_profile_1.svg"
                                            alt="...">
                                        < div class="status-indicator bg-success">< /div>
                                    < /div>
                                    < div class="font-weight-bold">
                                        < div class="text-truncate">Hi there! I am wondering if you can help me with a
                                            problem I've been having.< /div>
                                        < div class="small text-gray-500">Emily Fowler · 58m< /div>
                                    < /div>
                                < /a>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="dropdown-list-image mr-3">
                                        < img class="rounded-circle" src="img/undraw_profile_2.svg"
                                            alt="...">
                                        < div class="status-indicator">< /div>
                                    < /div>
                                    < div>
                                        < div class="text-truncate">I have the photos that you ordered last month, how
                                            would you like them sent to you?< /div>
                                        < div class="small text-gray-500">Jae Chun · 1d< /div>
                                    < /div>
                                < /a>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="dropdown-list-image mr-3">
                                        < img class="rounded-circle" src="img/undraw_profile_3.svg"
                                            alt="...">
                                        < div class="status-indicator bg-warning">< /div>
                                    < /div>
                                    < div>
                                        < div class="text-truncate">Last month's report looks great, I am very happy with
                                            the progress so far, keep up the good work!< /div>
                                        < div class="small text-gray-500">Morgan Alvarez · 2d< /div>
                                    < /div>
                                < /a>
                                < a class="dropdown-item d-flex align-items-center" href="#">
                                    < div class="dropdown-list-image mr-3">
                                        < img class="rounded-circle" src="https://source.unsplash.com/Mv9hjnEUHR4/60x60"
                                            alt="...">
                                        < div class="status-indicator bg-success">< /div>
                                    < /div>
                                    < div>
                                        < div class="text-truncate">Am I a good boy? The reason I ask is because someone
                                            told me that people say this to all dogs, even if they aren't good...< /div>
                                        < div class="small text-gray-500">Chicken the Dog · 2w< /div>
                                    < /div>
                                < /a>
                                < a class="dropdown-item text-center small text-gray-500" href="#">Read More Messages< /a>
                            < /div>
                        < /li>

                        < div class="topbar-divider d-none d-sm-block">< /div>

                        
                        < li class="nav-item dropdown no-arrow">
                            < a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button"
                                data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                < span class="mr-2 d-none d-lg-inline text-gray-600 small">Douglas McGee< /span>
                                < img class="img-profile rounded-circle"
                                    src="img/undraw_profile.svg">
                            < /a>
                            
                            < div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
                                aria-labelledby="userDropdown">
                                < a class="dropdown-item" href="#">
                                    < i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    Profile
                                < /a>
                                < a class="dropdown-item" href="#">
                                    < i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    Settings
                                < /a>
                                < a class="dropdown-item" href="#">
                                    < i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    Activity Log
                                < /a>

                                {% if g.user %}
                        < div class="dropdown-divider">< /div>
                                < a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
                                    < i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    Logout
                                < /a>
                        {% endif %}

                            < /div>
                        < /li>

                    < /ul>

                < /nav>
            {% block content %}

            {% endblock%}
            {% include 'footer.html' %} < - 중요


footer.html 내용 채우기
           
           < footer class="sticky-footer bg-white">
                < div class="container my-auto">
                    < div class="copyright text-center my-auto">
                        < span>Copyright © Your Website 2021< /span>
                    < /div>
                < /div>
            < /footer>
            

        < /div>
        

    < /div>
    

    
    < a class="scroll-to-top rounded" href="#page-top">
        < i class="fas fa-angle-up">< /i>
    < /a>

    
    < div class="modal fade" id="logoutModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel"
        aria-hidden="true">
        < div class="modal-dialog" role="document">
            < div class="modal-content">
                < div class="modal-header">
                    < h5 class="modal-title" id="exampleModalLabel">Ready to Leave?< /h5>
                    < button class="close" type="button" data-dismiss="modal" aria-label="Close">
                        < span aria-hidden="true">×< /span>
                    < /button>
                < /div>
                < div class="modal-body">Select "Logout" below if you are ready to end your current session.< /div>
                < div class="modal-footer">
                    < button class="btn btn-secondary" type="button" data-dismiss="modal">Cancel< /button>
                    < a class="btn btn-primary" href="">Logout< /a>
                < /div>
            < /div>
        < /div>
    < /div>

    
    < script src="/static/vendor/jquery/jquery.min.js">< /script>
    < script src="/static/vendor/bootstrap/js/bootstrap.bundle.min.js">< /script>

    
    < script src="/static/vendor/jquery-easing/jquery.easing.min.js">< /script>

    
    < script src="/static/js/sb-admin-2.min.js">< /script>

    
    < script src="/static/vendor/chart.js/Chart.min.js">< /script>

    
    < script src="/static/js/demo/chart-area-demo.js">< /script>
    < script src="/static/js/demo/chart-pie-demo.js">< /script>

< /body>

< /html>

django>templates>common
login.html
{%csrf_token%} 수정

{% extends 'base.html' %}

{% block content %}
< div class="container">

        
        < div class="row justify-content-center">

            < div class="col-xl-10 col-lg-12 col-md-9">

                < div class="card o-hidden border-0 shadow-lg my-5">
                    < div class="card-body p-0">
                        
                        < div class="row">
                            < div class="col-lg-6 d-none d-lg-block bg-login-image">< /div>
                            < div class="col-lg-6">
                                < div class="p-5">
                                    < div class="text-center">
                                        < h1 class="h4 text-gray-900 mb-4">산특 로그 분석기< /h1>
                                    < /div>


                           
                                    < form class="user" method="post">
                           {%csrf_token%}
                                        < div class="form-group">
                                            < input type="text" class="form-control form-control-user"
                                                id="username" name="username" aria-describedby="계정입력"
                                                placeholder="계정입력">
                                        < /div>
                                        < div class="form-group">
                                            < input type="password" class="form-control form-control-user"
                                                id="password" name="password" placeholder="패스워드입력">
                                        < /div>
                                        < div class="form-group">
                                            < div class="custom-control custom-checkbox small">
                                                < input type="checkbox" class="custom-control-input" id="customCheck">
                                                < label class="custom-control-label" for="customCheck">Remember
                                                    Me< /label>
                                            < /div>
                                        < /div>
                              < button type="submit" class="btn btn-primary btn-user btn-block">로그인< /button>
                                        < hr>
                                        < a href="index.html" class="btn btn-google btn-user btn-block">
                                            < i class="fab fa-google fa-fw">< /i> Login with Google
                                        < /a>
                                        < a href="index.html" class="btn btn-facebook btn-user btn-block">
                                            < i class="fab fa-facebook-f fa-fw">< /i> Login with Facebook
                                        < /a>
                                    < /form>
                           



                                    < hr>
                                    < div class="text-center">
                                        < a class="small" href="">Forgot Password?< /a>
                                    < /div>
                                    < div class="text-center">
                                        < a class="small" href="">Create an Account!< /a>
                                    < /div>
                                    < div class="text-center">
                                        < a class="small" href="">< h3> admin | 123456 으로 접속하여 로그를 분석해주시면 됩니다.< /h3>< /a>
                                    < /div>

                                < /div>
                            < /div>
                        < /div>
                    < /div>
                < /div>

            < /div>

        < /div>

    < /div>

{% endblock %}
{% include 'footer.html' %}



login.html 경로 설정
                           
                                    < form class="user" method="post" action="{% url 'common:login' %}">

common>views.py
config>settings.py
#https://127.0.0.1:8000/account/profile/
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'


common>urls.py
app_name='common'
urlpatterns=[
   path('login/',auth_views.LoginView.as_view(template_name='common/login.html'),name='login'),
   path('logout/',auth_views.LogoutView.as_view,name='logout')
]


django>templates>base.html
                            
                            < div class="dropdown-menu dropdown-menu-right shadow animated--grow-in"
                                aria-labelledby="userDropdown">
                                {% if user.is_authenticated %}
                        < div class="dropdown-divider">< /div>

                        < a class="dropdown-item" href="#">
                                    < i class="fas fa-user fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    마이페이지
                                < /a>
                                < a class="dropdown-item" href="#">
                                    < i class="fas fa-cogs fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    세팅
                                < /a>
                                < a class="dropdown-item" href="#">
                                    < i class="fas fa-list fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    로그
                                < /a>
                                < a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
                                    < i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    로그아웃
                                < /a>

                        {% else %}
                                < a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
                                    < i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    로그인
                                < /a>
                                < a class="dropdown-item" href="#" data-toggle="modal" data-target="#logoutModal">
                                    < i class="fas fa-sign-out-alt fa-sm fa-fw mr-2 text-gray-400">< /i>
                                    회원가입
                                < /a>


                        {% endif %}

                            < /div>

책 참고
프로세스를 다루는 기술


메인페이지 뜨도록 설정하기
INSTALLED_APPS = [
    'init.apps.InitConfig',


cmd
django-admin startapp common
django-admin startapp init

config>urls.py
urlpatterns = [
	path('', include('init.urls')), #대문작업
]

init>urls.py
#127.0.0.1/security/
from django.urls import path
from init import views

app_name='init'
urlpatterns=[
    path('',views.index,name='index'),
]

init>views.py 대문 만들기
from django.shortcuts import render

# Create your views here.
def index(request):
	return render(request,'init/index.html')


templates>init>index.html
{% extends 'base.html' %}

{% block content %}


                
                < div class="container-fluid">

                    
                    < div class="d-sm-flex align-items-center justify-content-between mb-4">
                        < h1 class="h3 mb-0 text-gray-800">Dashboard< /h1>
                        < a href="#" class="d-none d-sm-inline-block btn btn-sm btn-primary shadow-sm">< i
                                class="fas fa-download fa-sm text-white-50">< /i> Generate Report< /a>
                    < /div>

                    
                    < div class="row">

                        
                        < div class="col-xl-3 col-md-6 mb-4">
                            < div class="card border-left-primary shadow h-100 py-2">
                                < div class="card-body">
                                    < div class="row no-gutters align-items-center">
                                        < div class="col mr-2">
                                            < div class="text-xs font-weight-bold text-primary text-uppercase mb-1">
                                                Earnings (Monthly)< /div>
                                            < div class="h5 mb-0 font-weight-bold text-gray-800">$40,000< /div>
                                        < /div>
                                        < div class="col-auto">
                                            < i class="fas fa-calendar fa-2x text-gray-300">< /i>
                                        < /div>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>

                        
                        < div class="col-xl-3 col-md-6 mb-4">
                            < div class="card border-left-success shadow h-100 py-2">
                                < div class="card-body">
                                    < div class="row no-gutters align-items-center">
                                        < div class="col mr-2">
                                            < div class="text-xs font-weight-bold text-success text-uppercase mb-1">
                                                Earnings (Annual)< /div>
                                            < div class="h5 mb-0 font-weight-bold text-gray-800">$215,000< /div>
                                        < /div>
                                        < div class="col-auto">
                                            < i class="fas fa-dollar-sign fa-2x text-gray-300">< /i>
                                        < /div>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>

                        
                        < div class="col-xl-3 col-md-6 mb-4">
                            < div class="card border-left-info shadow h-100 py-2">
                                < div class="card-body">
                                    < div class="row no-gutters align-items-center">
                                        < div class="col mr-2">
                                            < div class="text-xs font-weight-bold text-info text-uppercase mb-1">Tasks
                                            < /div>
                                            < div class="row no-gutters align-items-center">
                                                < div class="col-auto">
                                                    < div class="h5 mb-0 mr-3 font-weight-bold text-gray-800">50%< /div>
                                                < /div>
                                                < div class="col">
                                                    < div class="progress progress-sm mr-2">
                                                        < div class="progress-bar bg-info" role="progressbar"
                                                            style="width: 50%" aria-valuenow="50" aria-valuemin="0"
                                                            aria-valuemax="100">< /div>
                                                    < /div>
                                                < /div>
                                            < /div>
                                        < /div>
                                        < div class="col-auto">
                                            < i class="fas fa-clipboard-list fa-2x text-gray-300">< /i>
                                        < /div>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>

                        
                        < div class="col-xl-3 col-md-6 mb-4">
                            < div class="card border-left-warning shadow h-100 py-2">
                                < div class="card-body">
                                    < div class="row no-gutters align-items-center">
                                        < div class="col mr-2">
                                            < div class="text-xs font-weight-bold text-warning text-uppercase mb-1">
                                                Pending Requests< /div>
                                            < div class="h5 mb-0 font-weight-bold text-gray-800">18< /div>
                                        < /div>
                                        < div class="col-auto">
                                            < i class="fas fa-comments fa-2x text-gray-300">< /i>
                                        < /div>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>
                    < /div>

                    

                    < div class="row">

                        
                        < div class="col-xl-8 col-lg-7">
                            < div class="card shadow mb-4">
                                
                                < div
                                    class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                                    < h6 class="m-0 font-weight-bold text-primary">Earnings Overview< /h6>
                                    < div class="dropdown no-arrow">
                                        < a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
                                            data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                            < i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400">< /i>
                                        < /a>
                                        < div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
                                            aria-labelledby="dropdownMenuLink">
                                            < div class="dropdown-header">Dropdown Header:< /div>
                                            < a class="dropdown-item" href="#">Action< /a>
                                            < a class="dropdown-item" href="#">Another action< /a>
                                            < div class="dropdown-divider">< /div>
                                            < a class="dropdown-item" href="#">Something else here< /a>
                                        < /div>
                                    < /div>
                                < /div>
                                
                                < div class="card-body">
                                    < div class="chart-area">
                                        < canvas id="myAreaChart">< /canvas>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>

                        
                        < div class="col-xl-4 col-lg-5">
                            < div class="card shadow mb-4">
                                
                                < div
                                    class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
                                    < h6 class="m-0 font-weight-bold text-primary">Revenue Sources< /h6>
                                    < div class="dropdown no-arrow">
                                        < a class="dropdown-toggle" href="#" role="button" id="dropdownMenuLink"
                                            data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                                            < i class="fas fa-ellipsis-v fa-sm fa-fw text-gray-400">< /i>
                                        < /a>
                                        < div class="dropdown-menu dropdown-menu-right shadow animated--fade-in"
                                            aria-labelledby="dropdownMenuLink">
                                            < div class="dropdown-header">Dropdown Header:< /div>
                                            < a class="dropdown-item" href="#">Action< /a>
                                            < a class="dropdown-item" href="#">Another action< /a>
                                            < div class="dropdown-divider">< /div>
                                            < a class="dropdown-item" href="#">Something else here< /a>
                                        < /div>
                                    < /div>
                                < /div>
                                
                                < div class="card-body">
                                    < div class="chart-pie pt-4 pb-2">
                                        < canvas id="myPieChart">< /canvas>
                                    < /div>
                                    < div class="mt-4 text-center small">
                                        < span class="mr-2">
                                            < i class="fas fa-circle text-primary">< /i> Direct
                                        < /span>
                                        < span class="mr-2">
                                            < i class="fas fa-circle text-success">< /i> Social
                                        < /span>
                                        < span class="mr-2">
                                            < i class="fas fa-circle text-info">< /i> Referral
                                        < /span>
                                    < /div>
                                < /div>
                            < /div>
                        < /div>
                    < /div>

                    
                    < div class="row">

                        
                        < div class="col-lg-6 mb-4">

                            
                            < div class="card shadow mb-4">
                                < div class="card-header py-3">
                                    < h6 class="m-0 font-weight-bold text-primary">Projects< /h6>
                                < /div>
                                < div class="card-body">
                                    < h4 class="small font-weight-bold">Server Migration < span
                                            class="float-right">20%< /span>< /h4>
                                    < div class="progress mb-4">
                                        < div class="progress-bar bg-danger" role="progressbar" style="width: 20%"
                                            aria-valuenow="20" aria-valuemin="0" aria-valuemax="100">< /div>
                                    < /div>
                                    < h4 class="small font-weight-bold">Sales Tracking < span
                                            class="float-right">40%< /span>< /h4>
                                    < div class="progress mb-4">
                                        < div class="progress-bar bg-warning" role="progressbar" style="width: 40%"
                                            aria-valuenow="40" aria-valuemin="0" aria-valuemax="100">< /div>
                                    < /div>
                                    < h4 class="small font-weight-bold">Customer Database < span
                                            class="float-right">60%< /span>< /h4>
                                    < div class="progress mb-4">
                                        < div class="progress-bar" role="progressbar" style="width: 60%"
                                            aria-valuenow="60" aria-valuemin="0" aria-valuemax="100">< /div>
                                    < /div>
                                    < h4 class="small font-weight-bold">Payout Details < span
                                            class="float-right">80%< /span>< /h4>
                                    < div class="progress mb-4">
                                        < div class="progress-bar bg-info" role="progressbar" style="width: 80%"
                                            aria-valuenow="80" aria-valuemin="0" aria-valuemax="100">< /div>
                                    < /div>
                                    < h4 class="small font-weight-bold">Account Setup < span
                                            class="float-right">Complete!< /span>< /h4>
                                    < div class="progress">
                                        < div class="progress-bar bg-success" role="progressbar" style="width: 100%"
                                            aria-valuenow="100" aria-valuemin="0" aria-valuemax="100">< /div>
                                    < /div>
                                < /div>
                            < /div>

                            
                            < div class="row">
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-primary text-white shadow">
                                        < div class="card-body">
                                            Primary
                                            < div class="text-white-50 small">#4e73df< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-success text-white shadow">
                                        < div class="card-body">
                                            Success
                                            < div class="text-white-50 small">#1cc88a< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-info text-white shadow">
                                        < div class="card-body">
                                            Info
                                            < div class="text-white-50 small">#36b9cc< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-warning text-white shadow">
                                        < div class="card-body">
                                            Warning
                                            < div class="text-white-50 small">#f6c23e< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-danger text-white shadow">
                                        < div class="card-body">
                                            Danger
                                            < div class="text-white-50 small">#e74a3b< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-secondary text-white shadow">
                                        < div class="card-body">
                                            Secondary
                                            < div class="text-white-50 small">#858796< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-light text-black shadow">
                                        < div class="card-body">
                                            Light
                                            < div class="text-black-50 small">#f8f9fc< /div>
                                        < /div>
                                    < /div>
                                < /div>
                                < div class="col-lg-6 mb-4">
                                    < div class="card bg-dark text-white shadow">
                                        < div class="card-body">
                                            Dark
                                            < div class="text-white-50 small">#5a5c69< /div>
                                        < /div>
                                    < /div>
                                < /div>
                            < /div>

                        < /div>

                        < div class="col-lg-6 mb-4">

                            
                            < div class="card shadow mb-4">
                                < div class="card-header py-3">
                                    < h6 class="m-0 font-weight-bold text-primary">Illustrations< /h6>
                                < /div>
                                < div class="card-body">
                                    < div class="text-center">
                                        < img class="img-fluid px-3 px-sm-4 mt-3 mb-4" style="width: 25rem;"
                                            src="img/undraw_posting_photo.svg" alt="...">
                                    < /div>
                                    < p>Add some quality, svg illustrations to your project courtesy of < a
                                            target="_blank" rel="nofollow" href="https://undraw.co/">unDraw< /a>, a
                                        constantly updated collection of beautiful svg images that you can use
                                        completely free and without attribution!< /p>
                                    < a target="_blank" rel="nofollow" href="https://undraw.co/">Browse Illustrations on
                                        unDraw →< /a>
                                < /div>
                            < /div>

                            
                            < div class="card shadow mb-4">
                                < div class="card-header py-3">
                                    < h6 class="m-0 font-weight-bold text-primary">Development Approach< /h6>
                                < /div>
                                < div class="card-body">
                                    < p>SB Admin 2 makes extensive use of Bootstrap 4 utility classes in order to reduce
                                        CSS bloat and poor page performance. Custom CSS classes are used to create
                                        custom components and custom utility classes.< /p>
                                    < p class="mb-0">Before working with this theme, you should become familiar with the
                                        Bootstrap framework, especially the utility classes.< /p>
                                < /div>
                            < /div>

                        < /div>
                    < /div>

                < /div>
                

            < /div>
            

 

{% endblock %}



templates>base.html

            < a class="sidebar-brand d-flex align-items-center justify-content-center" href="/">

...

            
            < li class="nav-item">
                < a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapseTwo"
                    aria-expanded="true" aria-controls="collapseTwo">
                    < i class="fas fa-fw fa-cog">< /i>
                    < span>Components< /span>
                < /a>
                < div id="collapseTwo" class="collapse" aria-labelledby="headingTwo" data-parent="#accordionSidebar">
                    < div class="bg-white py-2 collapse-inner rounded">
                        < h6 class="collapse-header">Custom Components:< /h6>


                     < a class="collapse-item" href="{% url 'security:index' %}">syslog< /a>

...

            
            < li class="nav-item">
                < a class="nav-link collapsed" href="#" data-toggle="collapse" data-target="#collapsePages"
                    aria-expanded="true" aria-controls="collapsePages">
                    < i class="fas fa-fw fa-folder">< /i>
                    < span>Pages< /span>
                < /a>
                < div id="collapsePages" class="collapse" aria-labelledby="headingPages" data-parent="#accordionSidebar">
                    < div class="bg-white py-2 collapse-inner rounded">
                        < h6 class="collapse-header">Login Screens:< /h6>
                        < a class="collapse-item" href="{% url 'common:login' %}">Login< /a>
                        < a class="collapse-item" href="{% url 'common:signup' %}">Signup< /a>


common>urls.py
urlpatterns=[
   path('login/',auth_views.LoginView.as_view(template_name='common/login.html'),name='login'),
   path('logout/',auth_views.LogoutView.as_view,name='logout'),
   path('signup/',views.signup,name='signup'),

]


common>views.py
from django.shortcuts import render

# Create your views here.

def signup(request):
	pass


security>urls.py
#127.0.0.1/security/
from django.urls import path
from . import views

app_name='security'
urlpatterns = [
	path('', views.index, name='index'),
]


에러페이지를 만들어서 오류 상세히 진단
templates>form_errors.html
{% if form.errors %}
  {% for field in form %}
    {% for error in field.errors %}   
       < div class="alert alert-danger">
         < strong>{{field.label}}< /strong>
            {{error}}
      < /div>
     
    {% endfor %}
 {%endfor%}
{%endif%}


common>login.html 추가
                           
                                    < form class="user" method="post" action="{% url 'common:login' %}">
                           {% csrf_token %}
                           {% include "form_errors.html" %}



로그인을 한 뒤에만 syslog 페이지를 볼 수 있도록 하고싶으므로
로그인 하지 않은 상태에서 syslog페이지를 누르면
로그인 페이지로 이동
security>views.py
from django.contrib.auth.decorators import login_required

@login_required(login_url='common:login')
def index(request):