23 changed files with 2359 additions and 0 deletions
-
216.gitignore
-
22mysite/manage.py
-
0mysite/mysite/__init__.py
-
16mysite/mysite/asgi.py
-
129mysite/mysite/settings.py
-
23mysite/mysite/urls.py
-
16mysite/mysite/wsgi.py
-
0mysite/users/__init__.py
-
8mysite/users/admin.py
-
5mysite/users/apps.py
-
30mysite/users/models.py
-
41mysite/users/templates/users/board_delivery.html
-
41mysite/users/templates/users/board_taxi.html
-
318mysite/users/templates/users/delivery.html
-
412mysite/users/templates/users/index.html
-
20mysite/users/templates/users/login.html
-
292mysite/users/templates/users/mypage.html
-
311mysite/users/templates/users/notice.html
-
21mysite/users/templates/users/signup.html
-
320mysite/users/templates/users/taxi.html
-
3mysite/users/tests.py
-
17mysite/users/urls.py
-
98mysite/users/views.py
@ -0,0 +1,216 @@ |
|||
# Created by https://www.toptal.com/developers/gitignore/api/django,python |
|||
# Edit at https://www.toptal.com/developers/gitignore?templates=django,python |
|||
|
|||
### Django ### |
|||
*.log |
|||
*.pot |
|||
*.pyc |
|||
__pycache__/ |
|||
local_settings.py |
|||
db.sqlite3 |
|||
db.sqlite3-journal |
|||
media |
|||
|
|||
# If your build process includes running collectstatic, then you probably don't need or want to include staticfiles/ |
|||
# in your Git repository. Update and uncomment the following line accordingly. |
|||
# <django-project-name>/staticfiles/ |
|||
|
|||
### Django.Python Stack ### |
|||
# Byte-compiled / optimized / DLL files |
|||
*.py[cod] |
|||
*$py.class |
|||
|
|||
# C extensions |
|||
*.so |
|||
|
|||
# Distribution / packaging |
|||
.Python |
|||
build/ |
|||
develop-eggs/ |
|||
dist/ |
|||
downloads/ |
|||
eggs/ |
|||
.eggs/ |
|||
lib/ |
|||
lib64/ |
|||
parts/ |
|||
sdist/ |
|||
var/ |
|||
wheels/ |
|||
share/python-wheels/ |
|||
*.egg-info/ |
|||
.installed.cfg |
|||
*.egg |
|||
MANIFEST |
|||
|
|||
# PyInstaller |
|||
# Usually these files are written by a python script from a template |
|||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
|||
*.manifest |
|||
*.spec |
|||
|
|||
# Installer logs |
|||
pip-log.txt |
|||
pip-delete-this-directory.txt |
|||
|
|||
# Unit test / coverage reports |
|||
htmlcov/ |
|||
.tox/ |
|||
.nox/ |
|||
.coverage |
|||
.coverage.* |
|||
.cache |
|||
nosetests.xml |
|||
coverage.xml |
|||
*.cover |
|||
*.py,cover |
|||
.hypothesis/ |
|||
.pytest_cache/ |
|||
cover/ |
|||
|
|||
# Translations |
|||
*.mo |
|||
|
|||
# Django stuff: |
|||
|
|||
# Flask stuff: |
|||
instance/ |
|||
.webassets-cache |
|||
|
|||
# Scrapy stuff: |
|||
.scrapy |
|||
|
|||
# Sphinx documentation |
|||
docs/_build/ |
|||
|
|||
# PyBuilder |
|||
.pybuilder/ |
|||
target/ |
|||
|
|||
# Jupyter Notebook |
|||
.ipynb_checkpoints |
|||
|
|||
# IPython |
|||
profile_default/ |
|||
ipython_config.py |
|||
|
|||
# pyenv |
|||
# For a library or package, you might want to ignore these files since the code is |
|||
# intended to run in multiple environments; otherwise, check them in: |
|||
# .python-version |
|||
|
|||
# pipenv |
|||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. |
|||
# However, in case of collaboration, if having platform-specific dependencies or dependencies |
|||
# having no cross-platform support, pipenv may install dependencies that don't work, or not |
|||
# install all needed dependencies. |
|||
#Pipfile.lock |
|||
|
|||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow |
|||
__pypackages__/ |
|||
|
|||
# Celery stuff |
|||
celerybeat-schedule |
|||
celerybeat.pid |
|||
|
|||
# SageMath parsed files |
|||
*.sage.py |
|||
|
|||
# Environments |
|||
.env |
|||
.venv |
|||
env/ |
|||
venv/ |
|||
ENV/ |
|||
env.bak/ |
|||
venv.bak/ |
|||
|
|||
# Spyder project settings |
|||
.spyderproject |
|||
.spyproject |
|||
|
|||
# Rope project settings |
|||
.ropeproject |
|||
|
|||
# mkdocs documentation |
|||
/site |
|||
|
|||
# mypy |
|||
.mypy_cache/ |
|||
.dmypy.json |
|||
dmypy.json |
|||
|
|||
# Pyre type checker |
|||
.pyre/ |
|||
|
|||
# pytype static type analyzer |
|||
.pytype/ |
|||
|
|||
# Cython debug symbols |
|||
cython_debug/ |
|||
|
|||
### Python ### |
|||
# Byte-compiled / optimized / DLL files |
|||
|
|||
# C extensions |
|||
|
|||
# Distribution / packaging |
|||
|
|||
# PyInstaller |
|||
# Usually these files are written by a python script from a template |
|||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
|||
|
|||
# Installer logs |
|||
|
|||
# Unit test / coverage reports |
|||
|
|||
# Translations |
|||
|
|||
# Django stuff: |
|||
|
|||
# Flask stuff: |
|||
|
|||
# Scrapy stuff: |
|||
|
|||
# Sphinx documentation |
|||
|
|||
# PyBuilder |
|||
|
|||
# Jupyter Notebook |
|||
|
|||
# IPython |
|||
|
|||
# pyenv |
|||
# For a library or package, you might want to ignore these files since the code is |
|||
# intended to run in multiple environments; otherwise, check them in: |
|||
# .python-version |
|||
|
|||
# pipenv |
|||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. |
|||
# However, in case of collaboration, if having platform-specific dependencies or dependencies |
|||
# having no cross-platform support, pipenv may install dependencies that don't work, or not |
|||
# install all needed dependencies. |
|||
|
|||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow |
|||
|
|||
# Celery stuff |
|||
|
|||
# SageMath parsed files |
|||
|
|||
# Environments |
|||
|
|||
# Spyder project settings |
|||
|
|||
# Rope project settings |
|||
|
|||
# mkdocs documentation |
|||
|
|||
# mypy |
|||
|
|||
# Pyre type checker |
|||
|
|||
# pytype static type analyzer |
|||
|
|||
# Cython debug symbols |
|||
|
|||
# End of https://www.toptal.com/developers/gitignore/api/django,python |
|||
@ -0,0 +1,22 @@ |
|||
#!/usr/bin/env python |
|||
"""Django's command-line utility for administrative tasks.""" |
|||
import os |
|||
import sys |
|||
|
|||
|
|||
def main(): |
|||
"""Run administrative tasks.""" |
|||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') |
|||
try: |
|||
from django.core.management import execute_from_command_line |
|||
except ImportError as exc: |
|||
raise ImportError( |
|||
"Couldn't import Django. Are you sure it's installed and " |
|||
"available on your PYTHONPATH environment variable? Did you " |
|||
"forget to activate a virtual environment?" |
|||
) from exc |
|||
execute_from_command_line(sys.argv) |
|||
|
|||
|
|||
if __name__ == '__main__': |
|||
main() |
|||
@ -0,0 +1,16 @@ |
|||
""" |
|||
ASGI config for mysite project. |
|||
|
|||
It exposes the ASGI callable as a module-level variable named ``application``. |
|||
|
|||
For more information on this file, see |
|||
https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ |
|||
""" |
|||
|
|||
import os |
|||
|
|||
from django.core.asgi import get_asgi_application |
|||
|
|||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') |
|||
|
|||
application = get_asgi_application() |
|||
@ -0,0 +1,129 @@ |
|||
""" |
|||
Django settings for mysite project. |
|||
|
|||
Generated by 'django-admin startproject' using Django 3.1.7. |
|||
|
|||
For more information on this file, see |
|||
https://docs.djangoproject.com/en/3.1/topics/settings/ |
|||
|
|||
For the full list of settings and their values, see |
|||
https://docs.djangoproject.com/en/3.1/ref/settings/ |
|||
""" |
|||
|
|||
from pathlib import Path |
|||
|
|||
# Build paths inside the project like this: BASE_DIR / 'subdir'. |
|||
BASE_DIR = Path(__file__).resolve().parent.parent |
|||
|
|||
|
|||
# Quick-start development settings - unsuitable for production |
|||
# See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ |
|||
|
|||
# SECURITY WARNING: keep the secret key used in production secret! |
|||
SECRET_KEY = '-nhm^l^vj@i61gn2-&6ob(xc!_(wr6p)e6fkoyser^x3#r^zt1' |
|||
|
|||
# SECURITY WARNING: don't run with debug turned on in production! |
|||
DEBUG = True |
|||
|
|||
ALLOWED_HOSTS = [] |
|||
|
|||
|
|||
# Application definition |
|||
|
|||
INSTALLED_APPS = [ |
|||
'django.contrib.admin', |
|||
'django.contrib.auth', |
|||
'django.contrib.contenttypes', |
|||
'django.contrib.sessions', |
|||
'django.contrib.messages', |
|||
'django.contrib.staticfiles', |
|||
'users', |
|||
] |
|||
|
|||
MIDDLEWARE = [ |
|||
'django.middleware.security.SecurityMiddleware', |
|||
'django.contrib.sessions.middleware.SessionMiddleware', |
|||
'django.middleware.common.CommonMiddleware', |
|||
'django.middleware.csrf.CsrfViewMiddleware', |
|||
'django.contrib.auth.middleware.AuthenticationMiddleware', |
|||
'django.contrib.messages.middleware.MessageMiddleware', |
|||
'django.middleware.clickjacking.XFrameOptionsMiddleware', |
|||
] |
|||
|
|||
ROOT_URLCONF = 'mysite.urls' |
|||
|
|||
TEMPLATES = [ |
|||
{ |
|||
'BACKEND': 'django.template.backends.django.DjangoTemplates', |
|||
'DIRS': [], |
|||
'APP_DIRS': True, |
|||
'OPTIONS': { |
|||
'context_processors': [ |
|||
'django.template.context_processors.debug', |
|||
'django.template.context_processors.request', |
|||
'django.contrib.auth.context_processors.auth', |
|||
'django.contrib.messages.context_processors.messages', |
|||
], |
|||
}, |
|||
}, |
|||
] |
|||
|
|||
WSGI_APPLICATION = 'mysite.wsgi.application' |
|||
|
|||
|
|||
# Database |
|||
# https://docs.djangoproject.com/en/3.1/ref/settings/#databases |
|||
|
|||
DATABASES = { |
|||
'default': { |
|||
'ENGINE': 'django.db.backends.mysql', |
|||
'NAME': 'member', |
|||
'USER': 'root', |
|||
'PASSWORD': 'Dkrlehowl3gudwp!', |
|||
'HOST': '127.0.0.1', |
|||
'PORT': '3306', |
|||
} |
|||
} |
|||
|
|||
|
|||
# Password validation |
|||
# https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators |
|||
|
|||
AUTH_PASSWORD_VALIDATORS = [ |
|||
{ |
|||
'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', |
|||
}, |
|||
{ |
|||
'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', |
|||
}, |
|||
{ |
|||
'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', |
|||
}, |
|||
{ |
|||
'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', |
|||
}, |
|||
] |
|||
|
|||
|
|||
# Internationalization |
|||
# https://docs.djangoproject.com/en/3.1/topics/i18n/ |
|||
|
|||
LANGUAGE_CODE = 'ko-kr' |
|||
|
|||
TIME_ZONE = 'Asia/Seoul' |
|||
|
|||
USE_I18N = True |
|||
|
|||
USE_L10N = True |
|||
|
|||
USE_TZ = True |
|||
|
|||
|
|||
# Static files (CSS, JavaScript, Images) |
|||
# https://docs.djangoproject.com/en/3.1/howto/static-files/ |
|||
|
|||
STATIC_URL = '/static/' |
|||
|
|||
AUTH_USER_MODEL = 'users.User' |
|||
|
|||
APPEND_SLASH = False |
|||
@ -0,0 +1,23 @@ |
|||
"""mysite URL Configuration |
|||
|
|||
The `urlpatterns` list routes URLs to views. For more information please see: |
|||
https://docs.djangoproject.com/en/3.1/topics/http/urls/ |
|||
Examples: |
|||
Function views |
|||
1. Add an import: from my_app import views |
|||
2. Add a URL to urlpatterns: path('', views.home, name='home') |
|||
Class-based views |
|||
1. Add an import: from other_app.views import Home |
|||
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') |
|||
Including another URLconf |
|||
1. Import the include() function: from django.urls import include, path |
|||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) |
|||
""" |
|||
|
|||
from django.contrib import admin |
|||
from django.urls import path,include |
|||
|
|||
urlpatterns = [ |
|||
path('admin/', admin.site.urls), |
|||
path('', include("users.urls")), |
|||
] |
|||
@ -0,0 +1,16 @@ |
|||
""" |
|||
WSGI config for mysite project. |
|||
|
|||
It exposes the WSGI callable as a module-level variable named ``application``. |
|||
|
|||
For more information on this file, see |
|||
https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ |
|||
""" |
|||
|
|||
import os |
|||
|
|||
from django.core.wsgi import get_wsgi_application |
|||
|
|||
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings') |
|||
|
|||
application = get_wsgi_application() |
|||
@ -0,0 +1,8 @@ |
|||
from django.contrib import admin |
|||
from .models import Board, User, Notice, Taxi |
|||
# Register your models here. |
|||
|
|||
admin.site.register(User) |
|||
admin.site.register(Board) |
|||
admin.site.register(Notice) |
|||
admin.site.register(Taxi) |
|||
@ -0,0 +1,5 @@ |
|||
from django.apps import AppConfig |
|||
|
|||
|
|||
class UsersConfig(AppConfig): |
|||
name = 'users' |
|||
@ -0,0 +1,30 @@ |
|||
from django.db import models |
|||
from django.contrib.auth.models import AbstractUser |
|||
|
|||
# Create your models here. |
|||
|
|||
class Notice(models.Model): |
|||
author = models.CharField(max_length=10, null=False) |
|||
title = models.CharField(max_length=100, null=False) |
|||
content = models.TextField(null=False) |
|||
created_date = models.DateTimeField(auto_now_add=True) |
|||
modified_date = models.DateTimeField(auto_now=True) |
|||
|
|||
class Board(models.Model): |
|||
author = models.CharField(max_length=10, null=False) |
|||
title = models.CharField(max_length=100, null=False) |
|||
content = models.TextField(null=False) |
|||
created_date = models.DateTimeField(auto_now_add=True) |
|||
modified_date = models.DateTimeField(auto_now=True) |
|||
|
|||
class Taxi(models.Model): |
|||
author = models.CharField(max_length=10, null=False) |
|||
title = models.CharField(max_length=100, null=False) |
|||
content = models.TextField(null=False) |
|||
created_date = models.DateTimeField(auto_now_add=True) |
|||
modified_date = models.DateTimeField(auto_now=True) |
|||
|
|||
|
|||
class User(AbstractUser): |
|||
student_id = models.CharField(max_length=10) |
|||
student_cl = models.CharField(max_length=255) |
|||
@ -0,0 +1,41 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="ko"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title>게시판 - 글쓰기</title> |
|||
</head> |
|||
<body> |
|||
<header> |
|||
<strong>배달 글쓰기</strong> |
|||
</header> |
|||
<div class="container"> |
|||
<form action="" method="POST"> |
|||
{% csrf_token %} |
|||
<div class="form-group row"> |
|||
<label for="inputTitle" class="col-sm-2 col-form-label"><strong>제목</strong></label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" name="title" class="form-control" id="inputTitle"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row"> |
|||
<label for="inputAuthor" class="col-sm-2 col-form-label"><strong>작성자</strong></label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" name="author" class="form-control" id="inputAuthor"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row"> |
|||
<label for="inputContent" class="col-sm-2 col-form-label"><strong>내용</strong></label> |
|||
<div class="col-sm-10"> |
|||
<textarea type="text" name="content" class="form-control" id="inputContent"></textarea> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-auto mr-auto"></div> |
|||
<div class="col-auto"> |
|||
<input class="btn btn-primary" type="submit" role="button" value="글쓰기"> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,41 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="ko"> |
|||
<head> |
|||
<meta charset="UTF-8"> |
|||
<title>게시판 - 글쓰기</title> |
|||
</head> |
|||
<body> |
|||
<header> |
|||
<strong>택시 글쓰기</strong> |
|||
</header> |
|||
<div class="container"> |
|||
<form action="" method="POST"> |
|||
{% csrf_token %} |
|||
<div class="form-group row"> |
|||
<label for="inputTitle" class="col-sm-2 col-form-label"><strong>제목</strong></label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" name="title" class="form-control" id="inputTitle"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row"> |
|||
<label for="inputAuthor" class="col-sm-2 col-form-label"><strong>작성자</strong></label> |
|||
<div class="col-sm-10"> |
|||
<input type="text" name="author" class="form-control" id="inputAuthor"> |
|||
</div> |
|||
</div> |
|||
<div class="form-group row"> |
|||
<label for="inputContent" class="col-sm-2 col-form-label"><strong>내용</strong></label> |
|||
<div class="col-sm-10"> |
|||
<textarea type="text" name="content" class="form-control" id="inputContent"></textarea> |
|||
</div> |
|||
</div> |
|||
<div class="row"> |
|||
<div class="col-auto mr-auto"></div> |
|||
<div class="col-auto"> |
|||
<input class="btn btn-primary" type="submit" role="button" value="글쓰기"> |
|||
</div> |
|||
</div> |
|||
</form> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,318 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<style> |
|||
/* Global */ |
|||
:root { |
|||
--text-color: #f0f4f5; |
|||
--background-color: #263343; |
|||
--accent-color: #d49466; |
|||
} |
|||
|
|||
* { |
|||
/* Tells the browser to account for any border and |
|||
padding in the values you specify for an element's |
|||
width and height. */ |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: 'Source Sans Pro'; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
/* Nav container */ |
|||
.navbar { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 8px 12px; |
|||
background-color: var(--background-color); |
|||
} |
|||
|
|||
/* Logo with text */ |
|||
.navbar__logo { |
|||
margin-left: 40%; |
|||
font-size: 35px; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
.navbar__logo i { |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
/* Menu */ |
|||
.navbar__menu { |
|||
color: #f0f4f5; |
|||
display: flex; |
|||
padding-left: 0; |
|||
margin-right: 50px; |
|||
list-style: none; |
|||
} |
|||
|
|||
.navbar__menu li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
.navbar__menu li:hover { |
|||
background-color: var(--accent-color); |
|||
border-radius: 4px; |
|||
} |
|||
.navbar__icons { |
|||
list-style: none; |
|||
color: var(--text-color); |
|||
display: flex; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
/* Icons */ |
|||
.navbar__icons li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
/* Toggle button */ |
|||
.navbar__toggleBtn { |
|||
display: none; |
|||
position: absolute; |
|||
right: 32px; |
|||
font-size: 24px; |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
.sidemenu { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 120px; |
|||
color: white; |
|||
font-size: 20px; |
|||
margin-top: 60px; |
|||
list-style: none; |
|||
} |
|||
|
|||
#naver_id_login, .next { |
|||
margin-top: 25%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.imgfile { |
|||
margin-top: 20%; |
|||
margin-left: 39%; |
|||
} |
|||
|
|||
|
|||
|
|||
/* For small screen */ |
|||
@media screen and (max-width: 768px) { |
|||
|
|||
.navbar__menu { |
|||
display: none; |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
} |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
display: none; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: inherit; |
|||
} |
|||
|
|||
.board_list_wrap { |
|||
padding: 50px; |
|||
} |
|||
|
|||
.board_list { |
|||
width: 100%; |
|||
border-top: 2px solid navy; |
|||
} |
|||
|
|||
.board_list tr { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
|
|||
.board_list th, |
|||
.board_list td { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.board_list td { |
|||
text-align: center; |
|||
} |
|||
|
|||
.board_list .tit { |
|||
text-align: left; |
|||
} |
|||
|
|||
.board_list .tit:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
.board_list_wrap .paging { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
font-size: 0; |
|||
} |
|||
.board_list_wrap .paging a { |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
padding: 5px 10px; |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
} |
|||
.board_list_wrap .paging a:first-child { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.bt { |
|||
border: 1px solid #eee; |
|||
background: #eee; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num { |
|||
border: 1px solid navy; |
|||
font-weight: 600; |
|||
color: navy; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num.on { |
|||
background: navy; |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
{% comment %} <link rel="stylesheet" href="./main.css" /> |
|||
<link rel="stylesheet" href="./notice.css"> {% endcomment %} |
|||
<link |
|||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" |
|||
rel="stylesheet" |
|||
/> |
|||
<title>Main</title> |
|||
<script |
|||
src="https://kit.fontawesome.com/2d323a629b.js" |
|||
crossorigin="anonymous" |
|||
></script> |
|||
</head> |
|||
<body> |
|||
<nav class="navbar"> |
|||
<!-- Logo with text --> |
|||
<div class="navbar__logo"> |
|||
<i class="fab fa-accusoft"></i> |
|||
<a href='../'>소확프</a> |
|||
</div> |
|||
<!-- Menu --> |
|||
<ul class="navbar__menu"> |
|||
<li><a href="#">문의사항</a></li> |
|||
{% if user.is_authenticated %} |
|||
<li><a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<li><a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
<li><a href="{% url 'user:login' %}">로그인</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
|
|||
<!-- Toggle button --> |
|||
<a href="#" class="navbar__toggleBtn"> |
|||
<i class="fas fa-bars"></i> |
|||
</a> |
|||
<input type="checkbox" id="menuicon"> |
|||
<label for="menuicon"> |
|||
<span></span> |
|||
<span></span> |
|||
<span></span> |
|||
</label> |
|||
<div class = "sidebar"> |
|||
<ul class="side"> |
|||
<li class="sidemenu"><a href="{% url 'user:delivery' %}">배달비</a></li> |
|||
<li class="sidemenu"><a href="{% url 'user:taxi' %}">택시비</a></li> |
|||
<li class="sidemenu"><a href="#">문의사항</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
배 달 |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for board_ds in board_d %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ board_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ board_ds.id }}"> |
|||
<span>{{ board_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
{% if user.is_authenticated %} |
|||
<a class="btn btn-primary" href="/board_delivery" role="button">글쓰기</a> |
|||
{% endif %} |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,412 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<style> |
|||
/* Global */ |
|||
:root { |
|||
--text-color: #f0f4f5; |
|||
--background-color: #263343; |
|||
--accent-color: #d49466; |
|||
} |
|||
|
|||
* { |
|||
/* Tells the browser to account for any border and |
|||
padding in the values you specify for an element's |
|||
width and height. */ |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: 'Source Sans Pro'; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
/* Nav container */ |
|||
.navbar { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 8px 12px; |
|||
background-color: var(--background-color); |
|||
} |
|||
|
|||
/* Logo with text */ |
|||
.navbar__logo { |
|||
margin-left: 40%; |
|||
font-size: 35px; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
.navbar__logo i { |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
/* Menu */ |
|||
.navbar__menu { |
|||
color: #f0f4f5; |
|||
display: flex; |
|||
padding-left: 0; |
|||
margin-right: 50px; |
|||
list-style: none; |
|||
} |
|||
|
|||
.navbar__menu li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
.navbar__menu li:hover { |
|||
background-color: var(--accent-color); |
|||
border-radius: 4px; |
|||
} |
|||
.navbar__icons { |
|||
list-style: none; |
|||
color: var(--text-color); |
|||
display: flex; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
/* Icons */ |
|||
.navbar__icons li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
/* Toggle button */ |
|||
.navbar__toggleBtn { |
|||
display: none; |
|||
position: absolute; |
|||
right: 32px; |
|||
font-size: 24px; |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
.sidemenu { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 120px; |
|||
color: white; |
|||
font-size: 20px; |
|||
margin-top: 60px; |
|||
list-style: none; |
|||
} |
|||
|
|||
#naver_id_login, .next { |
|||
margin-top: 25%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.imgfile { |
|||
margin-top: 20%; |
|||
margin-left: 39%; |
|||
} |
|||
|
|||
|
|||
|
|||
/* For small screen */ |
|||
@media screen and (max-width: 768px) { |
|||
|
|||
.navbar__menu { |
|||
display: none; |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
} |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
display: none; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: inherit; |
|||
} |
|||
|
|||
.board_list_wrap { |
|||
padding: 50px; |
|||
} |
|||
|
|||
.board_list { |
|||
width: 100%; |
|||
border-top: 2px solid navy; |
|||
} |
|||
|
|||
.board_list tr { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
|
|||
.board_list th, |
|||
.board_list td { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.board_list td { |
|||
text-align: center; |
|||
} |
|||
|
|||
.board_list .tit { |
|||
text-align: left; |
|||
} |
|||
|
|||
.board_list .tit:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
.board_list_wrap .paging { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
font-size: 0; |
|||
} |
|||
.board_list_wrap .paging a { |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
padding: 5px 10px; |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
} |
|||
.board_list_wrap .paging a:first-child { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.bt { |
|||
border: 1px solid #eee; |
|||
background: #eee; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num { |
|||
border: 1px solid navy; |
|||
font-weight: 600; |
|||
color: navy; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num.on { |
|||
background: navy; |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
{% comment %} <link rel="stylesheet" href="./main.css" /> |
|||
<link rel="stylesheet" href="./notice.css"> {% endcomment %} |
|||
<link |
|||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" |
|||
rel="stylesheet" |
|||
/> |
|||
<title>Main</title> |
|||
<script |
|||
src="https://kit.fontawesome.com/2d323a629b.js" |
|||
crossorigin="anonymous" |
|||
></script> |
|||
</head> |
|||
<body> |
|||
<!-- Nav container --> |
|||
<nav class="navbar"> |
|||
<!-- Logo with text --> |
|||
<div class="navbar__logo"> |
|||
<i class="fab fa-accusoft"></i> |
|||
<a href='../'>소확프</a> |
|||
</div> |
|||
<!-- Menu --> |
|||
<ul class="navbar__menu"> |
|||
<li><a href="#">문의사항</a></li> |
|||
{% if user.is_authenticated %} |
|||
<li><a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<li><a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
<li><a href="./login">로그인</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
|
|||
<!-- Toggle button --> |
|||
<a href="#" class="navbar__toggleBtn"> |
|||
<i class="fas fa-bars"></i> |
|||
</a> |
|||
<input type="checkbox" id="menuicon"> |
|||
<label for="menuicon"> |
|||
<span></span> |
|||
<span></span> |
|||
<span></span> |
|||
</label> |
|||
<div class = "sidebar"> |
|||
<ul class="side"> |
|||
<li class="sidemenu"><a href='./delivery'>배달비</a></li> |
|||
<li class="sidemenu"><a href='./taxi'>택시비</a></li> |
|||
<li class="sidemenu"><a href="#">문의사항</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
<a href='./notice'>공지사항</a> |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for notice_ds in notice %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ notice_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ notice_ds.id }}"> |
|||
<span>{{ notice_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ notice_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ notice_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
|
|||
</table> |
|||
</div> |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
<a href='./delivery'>배 달</a> |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for board_ds in board_d %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ board_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ board_ds.id }}"> |
|||
<span>{{ board_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
{% comment %} |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for board_ds in board_d %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ board_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ board_ds.id }}"> |
|||
<span>{{ board_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ board_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
</div> {% endcomment %} |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
<a href='./taxi'>택 시</a> |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for taxi_ds in taxi %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ taxi_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ taxi_ds.id }}"> |
|||
<span>{{ taxi_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ taxi_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ taxi_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,20 @@ |
|||
로그인 페이지<br> |
|||
|
|||
{% if user.is_authenticated %} |
|||
로그인성공! |
|||
{{ user.username }}님 환영합니다. |
|||
<a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
|
|||
<form action = "" method = "POST"> |
|||
{% csrf_token %} |
|||
아이디 |
|||
<input name = "username" type = "text"><br> |
|||
비밀번호 |
|||
<input name = "password" type = "password"> |
|||
<input type = "submit" value = "로그인"> |
|||
</form> |
|||
<a href="{% url 'user:signup' %}">회원가입</a> |
|||
|
|||
{% endif %} |
|||
@ -0,0 +1,292 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<style> |
|||
/* Global */ |
|||
:root { |
|||
--text-color: #f0f4f5; |
|||
--background-color: #263343; |
|||
--accent-color: #d49466; |
|||
} |
|||
|
|||
* { |
|||
/* Tells the browser to account for any border and |
|||
padding in the values you specify for an element's |
|||
width and height. */ |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: 'Source Sans Pro'; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
/* Nav container */ |
|||
.navbar { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 8px 12px; |
|||
background-color: var(--background-color); |
|||
} |
|||
|
|||
/* Logo with text */ |
|||
.navbar__logo { |
|||
margin-left: 40%; |
|||
font-size: 35px; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
.navbar__logo i { |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
/* Menu */ |
|||
.navbar__menu { |
|||
color: #f0f4f5; |
|||
display: flex; |
|||
padding-left: 0; |
|||
margin-right: 50px; |
|||
list-style: none; |
|||
} |
|||
|
|||
.navbar__menu li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
.navbar__menu li:hover { |
|||
background-color: var(--accent-color); |
|||
border-radius: 4px; |
|||
} |
|||
.navbar__icons { |
|||
list-style: none; |
|||
color: var(--text-color); |
|||
display: flex; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
/* Icons */ |
|||
.navbar__icons li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
/* Toggle button */ |
|||
.navbar__toggleBtn { |
|||
display: none; |
|||
position: absolute; |
|||
right: 32px; |
|||
font-size: 24px; |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
.sidemenu { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 120px; |
|||
color: white; |
|||
font-size: 20px; |
|||
margin-top: 60px; |
|||
list-style: none; |
|||
} |
|||
|
|||
#naver_id_login, .next { |
|||
margin-top: 25%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.imgfile { |
|||
margin-top: 20%; |
|||
margin-left: 39%; |
|||
} |
|||
|
|||
|
|||
|
|||
/* For small screen */ |
|||
@media screen and (max-width: 768px) { |
|||
|
|||
.navbar__menu { |
|||
display: none; |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
} |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
display: none; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: inherit; |
|||
} |
|||
|
|||
.board_list_wrap { |
|||
padding: 50px; |
|||
} |
|||
|
|||
.board_list { |
|||
width: 100%; |
|||
border-top: 2px solid navy; |
|||
} |
|||
|
|||
.board_list tr { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
|
|||
.board_list th, |
|||
.board_list td { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.board_list td { |
|||
text-align: center; |
|||
} |
|||
|
|||
.board_list .tit { |
|||
text-align: left; |
|||
} |
|||
|
|||
.board_list .tit:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
.board_list_wrap .paging { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
font-size: 0; |
|||
} |
|||
.board_list_wrap .paging a { |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
padding: 5px 10px; |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
} |
|||
.board_list_wrap .paging a:first-child { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.bt { |
|||
border: 1px solid #eee; |
|||
background: #eee; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num { |
|||
border: 1px solid navy; |
|||
font-weight: 600; |
|||
color: navy; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num.on { |
|||
background: navy; |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
{% comment %} <link rel="stylesheet" href="./main.css" /> |
|||
<link rel="stylesheet" href="./notice.css"> {% endcomment %} |
|||
<link |
|||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" |
|||
rel="stylesheet" |
|||
/> |
|||
<title>Main</title> |
|||
<script |
|||
src="https://kit.fontawesome.com/2d323a629b.js" |
|||
crossorigin="anonymous" |
|||
></script> |
|||
</head> |
|||
<body> |
|||
<nav class="navbar"> |
|||
<!-- Logo with text --> |
|||
<div class="navbar__logo"> |
|||
<i class="fab fa-accusoft"></i> |
|||
<a href='../'>소확프</a> |
|||
</div> |
|||
<!-- Menu --> |
|||
<ul class="navbar__menu"> |
|||
<li><a href="#">문의사항</a></li> |
|||
{% if user.is_authenticated %} |
|||
<li><a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<li><a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
<li><a href="./login">로그인</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
|
|||
<!-- Toggle button --> |
|||
<a href="#" class="navbar__toggleBtn"> |
|||
<i class="fas fa-bars"></i> |
|||
</a> |
|||
<input type="checkbox" id="menuicon"> |
|||
<label for="menuicon"> |
|||
<span></span> |
|||
<span></span> |
|||
<span></span> |
|||
</label> |
|||
<div class = "sidebar"> |
|||
<ul class="side"> |
|||
<li class="sidemenu"><a href="{% url 'user:delivery' %}">배달비</a></li> |
|||
<li class="sidemenu"><a href="{% url 'user:taxi' %}">택시비</a></li> |
|||
<li class="sidemenu"><a href="#">문의사항</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
|
|||
<h1>마이페이지 입니다</h1> |
|||
</body> |
|||
</html> |
|||
|
|||
{% comment %} <html> |
|||
<head> |
|||
<title>My Page</title> |
|||
</head> |
|||
<body> |
|||
<h1>마이페이지 페이지입니다</h1> |
|||
<p><a href ='../'>home</a></p> |
|||
</body> |
|||
</html> {% endcomment %} |
|||
@ -0,0 +1,311 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<style> |
|||
/* Global */ |
|||
:root { |
|||
--text-color: #f0f4f5; |
|||
--background-color: #263343; |
|||
--accent-color: #d49466; |
|||
} |
|||
|
|||
* { |
|||
/* Tells the browser to account for any border and |
|||
padding in the values you specify for an element's |
|||
width and height. */ |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: 'Source Sans Pro'; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
/* Nav container */ |
|||
.navbar { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 8px 12px; |
|||
background-color: var(--background-color); |
|||
} |
|||
|
|||
/* Logo with text */ |
|||
.navbar__logo { |
|||
margin-left: 40%; |
|||
font-size: 35px; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
.navbar__logo i { |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
/* Menu */ |
|||
.navbar__menu { |
|||
color: #f0f4f5; |
|||
display: flex; |
|||
padding-left: 0; |
|||
margin-right: 50px; |
|||
list-style: none; |
|||
} |
|||
|
|||
.navbar__menu li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
.navbar__menu li:hover { |
|||
background-color: var(--accent-color); |
|||
border-radius: 4px; |
|||
} |
|||
.navbar__icons { |
|||
list-style: none; |
|||
color: var(--text-color); |
|||
display: flex; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
/* Icons */ |
|||
.navbar__icons li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
/* Toggle button */ |
|||
.navbar__toggleBtn { |
|||
display: none; |
|||
position: absolute; |
|||
right: 32px; |
|||
font-size: 24px; |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
.sidemenu { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 120px; |
|||
color: white; |
|||
font-size: 20px; |
|||
margin-top: 60px; |
|||
list-style: none; |
|||
} |
|||
|
|||
#naver_id_login, .next { |
|||
margin-top: 25%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.imgfile { |
|||
margin-top: 20%; |
|||
margin-left: 39%; |
|||
} |
|||
|
|||
|
|||
|
|||
/* For small screen */ |
|||
@media screen and (max-width: 768px) { |
|||
|
|||
.navbar__menu { |
|||
display: none; |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
} |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
display: none; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: inherit; |
|||
} |
|||
|
|||
.board_list_wrap { |
|||
padding: 50px; |
|||
} |
|||
|
|||
.board_list { |
|||
width: 100%; |
|||
border-top: 2px solid navy; |
|||
} |
|||
|
|||
.board_list tr { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
|
|||
.board_list th, |
|||
.board_list td { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.board_list td { |
|||
text-align: center; |
|||
} |
|||
|
|||
.board_list .tit { |
|||
text-align: left; |
|||
} |
|||
|
|||
.board_list .tit:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
.board_list_wrap .paging { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
font-size: 0; |
|||
} |
|||
.board_list_wrap .paging a { |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
padding: 5px 10px; |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
} |
|||
.board_list_wrap .paging a:first-child { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.bt { |
|||
border: 1px solid #eee; |
|||
background: #eee; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num { |
|||
border: 1px solid navy; |
|||
font-weight: 600; |
|||
color: navy; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num.on { |
|||
background: navy; |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
{% comment %} <link rel="stylesheet" href="./main.css" /> |
|||
<link rel="stylesheet" href="./notice.css"> {% endcomment %} |
|||
<link |
|||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" |
|||
rel="stylesheet" |
|||
/> |
|||
<title>Main</title> |
|||
<script |
|||
src="https://kit.fontawesome.com/2d323a629b.js" |
|||
crossorigin="anonymous" |
|||
></script> |
|||
</head> |
|||
<body> |
|||
<nav class="navbar"> |
|||
<!-- Logo with text --> |
|||
<div class="navbar__logo"> |
|||
<i class="fab fa-accusoft"></i> |
|||
<a href='../'>소확프</a> |
|||
</div> |
|||
<!-- Menu --> |
|||
<ul class="navbar__menu"> |
|||
<li><a href="#">문의사항</a></li> |
|||
{% if user.is_authenticated %} |
|||
<li><a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<li><a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
<li><a href="{% url 'user:login' %}">로그인</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
|
|||
<!-- Toggle button --> |
|||
<a href="#" class="navbar__toggleBtn"> |
|||
<i class="fas fa-bars"></i> |
|||
</a> |
|||
<input type="checkbox" id="menuicon"> |
|||
<label for="menuicon"> |
|||
<span></span> |
|||
<span></span> |
|||
<span></span> |
|||
</label> |
|||
<div class = "sidebar"> |
|||
<ul class="side"> |
|||
<li class="sidemenu"><a href="{% url 'user:delivery' %}">배달비</a></li> |
|||
<li class="sidemenu"><a href="{% url 'user:taxi' %}">택시비</a></li> |
|||
<li class="sidemenu"><a href="#">문의사항</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
공지사항 |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for notice_ds in notice %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ notice_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ notice_ds.id }}"> |
|||
<span>{{ notice_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ notice_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ notice_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,21 @@ |
|||
회원가입 페이지 |
|||
<br> |
|||
|
|||
<form action="" method="POST"> |
|||
{% csrf_token %} |
|||
<p>아이디</p> |
|||
<input name="username" type="text"> |
|||
<p>비밀번호</p> |
|||
<input name="password" type="password"> |
|||
<p>성</p> |
|||
<input name="firstname" type="text"> |
|||
<p>이름</p> |
|||
<input name="lastname" type="text"> |
|||
<p>이메일</p> |
|||
<input name="email" type="text"> |
|||
<p>학번</p> |
|||
<input name="student_id" type="text"> |
|||
<p>학과</p> |
|||
<input name="student_cl" type="text"> |
|||
<input type="submit" value="회원가입"> |
|||
</form> |
|||
@ -0,0 +1,320 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="UTF-8" /> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> |
|||
<style> |
|||
/* Global */ |
|||
:root { |
|||
--text-color: #f0f4f5; |
|||
--background-color: #263343; |
|||
--accent-color: #d49466; |
|||
} |
|||
|
|||
* { |
|||
/* Tells the browser to account for any border and |
|||
padding in the values you specify for an element's |
|||
width and height. */ |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: 'Source Sans Pro'; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
/* Nav container */ |
|||
.navbar { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
padding: 8px 12px; |
|||
background-color: var(--background-color); |
|||
} |
|||
|
|||
/* Logo with text */ |
|||
.navbar__logo { |
|||
margin-left: 40%; |
|||
font-size: 35px; |
|||
color: var(--text-color); |
|||
} |
|||
|
|||
.navbar__logo i { |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
/* Menu */ |
|||
.navbar__menu { |
|||
color: #f0f4f5; |
|||
display: flex; |
|||
padding-left: 0; |
|||
margin-right: 50px; |
|||
list-style: none; |
|||
} |
|||
|
|||
.navbar__menu li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
.navbar__menu li:hover { |
|||
background-color: var(--accent-color); |
|||
border-radius: 4px; |
|||
} |
|||
.navbar__icons { |
|||
list-style: none; |
|||
color: var(--text-color); |
|||
display: flex; |
|||
padding-left: 0; |
|||
} |
|||
|
|||
/* Icons */ |
|||
.navbar__icons li { |
|||
padding: 8px 12px; |
|||
} |
|||
|
|||
/* Toggle button */ |
|||
.navbar__toggleBtn { |
|||
display: none; |
|||
position: absolute; |
|||
right: 32px; |
|||
font-size: 24px; |
|||
color: var(--accent-color); |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
.sidemenu { |
|||
position: relative; |
|||
left: 0px; |
|||
top: 120px; |
|||
color: white; |
|||
font-size: 20px; |
|||
margin-top: 60px; |
|||
list-style: none; |
|||
} |
|||
|
|||
#naver_id_login, .next { |
|||
margin-top: 25%; |
|||
text-align: center; |
|||
} |
|||
|
|||
.imgfile { |
|||
margin-top: 20%; |
|||
margin-left: 39%; |
|||
} |
|||
|
|||
|
|||
|
|||
/* For small screen */ |
|||
@media screen and (max-width: 768px) { |
|||
|
|||
.navbar__menu { |
|||
display: none; |
|||
} |
|||
|
|||
input[id="menuicon"] {display:none;} |
|||
input[id="menuicon"] + label {display:block;margin:30px;width:60px;height:50px;position:absolute;cursor:pointer;} |
|||
input[id="menuicon"] + label span {display:block;position:absolute;width:100%;height:5px;border-radius:30px;background:#000;transition:all .35s;} |
|||
input[id="menuicon"] + label span:nth-child(1) {top:0;} |
|||
input[id="menuicon"] + label span:nth-child(2) {top:50%;transform:translateY(-50%);} /* 비슷하게 사용할 수 있는 style top:calc(50% - 2.5px); margin-top:-2.5px;*/ |
|||
input[id="menuicon"] + label span:nth-child(3) {bottom:0;} |
|||
input[id="menuicon"]:checked + label {z-index:2;} |
|||
input[id="menuicon"]:checked + label span {background:#fff;} |
|||
input[id="menuicon"]:checked + label span:nth-child(1) {top:50%;transform:translateY(-50%) rotate(45deg);} |
|||
input[id="menuicon"]:checked + label span:nth-child(2) {opacity:0;} |
|||
input[id="menuicon"]:checked + label span:nth-child(3) {bottom:50%;transform:translateY(50%) rotate(-45deg);} |
|||
div[class="sidebar"] {width:300px;height:100%;background:#222;position:fixed;top:0;left:-300px;z-index:1;transition:all .35s;} |
|||
input[id="menuicon"]:checked + label + div {left:0;} |
|||
} |
|||
body { |
|||
margin: 0; |
|||
padding: 0; |
|||
} |
|||
|
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
display: none; |
|||
} |
|||
|
|||
a { |
|||
text-decoration: none; |
|||
color: inherit; |
|||
} |
|||
|
|||
.board_list_wrap { |
|||
padding: 50px; |
|||
} |
|||
|
|||
.board_list { |
|||
width: 100%; |
|||
border-top: 2px solid navy; |
|||
} |
|||
|
|||
.board_list tr { |
|||
border-bottom: 1px solid #ccc; |
|||
} |
|||
|
|||
.board_list th, |
|||
.board_list td { |
|||
padding: 10px; |
|||
font-size: 14px; |
|||
} |
|||
|
|||
.board_list td { |
|||
text-align: center; |
|||
} |
|||
|
|||
.board_list .tit { |
|||
text-align: left; |
|||
} |
|||
|
|||
.board_list .tit:hover { |
|||
text-decoration: underline; |
|||
} |
|||
|
|||
.board_list_wrap .paging { |
|||
margin-top: 20px; |
|||
text-align: center; |
|||
font-size: 0; |
|||
} |
|||
.board_list_wrap .paging a { |
|||
display: inline-block; |
|||
margin-left: 10px; |
|||
padding: 5px 10px; |
|||
border-radius: 100px; |
|||
font-size: 12px; |
|||
} |
|||
.board_list_wrap .paging a:first-child { |
|||
margin-left: 0; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.bt { |
|||
border: 1px solid #eee; |
|||
background: #eee; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num { |
|||
border: 1px solid navy; |
|||
font-weight: 600; |
|||
color: navy; |
|||
} |
|||
|
|||
.board_list_wrap .paging a.num.on { |
|||
background: navy; |
|||
color: #fff; |
|||
} |
|||
</style> |
|||
{% comment %} <link rel="stylesheet" href="./main.css" /> |
|||
<link rel="stylesheet" href="./notice.css"> {% endcomment %} |
|||
<link |
|||
href="https://fonts.googleapis.com/css?family=Source+Sans+Pro&display=swap" |
|||
rel="stylesheet" |
|||
/> |
|||
<title>Main</title> |
|||
<script |
|||
src="https://kit.fontawesome.com/2d323a629b.js" |
|||
crossorigin="anonymous" |
|||
></script> |
|||
</head> |
|||
<body> |
|||
<nav class="navbar"> |
|||
<!-- Logo with text --> |
|||
<div class="navbar__logo"> |
|||
<i class="fab fa-accusoft"></i> |
|||
<a href='../'>소확프</a> |
|||
</div> |
|||
<!-- Menu --> |
|||
<ul class="navbar__menu"> |
|||
<li><a href="#">문의사항</a></li> |
|||
{% if user.is_authenticated %} |
|||
<li><a href="{% url 'user:mypage' %}">마이페이지</a> |
|||
<li><a href="{% url 'user:logout' %}">로그아웃 </a> |
|||
{% else %} |
|||
<li><a href="{% url 'user:login' %}">로그인</a></li> |
|||
{% endif %} |
|||
</ul> |
|||
|
|||
<!-- Toggle button --> |
|||
<a href="#" class="navbar__toggleBtn"> |
|||
<i class="fas fa-bars"></i> |
|||
</a> |
|||
<input type="checkbox" id="menuicon"> |
|||
<label for="menuicon"> |
|||
<span></span> |
|||
<span></span> |
|||
<span></span> |
|||
</label> |
|||
<div class = "sidebar"> |
|||
<ul class="side"> |
|||
<li class="sidemenu"><a href="{% url 'user:delivery' %}">배달비</a></li> |
|||
<li class="sidemenu"><a href="{% url 'user:taxi' %}">택시비</a></li> |
|||
<li class="sidemenu"><a href="#">문의사항</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
<div class="board_list_wrap"> |
|||
<table class="board_list"> |
|||
택 시 |
|||
<thead> |
|||
<tr> |
|||
<th>번호</th> |
|||
<th>제목</th> |
|||
<th>글쓴이</th> |
|||
<th>작성일</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody> |
|||
{% for taxi_ds in taxi %} |
|||
<tr class="text-center"> |
|||
<th scope="row"> |
|||
<span>{{ taxi_ds.id }}</span> |
|||
</th> |
|||
<td> |
|||
<a href="detail/{{ taxi_ds.id }}"> |
|||
<span>{{ taxi_ds.title }}</span> |
|||
</a> |
|||
</td> |
|||
<td> |
|||
<span>{{ taxi_ds.author }}</span> |
|||
</td> |
|||
<td> |
|||
<span>{{ taxi_ds.created_date | date:"Y-m-d h:i" }}</span> |
|||
</td> |
|||
</tr> |
|||
{% endfor %} |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
</tbody> |
|||
</table> |
|||
{% if user.is_authenticated %} |
|||
<a class="btn btn-primary" href="/board_taxi" role="button">글쓰기</a> |
|||
{% endif %} |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -0,0 +1,3 @@ |
|||
from django.test import TestCase |
|||
|
|||
# Create your tests here. |
|||
@ -0,0 +1,17 @@ |
|||
from django.urls import path |
|||
from . import views |
|||
|
|||
app_name = "user" |
|||
|
|||
urlpatterns = [ |
|||
path("logout", views.logout_view, name='logout'), |
|||
path("signup", views.signup_view, name='signup'), |
|||
path('login', views.login_view, name='login'), |
|||
path("", views.index, name='index'), |
|||
path('taxi', views.taxi_view, name='taxi'), |
|||
path('delivery', views.delivery_view, name='delivery'), |
|||
path('notice', views.notice_view, name='notice'), |
|||
path('mypage', views.mypage_view, name='mypage'), |
|||
path('board_delivery', views.board_delivery), |
|||
path('board_taxi', views.board_taxi), |
|||
] |
|||
@ -0,0 +1,98 @@ |
|||
from django.contrib.auth import authenticate, login, logout |
|||
from django.shortcuts import redirect, render |
|||
from django.urls.conf import include |
|||
from .models import * |
|||
from django.http.response import HttpResponseRedirect |
|||
from django.urls import reverse |
|||
|
|||
# Create your views here. |
|||
|
|||
def index(request): |
|||
board = {'board_d': Board.objects.all(), 'notice': Notice.objects.all(), 'taxi': Taxi.objects.all()} |
|||
return render(request, 'users/index.html', board) |
|||
|
|||
def mypage_view(request): |
|||
return render(request, 'users/mypage.html') |
|||
|
|||
def taxi_view(request): |
|||
board = {'taxi': Taxi.objects.all()} |
|||
return render(request, 'users/taxi.html', board) |
|||
|
|||
def delivery_view(request): |
|||
board = {'board_d': Board.objects.all()} |
|||
return render(request, 'users/delivery.html', board) |
|||
|
|||
def notice_view(request): |
|||
board = {'notice': Notice.objects.all()} |
|||
return render(request, 'users/notice.html', board) |
|||
|
|||
def login_view(request): |
|||
if request.method == "POST": |
|||
username = request.POST["username"] |
|||
password = request.POST["password"] |
|||
user = authenticate(username=username, password=password) |
|||
if user is not None: |
|||
print("인증성공") |
|||
login(request, user) |
|||
return redirect("user:index") |
|||
else: |
|||
print("인증실패") |
|||
|
|||
return render(request, "users/login.html") |
|||
|
|||
|
|||
|
|||
def logout_view(request): |
|||
logout(request) |
|||
return redirect("user:index") |
|||
|
|||
|
|||
def signup_view(request): |
|||
|
|||
if request.method == "POST": |
|||
print(request.POST) |
|||
username = request.POST["username"] |
|||
password = request.POST["password"] |
|||
firstname = request.POST["firstname"] |
|||
lastname = request.POST["lastname"] |
|||
email = request.POST["email"] |
|||
student_id = request.POST["student_id"] |
|||
student_cl = request.POST["student_cl"] |
|||
|
|||
user = User.objects.create_user(username, email, password) |
|||
user.last_name = lastname |
|||
user.first_name = firstname |
|||
user.student_id = student_id |
|||
user.student_cl = student_cl |
|||
user.save() |
|||
|
|||
|
|||
return redirect("user:login") |
|||
|
|||
return render(request, "users/signup.html") |
|||
|
|||
# 배달게시판 |
|||
def board_delivery(request): |
|||
|
|||
if request.method == "POST": |
|||
author = request.POST['author'] |
|||
title = request.POST['title'] |
|||
content = request.POST['content'] |
|||
board = Board(author=author, title=title, content=content) |
|||
board.save() |
|||
return redirect("user:index") |
|||
else: |
|||
return render(request, 'users/board_delivery.html') |
|||
|
|||
# 택시게시판 |
|||
def board_taxi(request): |
|||
|
|||
if request.method == "POST": |
|||
author = request.POST['author'] |
|||
title = request.POST['title'] |
|||
content = request.POST['content'] |
|||
board = Taxi(author=author, title=title, content=content) |
|||
board.save() |
|||
return redirect("user:index") |
|||
else: |
|||
return render(request, 'users/board_taxi.html') |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue