티스토리 뷰
(macOS)[python][django][RaspberryPi] ERP platform - 4
jinozpersona 2021. 5. 3. 14:02register form
login/logout form
platform 정리
home : notice
sales app 추가
tapp app 제거
Server Test : git transmission : 생략
INTRO
* local / server terminal 구분 : [macOS] / [Raspi]
** venv 표기 : (pyERP)
Raspi : server
- Python : 3.7.3
- django : 3.2
macOS : local-dev
- Python : 3.9.4
- django : 3.2
-------------------- platform review --------------------
browser : localhost:8000
login
sign-up
After Login
browser : localhost:8000/home
After Login : No. 1 click
browser : localhost:8000/home/1
영업관리 click
browser : localhost:8000/sales
영업관리 : No.1 click
browser : localhost:8000/sales/1
영업관리 : 견적서출력 Go! click --> 새창열기
browser : localhost:8000/sales/quotation/1
-------------------- platform review --------------------
가상환경 바로가기 만들기
testerp_venv.sh
#!/bin/bash
source /Users/[YourID]/.virtualenvs/pyERP/bin/activate
cd /Users/[YourID]/.virtualenvs/pyERP/testerp
[macOS]~$ source testerp_venv.sh
[macOS](pyERP)testerp$
@ macOS : local-dev1. platform 정리
[macOS](pyERP)testerp$ ./manage.py startapp sales
platform 정리 : models, DB등록, settings
models : home
{SublimeText} home/models.py
from django.db import models
from django.conf import settings
class Notice(models.Model):
num_cnt = models.IntegerField(primary_key=True)
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
title = models.CharField('제목', max_length=128, null=True)
article = models.CharField('내용', max_length=128, null=True)
date_pub = models.DateField('작성일', null=True)
cnt_view = models.IntegerField('뷰', null=True)
def __str__(self):
return self.title
models : sales
{SublimeText} sales/models.py
from django.conf import settings
from django.db import models
class SalesData(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
num_cnt = models.IntegerField(primary_key=True)
company = models.CharField('Company', max_length=128, null=False)
site = models.CharField('Site', max_length=128, null=False)
customer = models.CharField('담당자', max_length=128, null=False)
category = models.CharField('제품구분', max_length=128, null=False)
item = models.CharField('품명', max_length=128, null=False)
quantity = models.IntegerField('수량', null=False)
dateShip = models.DateField('납품일', null=True)
drawID = models.CharField('DrawingID', max_length=128, null=True)
frameID = models.CharField('FrameID', max_length=128, null=True)
note = models.CharField('비고', max_length=128, null=True)
def __str__(self):
return self.item
DB등록
[macOS](pyERP)testerp$./manage.py makemigrations
[macOS](pyERP)testerp$./manage.py migrate
settings : Add app.
{SublimeText} config/settings.py
# Application definition
INSTALLED_APPS = [
'sales.apps.SalesConfig',
'home.apps.HomeConfig',
# 'tapp',
....
]
....
LOGIN_REDIRECT_URL = '/home'
LOGOUT_REDIRECT_URL = '/'
platform 정리 : urls
urls : config/urls
{SublimeText} config/urls.py
from django.contrib import admin
from django.urls import path, include
# from tapp import urls
from home import urls, views
from sales import urls
from django.contrib.auth import views as auth_views
from django.views.generic import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('', TemplateView.as_view(template_name='welcome.html'), name='welcome'),
path('login/', auth_views.LoginView.as_view(template_name='login.html'), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('signup/', views.signup, name='signup'),
path('signup_waiting/', TemplateView.as_view(template_name='signup_waiting.html'), name='signup_waiting'),
path('home/', include("home.urls")),
path('sales/', include("sales.urls")),
# path('tapp/', include("tapp.urls")),
]
urls : home/urls
{SublimeText} home/urls.py
from django.contrib import admin
from django.urls import path
from home import views
urlpatterns = [
path('', views.index_home, name='index_home'),
path('<int:pk>/', views.index_home_detail, name='index_home_detail'),
]
urls : sales/urls
{SublimeText} sales/urls.py
from django.contrib import admin
from django.urls import path
from sales import views
urlpatterns = [
path('', views.index_sales, name='index_sales'),
path('<int:pk>/', views.index_sales_detail, name='index_sales_detail'),
path('quotation/<int:pk>/', views.Quotation, name='quotation'),
]
platform 정리 : views
views : home
{SublimeText} home/views.py
from django.shortcuts import render, redirect
from django.contrib import auth
from django.contrib.auth.models import User
from django.contrib.auth import authenticate
from django.contrib.auth.decorators import login_required
from home.models import Notice
def signup(request):
if request.method == 'POST':
if request.POST['password1'] == request.POST['password2']:
user = User.objects.create_user(username=request.POST['username'], password=request.POST['password1'], email=request.POST['email'],)
auth.login(request, user)
return redirect('/signup_waiting')
return render(request, 'signup.html')
return render(request, 'signup.html')
@login_required
def index_home(request):
Notices = Notice.objects.all()
context = {'Notices': Notices}
return render(request, 'index_home.html', context)
def index_home_detail(request, pk):
Notices = Notice.objects.all()
Notice_view = Notice.objects.get(pk=pk)
context = {'Notices': Notices, 'Notice_view': Notice_view}
return render(request, 'index_home_detail.html', context)
views : sales
{SublimeText} sales/views.py
from django.shortcuts import render, redirect
from sales.models import SalesData
from django.contrib.auth.decorators import login_required
@login_required
def index_sales(request):
SalesDatas = SalesData.objects.all()
context = {'SalesDatas': SalesDatas}
return render(request, 'index_sales.html', context)
def index_sales_detail(request, pk):
SalesDatas = SalesData.objects.all()
SalesData_view = SalesData.objects.get(pk=pk)
context = {'SalesDatas': SalesDatas, 'SalesData_view': SalesData_view}
return render(request, 'index_sales_detail.html', context)
def Quotation(request, pk):
Quotation = SalesData.objects.get(pk=pk)
context = {'Quotation':Quotation}
return render(request, 'quotation.html', context)
admin : home
{SublimeText} home/admin.py
from django.contrib import admin
from home.models import Notice
class NoticeAdmin(admin.ModelAdmin):
search_fields = ['title']
admin.site.register(Notice, NoticeAdmin)
admin : sales
{SublimeText} sales/admin.py
from django.contrib import admin
from sales.models import SalesData
class SalesDataAdmin(admin.ModelAdmin):
search_fields = ['item']
admin.site.register(SalesData, SalesDataAdmin)
platform 정리 : templates
templates : root
{SublimeText} templates/welcome.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome_PERSONA_ERP</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="{% static 'css/style_home.css' %}">
</head>
<body>
<div id="container">
<div id="header">
<!-- <h1>Responsive Layout</h1> -->
<div class="logo">
<a href="{% url 'welcome' %}"><img src="{% static 'img/logo_w_persona.png' %}" width="140" height="38"></a>
</div>
<div class="h-item">
{% if user.is_authenticated %}
<a href="{% url 'logout' %}"><input type="submit" value="{{ user.username }} (Logout)"></a>
{% else %}
<a href="{% url 'login' %}"><input type="submit" value="Login"></a>
<a href="{% url 'signup' %}"><button type="submit">Sign-Up</button></a>
{% endif %}
</div>
</div>
<div id="m-content">
<h2>Thanks to visit PERSONA ERP</h2>
<h3>기존회원로그인</h3>
<p>로그인 후 모든 서비스를 사용할 수 있음.</p>
<h3>회원가입안내</h3>
<p>회원가입 승인 후 모든 서비스를 사용할 수 있음.</p>
</div>
{% block logform %}
{% endblock %}
<div id="footer">
<p>Copyright © PERSONA All rights reversed.</p>
</div>
</div>
</body>
</html>
templates : root
{SublimeText} templates/base.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>{% block title %}{{ section.title }}{% endblock %}</title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="{% static 'css/style_home.css' %}">
</head>
<body>
<div id="container">
<div id="header">
<div class="logo">
<a href="{% url 'index_home' %}"><img src="{% static 'img/logo_w_persona.png' %}" width="140" height="38"></a>
</div>
<div class="h-item">
{% if user.is_authenticated %}
<a href="{% url 'logout' %}"><input type="submit" value="{{ user.username }} (Logout)"></a>
{% else %}
<a href="{% url 'login' %}"><input type="submit" value="Login"></a>
{% endif %}
</div>
<div class="search-item">
<input type="search" name="q" placeholder="Search query">
<input type="submit" value="Go!">
</div>
</div>
{% include "navbar_main.html" %}
<div id="m-content">
{% block content1 %}
{% endblock %}
</div>
{% include "navbar_sub.html" %}
<div id="s-content">
{% block content2 %}
{% endblock %}
</div>
<div id="footer">
<p>Copyright © PERSONA All rights reversed.</p>
</div>
</div>
</body>
</html>
templates : root
{SublimeText} templates/login.html
{% extends 'welcome.html' %}
{% block logform %}
{% include "navbar_login.html" %}
<div id="s-content">
<div>
<form method="POST" class="post-form" action="{% url 'login' %}">
{% csrf_token %}
{% include "form_errors.html" %}
<div>
<label for="username">User-ID</label><br>
<input type="text" name="username" id="username"
value="{{ form.username.value|default_if_none:'' }}">
</div>
<div>
<label for="password">Password</label><br>
<input type="password" name="password" id="password"
value="{{ form.password.value|default_if_none:'' }}">
</div>
<button type="submit">Login</button>
</form>
</div>
</div>
{% endblock %}
templates : root
{SublimeText} templates/signup.html
{% extends 'welcome.html' %}
{% block logform %}
{% include "navbar_signup.html" %}
<div id="s-content">
<div>
<form method="POST" class="post-form">
{% csrf_token %}
{% include "form_errors.html" %}
<div>
<label for="username">User-ID</label><br>
<input type="text" name="username" id="username"
value="{{ form.username.value|default_if_none:'' }}">
</div>
<div>
<label for="password1">Password</label><br>
<input type="password" name="password1" id="password1"
value="{{ form.password1.value|default_if_none:'' }}">
</div>
<div>
<label for="password2">Password Confirm</label><br>
<input type="password" name="password2" id="password2"
value="{{ form.password2.value|default_if_none:'' }}">
</div>
<div>
<label for="email">E-mail</label><br>
<input type="text" name="email" id="email"
value="{{ form.email.value|default_if_none:'' }}">
</div>
<a href="{% url 'signup_waiting' %}"><button type="submit">Create</button></a>
</form>
</div>
</div>
{% endblock %}
templates : root
{SublimeText} templates/signup_waiting.html
{% extends 'welcome.html' %}
{% block logform %}
<div id="s-content">
<h3>{{ user.username }}님 반갑습니다~^^</h3>
<h3>{{ user.email }}로 관리자 승인 여부 확인 후 회신 예정입니다.</h3>
</div>
{% endblock %}
templates : root
{SublimeText} templates/form_errors.html
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div>
<strong>{{ field.label }}</strong>
{{ error }}
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div>
<strong>{{ error }}</strong>
</div>
{% endfor %}
{% endif %}
templates : root
{SublimeText} templates/navbar_main.html
<nav class="nav_main">
<ul>
<li><a href="{% url 'index_home' %}">공지사항</a></li>
<li><a href="{% url 'index_sales' %}">영업관리</a></li>
<li><a href="#">생산관리</a></li>
<li><a href="#">구매관리</a></li>
<li><a href="#">품질관리</a></li>
<li><a href="#">원가관리</a></li>
<li><a href="#">인사관리</a></li>
<li><a href="#">회계관리</a></li>
<li><a href="#">무역관리</a></li>
<li><a href="#">경영관리</a></li>
</ul>
</nav>
templates : root
{SublimeText} templates/navbar_sub.html
<nav class="nav_sub">
<ul>
<li><a href="#">상세내용</a></li>
</ul>
</nav>
templates : root
{SublimeText} templates/navbar_login.html
<nav class="nav_sub" style="color: white; font-size: 20px">
<ul>
<li>Login</li>
</ul>
</nav>
templates : root
{SublimeText} templates/navbar_signup.html
<nav class="nav_sub" style="color: white; font-size: 20px">
<ul>
<li>Sign-Up</li>
</ul>
</nav>
templates : home
{SublimeText} home/templates/index_home.html
{% extends 'base.html' %}
<!--navbar_main -->
<!-- Main block -->
{% block content1 %}
<h2>공지사항</h2>
<table>
<thead>
<tr>
<td><B>No.</B></td>
<td><B>작성자</B></td>
<td><B>제목</B></td>
<td><B>작성일</B></td>
<td><B>조회</B></td>
</tr>
</thead>
<tbody>
{% for Notice in Notices %}
<tr>
<td><a href="{% url 'index_home_detail' Notice.pk %}">{{Notice.num_cnt}}</a></td>
<td>{{Notice.author}}</td>
<td>{{Notice.title}}</td>
<td>{{Notice.date_pub}}</td>
<td>{{Notice.cnt_view}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
<!-- End Main block -->
<!--navbar_sub -->
<!-- Sub block -->
{% block content2 %}
{% endblock %}
<!-- End Sub block -->
templates : home
{SublimeText} home/templates/index_home_detail.html
{% extends 'base.html' %}
<!--navbar_main -->
<!-- Main block -->
{% block content1 %}
<h2>공지사항</h2>
<table>
<thead>
<tr>
<td><B>No.</B></td>
<td><B>작성자</B></td>
<td><B>제목</B></td>
<td><B>작성일</B></td>
<td><B>조회</B></td>
</tr>
</thead>
<tbody>
{% for Notice in Notices %}
<tr>
<td><a href="{% url 'index_home_detail' Notice.pk %}">{{Notice.num_cnt}}</a></td>
<td>{{Notice.author}}</td>
<td>{{Notice.title}}</td>
<td>{{Notice.date_pub}}</td>
<td>{{Notice.cnt_view}}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
<!-- End Main block -->
<!--navbar_sub -->
<!-- Sub block -->
{% block content2 %}
<h2>{{Notice_view.title}}</h2>
<p>{{Notice_view.article}}</p>
{% endblock %}
<!-- End Sub block -->
templates : sales
{SublimeText} sales/templates/index_sales.html
{% extends 'base.html' %}
<!--navbar_main -->
<!-- Main block -->
{% block content1 %}
<h2>영업관리 리스트</h2>
<table>
<thead>
<tr>
<td><B>No.</B></td>
<td><B>Company</B></td>
<td><B>제품구분</B></td>
<td><B>품명</B></td>
<td><B>수량</B></td>
<td><B>납품일</B></td>
<td><B>견적서출력</B></td>
</tr>
</thead>
<tbody>
{% for SalesData in SalesDatas %}
<tr>
<td><a href="{% url 'index_sales_detail' SalesData.pk %}">{{SalesData.num_cnt}}</a></td>
<td>{{SalesData.company}}</td>
<td>{{SalesData.category}}</td>
<td>{{SalesData.item}}</td>
<td>{{SalesData.quantity}}</td>
<td>{{SalesData.dateShip}}</td>
<td><a href="{% url 'quotation' SalesData.pk %}" target='_blank'>Go!</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
<!-- End Main block -->
<!--navbar_sub -->
<!-- Sub block -->
{% block content2 %}
{% endblock %}
<!-- End Sub block -->
templates : sales
{SublimeText} sales/templates/index_sales_detail.html
{% extends 'base.html' %}
<!--navbar_main -->
<!-- Main block -->
{% block content1 %}
<h2>영업관리 리스트</h2>
<table>
<thead>
<tr>
<td><B>No.</B></td>
<td><B>Company</B></td>
<td><B>제품구분</B></td>
<td><B>품명</B></td>
<td><B>수량</B></td>
<td><B>납품일</B></td>
<td><B>견적서출력</B></td>
</tr>
</thead>
<tbody>
{% for SalesData in SalesDatas %}
<tr>
<td><a href="{% url 'index_sales_detail' SalesData.pk %}">{{SalesData.num_cnt}}</a></td>
<td>{{SalesData.company}}</td>
<td>{{SalesData.category}}</td>
<td>{{SalesData.item}}</td>
<td>{{SalesData.quantity}}</td>
<td>{{SalesData.dateShip}}</td>
<td><a href="{% url 'quotation' SalesData.pk %}" target='_blank'>Go!</a></td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
<!-- End Main block -->
<!--navbar_sub -->
<!-- Sub block -->
{% block content2 %}
<h3>영업정보</h3>
<table>
<thead>
<tr>
<td><B>No.</B></td>
<td><B>영업담당자</B></td>
<td><B>고객사</B></td>
<td><B>Fab-Site</B></td>
<td><B>고객명</B></td>
<td><B>제품구분</B></td>
<td><B>품명</B></td>
<td><B>수량</B></td>
<td><B>납품일</B></td>
<td><B>DrawingID</B></td>
<td><B>AssemblyID</B></td>
<td><B>비고</B></td>
</tr>
</thead>
<tbody>
<tr>
<td>{{SalesData_view.num_cnt}}</td>
<td>{{SalesData_view.author}}</td>
<td>{{SalesData_view.company}}</td>
<td>{{SalesData_view.site}}</td>
<td>{{SalesData_view.customer}}</td>
<td>{{SalesData_view.category}}</td>
<td>{{SalesData_view.item}}</td>
<td>{{SalesData_view.quantity}}</td>
<td>{{SalesData_view.dateShip}}</td>
<td>{{SalesData_view.drawID}}</td>
<td>{{SalesData_view.frameID}}</td>
<td>{{SalesData_view.note}}</td>
</tr>
</tbody>
</table>
<h3>소재정보</h3>
<table>
<thead>
<tr>
<td><B>MTL No.</B></td>
<td><B>Maker</B></td>
<td><B>소재종류</B></td>
<td><B>두께</B></td>
<td><B>폭</B></td>
<td><B>길이</B></td>
<td><B>입고중량</B></td>
<td><B>잔량</B></td>
<td><B>단가</B></td>
<td><B>입고일</B></td>
<td><B>위치</B></td>
<td><B>성적서</B></td>
<td><B>특이사항</B></td>
</tr>
</thead>
<tbody>
<tr>
<td>List-up</td>
</tr>
</tbody>
</table>
<h3>생산이력</h3>
<table>
<thead>
<tr>
<td><B>수입검사여부</B></td>
<td><B>관리번호</B></td>
<td><B>품명</B></td>
<td><B>생산일</B></td>
<td><B>생산특이사항</B></td>
<td><B>품질특이사항</B></td>
<td><B>출하특이사항</B></td>
<td><B>고객특이사항</B></td>
</tr>
</thead>
<tbody>
<tr>
<td>List-up</td>
</tr>
</tbody>
</table>
{% endblock %}
templates : sales
{SublimeText} sales/templates/quotation.html
{% load static %}
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{% block title %}{{ section.title }}{% endblock %}</title>
<link rel="stylesheet" href="{% static 'css/style_home.css' %}">
</head>
<table class="tg" style="undefined;table-layout: fixed; width: 800px">
<colgroup>
<col style="width: 50px">
<col style="width: 240px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
<col style="width: 70px">
</colgroup>
<thead>
<tr>
<th class="tg-jbyd" colspan="2" rowspan="2"><img src="{% static 'img/logo_w_persona.png' %}" width="140" height="38"></th>
<th class="tg-ymap" colspan="8" rowspan="2">견 적 서</th>
</tr>
<tr></tr>
</thead>
<tbody>
<tr>
<td class="tg-wp8o" colspan="3">{{Quotation.company}}</td>
<td class="tg-wp8o" colspan="2"></td>
<td class="tg-j4pq">상호</td>
<td class="tg-j4pq" colspan="4">PERSONA</td>
</tr>
<tr>
<td class="tg-wp8o" colspan="3">{{Quotation.customer}}</td>
<td class="tg-wp8o" colspan="2">귀중</td>
<td class="tg-j4pq">주소</td>
<td class="tg-j4pq" colspan="4">https://jinozblog.tistory.com/</td>
</tr>
<tr>
<td class="tg-73oq" colspan="5" rowspan="2">아래와 같이 견적합니다.</td>
<td class="tg-j4pq">업태</td>
<td class="tg-j4pq">제조</td>
<td class="tg-j4pq">종목</td>
<td class="tg-j4pq" colspan="2">Machine Parts</td>
</tr>
<tr>
<td class="tg-fm1z">연락처</td>
<td class="tg-fm1z" colspan="4">+82-10-0000-0000</td>
</tr>
<tr>
<td class="tg-73oq" colspan="10"></td>
</tr>
<tr>
<td class="tg-wp8o">No.</td>
<td class="tg-wp8o" colspan="2">Product</td>
<td class="tg-wp8o">Material</td>
<td class="tg-wp8o">Size</td>
<td class="tg-wp8o">Quantity</td>
<td class="tg-wp8o">Cost</td>
<td class="tg-wp8o">Sum</td>
<td class="tg-wp8o" colspan="2">Note</td>
</tr>
<tr>
<td class="tg-wp8o">1</td>
<td class="tg-wp8o" colspan="2">{{Quotation.item}}</td>
<td class="tg-wp8o">{{Quotation.category}}</td>
<td class="tg-wp8o">{{Quotation.layer}}</td>
<td class="tg-wp8o">{{Quotation.quantity}}</td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o" colspan="2"></td>
</tr>
<tr>
<td class="tg-wp8o">2</td>
<td class="tg-wp8o" colspan="2"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o" colspan="2"></td>
</tr>
<tr>
<td class="tg-wp8o">3</td>
<td class="tg-wp8o" colspan="2"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o" colspan="2"></td>
</tr>
<tr>
<td class="tg-wp8o">4</td>
<td class="tg-wp8o" colspan="2"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o" colspan="2"></td>
</tr>
<tr>
<td class="tg-wp8o">5</td>
<td class="tg-wp8o" colspan="2"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o"></td>
<td class="tg-wp8o" colspan="2"></td>
</tr>
<tr>
<td class="tg-wp8o" colspan="5">합계</td>
<td class="tg-73oq" colspan="5"></td>
</tr>
<tr>
<td class="tg-xwyw" rowspan="2" colspan="1">특이사항</td>
<td class="tg-73oq" colspan="9">VAT별도</td>
</tr>
<tr>
<td class="tg-73oq" colspan="9">대금지급 / 납기 별도 협의</td>
</tr>
</tbody>
</table>
</html>
static : css
{SublimeText} static/css/style_home.css
table {
width: 70%;
border: 1px solid #444444;
border-collapse: collapse;
text-align:center;vertical-align:top
}
thead, tbody {
border: 1px solid #444444;
border-collapse: collapse;
}
input[type="text"] {
margin: 5px;
padding: 5px;
border: solid 2px #bcbcbc;
border-radius: 4px;
}
input[type="password"] {
margin: 5px;
padding: 5px;
border: solid 2px #bcbcbc;
border-radius: 4px;
background-color: #000000;
}
#container {
width: auto;
padding: 5px;
border: 1px solid #bcbcbc;
}
#header {
height: 45px;
padding: 1px;
margin-bottom: 5px;
border: 1px solid #bcbcbc;
display: flex;
align-items: center;
}
.logo {
margin: 5px;
padding: 5px;
}
.h-item {
margin: 5px;
padding: 10px;
}
.search-item {
margin: 5px;
padding: 5px;
display: flex;
}
.nav_main {
height:24px;
background-color: #000000;
display: flex;
align-items: center;
}
.nav_sub {
height:18px;
background-color: #808080;
display: flex;
align-items: center;
}
nav ul {
padding: 5px;
display: flex;
}
nav li {
display: inline;
padding-left: 20px;
}
nav a {
display: inline-block;
font-size: 18px;
text-transform: uppercase;
text-decoration: none;
color: white;
}
#m-content {
width: auto;
padding: 10px;
margin-top: 5px;
margin-bottom: 5px;
border: 2px solid #000080;
}
#s-content {
width: auto;
padding: 10px;
margin-top: 5px;
margin-bottom: 5px;
border: 2px solid #008080;
}
#footer {
clear: both;
padding-left: 10px;
border: 1px solid #bcbcbc;
}
.tg {border-collapse:collapse;border-spacing:0;}
.tg td{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
overflow:hidden;padding:8px 10px;word-break:normal;}
.tg th{border-color:black;border-style:solid;border-width:1px;font-family:Arial, sans-serif;font-size:14px;
font-weight:normal;overflow:hidden;padding:8px 10px;word-break:normal;}
.tg .tg-j4pq{background-color:#efefef;border-color:#000000;text-align:center;vertical-align:top}
.tg .tg-wp8o{border-color:#000000;text-align:center;vertical-align:top}
.tg .tg-jbyd{background-color:#ffffff;border-color:#000000;text-align:center;vertical-align:top}
.tg .tg-ymap{background-color:#ffffff;border-color:#000000;font-family:Arial, Helvetica, sans-serif !important;;font-size:28px;
text-align:center;vertical-align:middle}
.tg .tg-73oq{border-color:#000000;text-align:left;vertical-align:top}
.tg .tg-fm1z{background-color:#f0f0f0;border-color:#000000;text-align:center;vertical-align:top}
.tg .tg-xwyw{border-color:#000000;text-align:center;vertical-align:middle}
[macOS](pyERP)testerp$ ./manage.py collectstatic
[macOS](pyERP)testerp$ tree
.
├── config
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── home
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── templates
│ │ ├── index_home.html
│ │ └── index_home_detail.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── manage.py
├── sales
│ ├── admin.py
│ ├── apps.py
│ ├── migrations
│ ├── models.py
│ ├── templates
│ │ ├── index_sales.html
│ │ ├── index_sales_detail.html
│ │ └── quotation.html
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── secret.json
├── static
│ ├── admin
│ ├── css
│ │ └── style_home.css
│ ├── img
│ │ ├── logo_b_persona.png
│ │ └── logo_w_persona.png
│ └── js
├── staticfiles
│ ├── admin
│ ├── css
│ │ └── style_home.css
│ ├── img
│ │ ├── logo_b_persona.png
│ │ └── logo_w_persona.png
│ └── js
└── templates
├── base.html
├── form_errors.html
├── login.html
├── navbar_login.html
├── navbar_main.html
├── navbar_signup.html
├── navbar_sub.html
├── signup.html
├── signup_waiting.html
└── welcome.html
'python > django_ERP1' 카테고리의 다른 글
(macOS)[python][django][RaspberryPi] ERP platform - 5 : sales (0) | 2021.05.31 |
---|---|
(macOS)[python][django][RaspberryPi] ERP platform - 5 : home, notice (0) | 2021.05.13 |
(macOS)[python][django][RaspberryPi] ERP platform - 3 (0) | 2021.04.23 |
(macOS)[python][django][RaspberryPi] ERP platform - 2 (0) | 2021.04.19 |
(macOS)[python][django][RaspberryPi] ERP platform - 1 (0) | 2021.04.15 |
- Total
- Today
- Yesterday
- Templates
- COVID-19
- analysis
- raspberrypi
- server
- pyserial
- arduino
- DAQ
- Raspberry Pi
- DS18B20
- Python
- Regression
- sublime text
- MacOS
- vscode
- 코로나
- CSV
- 코로나19
- Pandas
- 라즈베리파이
- 자가격리
- template
- SSH
- r
- ERP
- git
- github
- Django
- 확진
- Model
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |