diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/__init__.py b/GalaxyDimension/Round1/Django CRUD/costory/costory/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/__init__.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..2c47c4f Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/__init__.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/settings.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/settings.cpython-37.pyc new file mode 100644 index 0000000..d122621 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/settings.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/urls.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/urls.cpython-37.pyc new file mode 100644 index 0000000..1c5979f Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/urls.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/wsgi.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/wsgi.cpython-37.pyc new file mode 100644 index 0000000..76351fe Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/costory/__pycache__/wsgi.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/settings.py b/GalaxyDimension/Round1/Django CRUD/costory/costory/settings.py new file mode 100644 index 0000000..6341d23 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/costory/settings.py @@ -0,0 +1,122 @@ +""" +Django settings for costory project. + +Generated by 'django-admin startproject' using Django 2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.2/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'd=cwoga(*8k%s#-rl)3q1#6$!$kh2k36#(qrsy!@u+k!b@hmgc' + +# 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', + 'posts', + #'django_seed' +] + +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 = 'costory.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 = 'costory.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.2/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/2.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Asia/Seoul' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ + +STATIC_URL = '/static/' diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/urls.py b/GalaxyDimension/Round1/Django CRUD/costory/costory/urls.py new file mode 100644 index 0000000..fafd852 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/costory/urls.py @@ -0,0 +1,23 @@ +"""costory URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/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 +from django.urls import include + +urlpatterns = [ + path('admin/', admin.site.urls), + path('', include('posts.urls')) +] \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/costory/wsgi.py b/GalaxyDimension/Round1/Django CRUD/costory/costory/wsgi.py new file mode 100644 index 0000000..0011b61 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/costory/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for costory 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/2.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'costory.settings') + +application = get_wsgi_application() diff --git a/GalaxyDimension/Round1/Django CRUD/costory/manage.py b/GalaxyDimension/Round1/Django CRUD/costory/manage.py new file mode 100644 index 0000000..eb2a622 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/manage.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'costory.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() diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__init__.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/__init__.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..a1bd90e Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/__init__.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/admin.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/admin.cpython-37.pyc new file mode 100644 index 0000000..5439716 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/admin.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/forms.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/forms.cpython-37.pyc new file mode 100644 index 0000000..b329ba2 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/forms.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/models.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/models.cpython-37.pyc new file mode 100644 index 0000000..e7cc64c Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/models.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/urls.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/urls.cpython-37.pyc new file mode 100644 index 0000000..d2c6f79 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/urls.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/validators.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/validators.cpython-37.pyc new file mode 100644 index 0000000..0c5dd2d Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/validators.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/views.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/views.cpython-37.pyc new file mode 100644 index 0000000..9ac8b3e Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/__pycache__/views.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/admin.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/admin.py new file mode 100644 index 0000000..8bed62b --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Post + + +# Register your models here. +admin.site.register(Post) diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/apps.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/apps.py new file mode 100644 index 0000000..2c2b982 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/apps.py @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class PostsConfig(AppConfig): + name = 'posts' diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/forms.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/forms.py new file mode 100644 index 0000000..ec32f5b --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/forms.py @@ -0,0 +1,23 @@ +from django import forms +from django.core.exceptions import ValidationError +from .models import Post +from .validators import validate_symbols + + +class PostForm(forms.ModelForm): + + class Meta: + model = Post + fields = ['title', 'content'] + widgets = { + 'title': forms.TextInput(attrs={ + 'class': 'title', + 'placeholder': '제목을 입력하세요'}), + 'content': forms.Textarea(attrs={ + 'placeholder': '내용을 입력하세요'})} + + def clean_title(self): + title = self.cleaned_data['title'] + if '*' in title: + raise ValidationError('* 는 포함될 수 없습니다.') + return title diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/0001_initial.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/0001_initial.py new file mode 100644 index 0000000..efd9666 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/0001_initial.py @@ -0,0 +1,24 @@ +# Generated by Django 2.2 on 2020-10-22 06:18 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=50)), + ('content', models.TextField()), + ('dt_created', models.DateTimeField(auto_now_add=True, verbose_name='Created Date')), + ('dt_modified', models.DateTimeField(auto_now=True, verbose_name='Modified Date')), + ], + ), + ] diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__init__.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/0001_initial.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/0001_initial.cpython-37.pyc new file mode 100644 index 0000000..793fbe7 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/0001_initial.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/__init__.cpython-37.pyc b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..464e52e Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/migrations/__pycache__/__init__.cpython-37.pyc differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/models.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/models.py new file mode 100644 index 0000000..0f674bf --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/models.py @@ -0,0 +1,17 @@ +from django.db import models +from django.core.validators import MinLengthValidator +from .validators import validate_symbols + +# Create your models here. +class Post(models.Model): + title = models.CharField(max_length=50, unique=True, + error_messages={'unique': '이미 있는 제목이네요!'}) + content = models.TextField(validators=[ + MinLengthValidator(10, '너무 짧군요! 10자 이상 적어주세요.'), + validate_symbols + ]) + dt_created = models.DateTimeField(verbose_name="Date Created", auto_now_add=True) + dt_modified = models.DateTimeField(verbose_name="Date Modified", auto_now=True) + + def __str__(self): + return self.title diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/form.css b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/form.css new file mode 100644 index 0000000..4a3351c --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/form.css @@ -0,0 +1,3 @@ +.error { + color : red; +} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_confirm_delete.css b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_confirm_delete.css new file mode 100644 index 0000000..edebb48 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_confirm_delete.css @@ -0,0 +1,120 @@ +h1,h2,h3,p,a,ul,li{ + margin: 0; + padding: 0; + font-family : 'NanumMyeongjo'; + font-weight: 200; + list-style: none; + text-decoration: none; + outline: none; + color: black; +} +a:hover,a:active,button:hover { + text-decoration: none; +} +html{ + position: relative; + min-height: 100%; + margin: 0; +} +body { + min-height: 100%; + margin: 0; + padding: 0; + background: #2b2a2e; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: auto; +} +img { + margin: 0; + padding: 0; + border: 0; +} + +#nav{ + height: 60px; +} +#content{ + margin-top: 160px; + margin-bottom: 300px; +} +#footer{ + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 75px; + background: rgba(41, 41, 44, 0.7); +} +.container{ + width: 800px; + margin: 0 auto; +} + +.logo{ + width: 65%; + min-width: 899px; + margin: 0 auto; + padding-top: 17px; +} +.logo img{ + width: 88px; +} +.confirm{ + padding: 108px 0 124px; + text-align: center; + background: #fff; +} +p{ + font-size: 17px; + color: #575362; + letter-spacing: -0.35px; +} +p.title{ + padding-bottom: 8px; + font-size: 20px; + font-weight: bold; + color: #333236; + letter-spacing: -0.45px; +} +.confirm_btn{ + padding-top: 46px; +} +.confirm_btn ul li{ + display: inline-block; +} +.confirm_btn input{ + + display: inline-block; + margin-left: 18px; + padding: 10px 19px 11px; + font-size: 15px; + color: #69666d; + background: #f6f6f6; + border: none; +} +.confirm_btn a{ + display: inline-block; + margin-left: 18px; + padding: 10px 19px 11px; + font-size: 15px; + color: #69666d; + background: #f6f6f6; + border: none; +} +.confirm_btn input:hover{ + color: red; + transition: all .2s; +} +.footer{ + width: 65%; + min-width: 899px; + margin: 0 auto; +} +.footer p{ + text-align: right; + font-size: 20px; + line-height: 75px; + font-weight: 800; + letter-spacing: -0.85px; + color: #53534f; +} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_detail.css b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_detail.css new file mode 100644 index 0000000..1e80bf4 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_detail.css @@ -0,0 +1,155 @@ +h1,h2,h3,p,a,ul,li{ + margin: 0; + padding: 0; + font-family : 'NanumMyeongjo'; + font-weight: 200; + list-style: none; + text-decoration: none; + outline: none; + color: black; +} +a:hover,a:active,button:hover { + text-decoration: none; +} +html{ + position: relative; + min-height: 100%; + margin: 0; +} +body { + min-height: 100%; + margin: 0; + padding: 0; + background: #fff; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: auto; +} +img { + margin: 0; + padding: 0; + border: 0; +} + +#nav{ + height: 60px; +} +#header{ + background:#2b2a2e url(../images/header_bg.png) no-repeat left top/622px; +} +#content{ + margin-bottom: 300px; +} +#footer{ + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 75px; + background: rgba(41, 41, 44, 0.07); +} +.container{ + width: 800px; + margin: 0 auto; +} + +.logo{ + width: 65%; + min-width: 899px; + margin: 0 auto; + padding-top: 17px; +} +.logo img{ + width: 88px; +} +.title{ + padding: 43px 0 23px; + font-size: 31px; + font-weight: bold; + color: #fff; + letter-spacing: -0.32px; +} +.date{ + padding-bottom: 60px; + font-size: 14px; + font-weight: bold; + color: #e38917; + letter-spacing: -0.32px; +} +.content{ + margin-top: 60px; + padding-bottom: 30px; + border-bottom: 1px solid #d8d8d8; +} +.content .text{ + font-size: 15px; + color: #333236; + line-height: 1.73; + letter-spacing: -0.35px; +} +.content .date_md{ + padding-top: 50px; + text-align: right; + font-size: 12px; + font-weight: bold; + color: #69666d; + letter-spacing: -0.32px; +} +.btn{ + overflow: hidden; + margin-top: 30px; +} +.right-btn{ + float: right; +} +.btn_list{ + float: left; +} +.btn_delete{ + float: left; +} +.btn_modify{ + margin-left: 16px; + float: left; +} +.btn_list a{ + display: inline-block; + padding: 10px 19px 11px; + color: #e38917; + font-size: 15px; + border: 1px solid #e38917; +} +.btn_list a:hover{ + color: #f2ad56; + transition: all .2s; +} +.btn_delete a{ + display: inline-block; + padding: 10px 19px 11px; + font-size: 15px; + color: #69666d; + background: #f6f6f6; +} +.btn_modify a{ + display: inline-block; + padding: 10px 19px 11px; + font-size: 15px; + color: #69666d; + background: #f6f6f6; +} +.btn_delete a:hover, .btn_modify a:hover{ + color: #95929a; + transition: all .2s; +} +.footer{ + width: 65%; + min-width: 899px; + margin: 0 auto; +} +.footer p{ + text-align: right; + font-size: 20px; + line-height: 75px; + font-weight: 800; + letter-spacing: -0.85px; + color: #cbcbc5; +} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_form.css b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_form.css new file mode 100644 index 0000000..4227df1 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_form.css @@ -0,0 +1,155 @@ +h1,h2,h3,p,a,ul,li{ + margin: 0; + padding: 0; + font-family : 'NanumMyeongjo'; + font-weight: 200; + list-style: none; + text-decoration: none; + outline: none; + color: black; +} +a:hover,a:active,button:hover { + text-decoration: none; +} +html{ + position: relative; + min-height: 100%; + margin: 0; +} +body { + min-height: 100%; + margin: 0; + padding: 0; + background: #2b2a2e; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: auto; +} +img { + margin: 0; + padding: 0; + border: 0; +} + +#nav{ + height: 60px; +} +#header{ + margin: 20px 0 20px; +} +#content{ + margin-bottom: 300px; +} +#footer{ + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 75px; + background: rgba(41, 41, 44, 0.7); +} +.container{ + width: 800px; + margin: 0 auto; +} + +.logo{ + width: 65%; + min-width: 899px; + margin: 0 auto; + padding-top: 17px; +} +.logo img{ + width: 88px; +} +h1{ + text-align: center; + font-size: 32px; + letter-spacing: -2px; + color: #fff; +} +.error{ + text-align: right; + color: red; + padding-right: 20px; + padding-bottom: 20px; +} +.submit{ + margin-bottom: 27px; + text-align: right; +} +input[type="submit"]{ + padding: 10px 43px 11px 19px; + font-size: 15px; + font-family : 'NanumMyeongjo'; + color: #fff; + border: 1px solid #5b595f; + border-radius: 1px; + letter-spacing: -0.35px; + background: url(../images/pen.svg)no-repeat 89px 11px/16px; + cursor: pointer; +} +input[type="submit"]:hover{ + color: #ccc; + transition: all 0.2s; +} +.editor{ + background: #f9f9f9; +} +input[type="text"]{ + display: block; + width: 100%; + padding: 35px 33px 0 30px; + border: none; + font-size: 19px; + font-family : 'NanumMyeongjo'; + background-color: transparent; + box-sizing: border-box; +} +textarea{ + width: 100%; + height: 500px; + padding: 33px 33px 30px 30px; + border: none; + font-size: 15px; + line-height: 1.73; + font-family : 'NanumMyeongjo'; + background-color: transparent; + resize: none; + box-sizing: border-box; +} +textarea,input:focus{ + outline: none; +} +textarea::placeholder{ + color: #a9abb7; + letter-spacing: -0.44px; +} +input::placeholder{ + color: #a9abb7; + letter-spacing: -0.44px; +} +.btn_back a{ + display: inline-block; + margin-top: 30px; + padding: 10px 19px 11px; + color: #e38917; + font-size: 15px; + border: 1px solid #e38917; +} +.btn_back a:hover{ + color: #f2ad56; + transition: all .2s; +} +.footer{ + width: 65%; + min-width: 899px; + margin: 0 auto; +} +.footer p{ + text-align: right; + font-size: 20px; + line-height: 75px; + font-weight: 800; + letter-spacing: -0.85px; + color: #53534f; +} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_list.css b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_list.css new file mode 100644 index 0000000..4da1d00 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/css/post_list.css @@ -0,0 +1,199 @@ +h1,h2,h3,p,a,ul,li{ + margin: 0; + padding: 0; + font-family : 'NanumMyeongjo'; + font-weight: 200; + list-style: none; + text-decoration: none; + outline: none; + color: black; +} +a:hover,a:active { + text-decoration: none; +} +html{ + position: relative; + min-height: 100%; + margin: 0; +} +body { + min-height: 100%; + margin: 0; + padding: 0; + background: url(../images/bg.jpg) no-repeat center top/cover; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: auto; +} +img { + margin: 0; + padding: 0; + border: 0; +} + +#nav{ + height: 60px; +} +#header{ + margin: 23px 0 39px; +} +#content{ + margin-bottom: 300px; +} +#footer{ + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 75px; + background: rgba(41, 41, 44, 0.7); +} +.container{ + width: 899px; + margin: 0 auto; +} + +.logo{ + width: 65%; + min-width: 899px; + margin: 0 auto; + padding-top: 17px; +} +.logo img{ + width: 88px; +} +h1{ + text-align: center; +} +h1 img{ + width: 139px; +} +.btn_post{ + text-align: right; +} +.btn_post a{ + display: inline-block; + margin-bottom: 27px; + padding: 10px 43px 11px 19px; + font-size: 15px; + color: #fff; + border: 1px solid #5b595f; + border-radius: 1px; + background: url(../images/pen.svg)no-repeat 75px 11px/16px; +} +.btn_post a:hover{ + color: #ccc; + transition: all 0.2s; +} +.post_container{ + display: grid; + margin-bottom: 35px; + grid-template-columns: repeat(3,1fr); + grid-auto-rows: minmax(322px, auto); + grid-column-gap: 58px; + grid-row-gap: 35px; +} +.post{ + background: #26252a; + padding: 30px 29px 40px 27px; + box-shadow: 0 2px 14px 0 rgba(0, 0, 0, 0.09); +} +.post:hover{ + background: rgba(41, 40, 46, 0.8); + transition: all .15s; +} +.post h2{ + height: 54px; + font-size: 18px; + color: #fff; + line-height: 1.5; + letter-spacing: -0.42px; + overflow: hidden; + text-overflow: + ellipsis; display: + -webkit-box; -webkit-line-clamp: 2; + -webkit-box-orient: vertical; word-wrap:break-word; +} +.post .date{ + margin: 23px 0 17px; + font-size: 11px; + font-weight: bold; + color: #e38917; + letter-spacing: -0.25px; +} +.post .text{ + font-size: 14px; + color: #a9abb7; + line-height: 2.07; + letter-spacing: -0.32px; + overflow: hidden; + text-overflow: + ellipsis; display: + -webkit-box; -webkit-line-clamp: 5; + -webkit-box-orient: vertical; word-wrap:break-word; +} +.paginator{ + text-align: center; +} +.paginator a{ + display: inline-block; +} +.paginator .first,.paginator .last{ + color: #f1c68f; +} +.paginator .first{ + margin-right: 27px; +} +.paginator .first:hover img{ + transform: translateX(-2px); + transition: all .1s; +} +.paginator .last{ + margin-left: 27px; +} +.paginator .last img{ + transform: rotateY(180deg); +} +.paginator .last:hover img{ + transform: translateX(2px) rotateY(180deg); + transition: all .1s; +} +.paginator .prev,.paginator .next{ + color: #e38917; +} +.paginator .prev:hover,.paginator .next:hover{ + color: #c67814; + transition: all .2s; +} +.paginator span{ + display: inline-block; +} +.paginator span p{ + font-size: 14px; + font-weight: bold; + color: #fff; + margin: 0 22px; +} +.blank{ + margin-top: 25px; + background: rgba(38, 37, 42, 0.7); +} +.blank p{ + text-align: center; + line-height: 1.65; + letter-spacing: -0.39px; + padding: 94px 0 111px; + color: #a9abb7; +} +.footer{ + width: 65%; + min-width: 899px; + margin: 0 auto; +} +.footer p{ + text-align: right; + font-size: 20px; + line-height: 75px; + font-weight: 800; + letter-spacing: -0.85px; + color: #53534f; +} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/bg.jpg b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/bg.jpg new file mode 100644 index 0000000..de4c97c Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/bg.jpg differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/header_bg.png b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/header_bg.png new file mode 100644 index 0000000..ddecf1a Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/header_bg.png differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/headertxt.png b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/headertxt.png new file mode 100644 index 0000000..603d0f3 Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/headertxt.png differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo.png b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo.png new file mode 100644 index 0000000..b888fcc Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo.png differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo_square.png b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo_square.png new file mode 100644 index 0000000..4f1c6cf Binary files /dev/null and b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/logo_square.png differ diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/next.svg b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/next.svg new file mode 100644 index 0000000..87f2d55 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/next.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="10" height="11" viewBox="0 0 10 11"> + <g fill="none" fill-rule="evenodd" stroke-linejoin="round"> + <g stroke="#F1C68F" stroke-width=".7"> + <g> + <g> + <g> + <path d="M3.241 3.205L7.559 2.523 6.877 6.841" transform="translate(-817 -956) translate(816 953) translate(0 2) matrix(0 -1 -1 0 11.5 11.5) scale(1 -1) rotate(-45 -5.904 0)"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/pen.svg b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/pen.svg new file mode 100644 index 0000000..bc432c9 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/static/posts/images/pen.svg @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 15 15"> + <g fill="none" fill-rule="evenodd" stroke-linejoin="round"> + <g stroke="#818181" stroke-width=".7"> + <g> + <g> + <g> + <path d="M5 11.561L7.469 14.391 10 11.561 10 1 5 1z" transform="translate(-1381 -188) translate(1306 176) translate(75 12) rotate(30 7.5 7.695)"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/base.html b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/base.html new file mode 100644 index 0000000..1fb4346 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/base.html @@ -0,0 +1,38 @@ +{% load static %} +<!DOCTYPE html> +<html lang="en"> +<head> + <title>코스토리</title> + <meta charset="UTF-8"> + {% block css %} + {% endblock css %} + <link rel="stylesheet" type="text/css" + href="https://fonts.googleapis.com/earlyaccess/nanummyeongjo.css"> +</head> +<body> + <div id="warp"> + <div id="header"> + <div id="nav"> + <div class="logo"> + <a href="{% url 'post-list' %}"><img src="{% static 'posts/images/logo.png' %}"></a> + </div> + </div> + {% block post_header %} + {% endblock post_header %} + </div> + {% block logo_text %} + {% endblock logo_text %} + <div id="content"> + <div class="container"> + {% block content %} + {% endblock content %} + </div> + </div> + <div id="footer"> + <div class="footer"> + <p>Costory</p> + </div> + </div> + </div> +</body> +</html> diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_confirm_delete.html b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_confirm_delete.html new file mode 100644 index 0000000..1b8cf63 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_confirm_delete.html @@ -0,0 +1,18 @@ +{% extends './base.html' %} +{% load static %} + +{% block css %} + <link rel="stylesheet" href="{% static 'posts/css/post_confirm_delete.css' %}"> +{% endblock css %} + +{% block content %} +<div class="confirm"> + <p class="title">[{{post.title}}]</p> + <p>삭제하시겠습니까?</p> + <form method="POST">{% csrf_token %} + <div class="confirm_btn"> + <input type="submit" value="삭제하기"> + </div> + </form> +</div> +{% endblock content %} diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_detail.html b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_detail.html new file mode 100644 index 0000000..fc7ed96 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_detail.html @@ -0,0 +1,27 @@ +{% extends './base.html' %} +{% load static %} + +{% block css %} + <link rel="stylesheet" href="{% static 'posts/css/post_detail.css' %}"> +{% endblock css %} + +{% block post_header %} + <div class="container"> + <h1 class="title">{{post.title}}</h1> + <p class="date">{{post.dt_created}}</p> + </div> +{% endblock post_header %} + +{% block content %} + <div class="content"> + <p class="text">{{post.content|linebreaksbr}}</p> + <p class="date_md">수정일 <span>{{post.dt_modified}}</span></p> + </div> + <div class="btn"> + <div class="btn_list"><a href="{% url 'post-list' %}">목록으로</a></div> + <div class="right-btn"> + <div class="btn_modify"><a href="{% url 'post-update' post.id %}">수정하기</a></div> + <div class="btn_delete"><a href="{% url 'post-delete' post.id %}">삭제하기</a></div> + </div> + </div> +{% endblock content %} diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_form.html b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_form.html new file mode 100644 index 0000000..48a7228 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_form.html @@ -0,0 +1,33 @@ +{% extends './base.html' %} +{% load static %} + +{% block css %} + <link rel="stylesheet" href="{% static 'posts/css/post_form.css' %}"> +{% endblock css %} + +{% block post_header %} + <div class="container"> + <h1>글쓰기</h1> + </div> +{% endblock post_header %} + +{% block content %} + <form method="POST">{% csrf_token %} + <div class="submit"> + <input type="submit" value="작성완료"> + </div> + <div class="editor"> + <p>{{form.title}}</p> + {% for error in form.title.errors %} + <p class="error">{{error}}</p> + {% endfor %} + <p>{{form.content}}</p> + {% for error in form.content.errors %} + <p class="error">{{error}}</p> + {% endfor %} + </div> + </form> + <div class="btn_back"> + <a href="{% url 'post-list' %}" >돌아가기</a> + </div> +{% endblock content %} \ No newline at end of file diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_list.html b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_list.html new file mode 100644 index 0000000..6477cfc --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/templates/posts/post_list.html @@ -0,0 +1,50 @@ +{% extends './base.html' %} +{% load static %} + +{% block css %} + <link rel="stylesheet" href="{% static 'posts/css/post_list.css' %}"> +{% endblock css %} + +{% block logo_text %} + <div id="header"> + <div class="container"> + <h1><img src="{% static 'posts/images/headertxt.png' %}"></h1> + </div> + </div> +{% endblock logo_text %} + +{% block content %} + <div class="btn_post"> + <a href="{% url 'post-create'%}">글쓰기</a> + </div> + {% if page_obj.object_list %} + <div class="post_container"> + {% for post in page_obj.object_list %} + <div class="post"><a href="{% url 'post-detail' post.id %}"> + <h2 class="title">{{post.title}}</h2> + <p class="date">{{post.dt_created}}</p> + <p class="text">{{post.content|slice:":100"}}</p> + </a></div> + {% endfor %} + </div> + <div class="paginator"> + {% if page_obj.has_previous %} + <a href="?page=1" class="first">first</a> + <a href="?page={{page_obj.previous_page_number}}" class="prev">prev</a> + {% endif %} + + <span class="page"> + <p>{{page_obj.number}} of {{page_obj.paginator.num_pages}}</p> + </span> + + {% if page_obj.has_next %} + <a href="?page={{page_obj.next_page_number}}" class="next">next</a> + <a href="?page={{page_obj.paginator.num_pages}}" class="last">last</a> + {% endif %} + </div> + {% else %} + <div class="blank"> + <p>보여줄 글이 없어요.<br>첫 글을 작성해보면 어떨까요?</p> + </div> + {% endif %} +{% endblock content %} diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/tests.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/urls.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/urls.py new file mode 100644 index 0000000..a145e30 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/urls.py @@ -0,0 +1,11 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.IndexRedirectView.as_view(), name='index'), + path('posts/', views.PostListView.as_view(), name='post-list'), + path('posts/new/', views.PostCreateView.as_view(), name='post-create'), + path('posts/<int:pk>/', views.PostDetailView.as_view(), name='post-detail'), + path('posts/<int:pk>/edit/', views.PostUpdateView.as_view(), name='post-update'), + path('posts/<int:pk>/delete/', views.PostDeleteView.as_view(), name='post-delete'), +] diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/validate_data.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/validate_data.py new file mode 100644 index 0000000..7bf7a11 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/validate_data.py @@ -0,0 +1,19 @@ +from .models import Post + + +def validate_post(): + # 1. 모든 포스트 데이터 가져오기 + posts = Post.objects.all() + + # 2. 각각의 포스트 데이터를 보면서 내용안에 '&'가 있는지 체크하기 + for post in posts: + content = post.content + if '&' in content: + print(post.id, '번 글에 &가 있습니다.') + # 3. 만약 '&'가 있다면 해당 '&'를 삭제처리 + post.content = post.content.replace('&', '') + # 4. 데이터 저장하기 + post.save() + if post.dt_modified < post.dt_created: + print(post.id, '번 글의 수정일이 생성일보다 과거입니다.') + post.save() diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/validators.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/validators.py new file mode 100644 index 0000000..3a5caa3 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/validators.py @@ -0,0 +1,6 @@ +from django.core.exceptions import ValidationError + + +def validate_symbols(value): + if('@' in value) or ('#' in value) or ('&' in value): + raise ValidationError('"@", "#, "&"는 포함될 수 없습니다.') diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts/views.py b/GalaxyDimension/Round1/Django CRUD/costory/posts/views.py new file mode 100644 index 0000000..1d3ce48 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts/views.py @@ -0,0 +1,45 @@ +from django.views.generic import ( + CreateView, ListView, DetailView, UpdateView, DeleteView, redirectView +) +from django.urls import reverse +from .models import Post +from .forms import PostForm + + +# Create your views here. +#def index(request): +# return redirect('post-list') +class IndexRedirectView(RedirectView): + patter_name = 'post-list' + +class PostListView(ListView): + model = Post + ordering = ['-dt_created'] + paginate_by = 6 + + +class PostDetailView(DetailView): + model = Post + + +class PostCreateView(CreateView): + model = Post + form_class = PostForm + + def get_success_url(self): + return reverse('post-detail', kwargs={'pk': self.object.id}) + + +class PostUpdateView(UpdateView): + model = Post + form_class = PostForm + + def get_success_url(self): + return reverse('post-detail', kwargs={'pk': self.object.id}) + + +class PostDeleteView(DeleteView): + model = Post + + def get_success_url(self): + return reverse('post-list') diff --git a/GalaxyDimension/Round1/Django CRUD/costory/posts_data.json b/GalaxyDimension/Round1/Django CRUD/costory/posts_data.json new file mode 100644 index 0000000..225e301 --- /dev/null +++ b/GalaxyDimension/Round1/Django CRUD/costory/posts_data.json @@ -0,0 +1,32 @@ +[ + { + "model": "posts.post", + "pk": 7, + "fields": { + "title": "data_01_title", + "content": "data_01_content", + "dt_created": "2020-11-20T07:22:08.195Z", + "dt_modified": "2020-11-20T07:22:08.196Z" + } + }, + { + "model": "posts.post", + "pk": 8, + "fields": { + "title": "data_02_title", + "content": "data_02_content", + "dt_created": "2020-11-20T07:22:08.195Z", + "dt_modified": "2020-11-20T07:22:08.196Z" + } + }, + { + "model": "posts.post", + "pk": 9, + "fields": { + "title": "data_03_title", + "content": "data_03_content", + "dt_created": "2020-11-20T07:22:08.195Z", + "dt_modified": "2020-11-20T07:22:08.196Z" + } + } +] diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/__init__.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/settings.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/settings.py" new file mode 100644 index 0000000..8051ece --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/settings.py" @@ -0,0 +1,121 @@ +""" +Django settings for costaurant project. + +Generated by 'django-admin startproject' using Django 2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.2/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '!%)#zbv7$6_%nn%z(1-dws0vw20g+o$kauai6&39*m6zl#4d*s' + +# 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', + 'foods' +] + +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 = 'costaurant.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 = 'costaurant.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.2/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/2.2/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'Asia/Seoul' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = False + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ + +STATIC_URL = '/static/' diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/urls.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/urls.py" new file mode 100644 index 0000000..696c5f2 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/urls.py" @@ -0,0 +1,22 @@ +"""costaurant URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/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('foods/', include('foods.urls')), +] diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/wsgi.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/wsgi.py" new file mode 100644 index 0000000..4c53acd --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/costaurant/wsgi.py" @@ -0,0 +1,16 @@ +""" +WSGI config for costaurant 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/2.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'costaurant.settings') + +application = get_wsgi_application() diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/.DS_Store" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/.DS_Store" new file mode 100644 index 0000000..7f335ec Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/.DS_Store" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/__init__.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/admin.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/admin.py" new file mode 100644 index 0000000..e182966 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/admin.py" @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Menu + + +# Register your models here. +admin.site.register(Menu) diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/apps.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/apps.py" new file mode 100644 index 0000000..880850e --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/apps.py" @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class FoodsConfig(AppConfig): + name = 'foods' diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/migrations/0001_initial.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/migrations/0001_initial.py" new file mode 100644 index 0000000..687fd74 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/migrations/0001_initial.py" @@ -0,0 +1,24 @@ +# Generated by Django 2.2 on 2020-11-05 16:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Menu', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=50)), + ('description', models.CharField(max_length=100)), + ('price', models.IntegerField()), + ('img_path', models.CharField(max_length=255)), + ], + ), + ] diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/migrations/__init__.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/migrations/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/models.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/models.py" new file mode 100644 index 0000000..1644948 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/models.py" @@ -0,0 +1,12 @@ +from django.db import models + + +# Create your models here. +class Menu(models.Model): + name = models.CharField(max_length=50) + description = models.CharField(max_length=100) + price = models.IntegerField() + img_path = models.CharField(max_length=255) + + def __str__(self): + return self.name diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/.DS_Store" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/.DS_Store" new file mode 100644 index 0000000..1392617 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/.DS_Store" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/.DS_Store" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/.DS_Store" new file mode 100644 index 0000000..5008ddf Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/.DS_Store" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles.css" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles.css" new file mode 100644 index 0000000..e0edf65 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles.css" @@ -0,0 +1,77 @@ +@font-face { + src: url("../fonts/BMJUA_ttf.ttf"); + font-family : Jua; +} +* { + box-sizing: border-box; +} + +body { + background-color : #f0e8d9; +} + +h1 { + text-align: center; + font-size:64px; + color: #58595e; + margin-top: 75px; + margin-bottom: 30px; + font-family: Jua; +} + +h2 { + text-align: center; + font-size:32px; + color: #58595e; + font-family: Jua; +} + +.food-container { + width:660px; + margin-left: auto; + margin-right: auto; +} + +.food { + background-color : white; + width: 300px; + margin-left: auto; + margin-right: auto; + border-radius: 10px; + overflow: hidden; + margin-bottom: 50px; + float: left; + margin-left: 15px; + margin-right: 15px; +} + +.food h3 { + color: #58595b; + font-size: 32px; + font-family: Jua; +} + +.food p { + color: #58595b; + font-size: 16px; + font-family: Jua; + text-align: left; +} + +.food a { + color: #0000ee; + font-size: 16px; + font-family: Jua; + text-decoration: none; +} + +.food .info { + padding: 20px; + text-align: center; +} + +.food img { + border-top-left-radius: 10px; + border-top-right-radius: 10px; +} + \ No newline at end of file diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles_detail.css" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles_detail.css" new file mode 100644 index 0000000..4377679 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/css/styles_detail.css" @@ -0,0 +1,58 @@ +@font-face { + src: url("../fonts/BMJUA_ttf.ttf"); + font-family : Jua; + } + * { + box-sizing: border-box; + font-family: Jua; + } + + body { + background-color : #f0e8d9; + } + + h2 { + font-size:32px; + color: #58595e; + } + + .header h3 { + color: #58595b; + text-align: center; + } + + .food-detail { + width:660px; + margin-left: auto; + margin-right: auto; + } + + .food-detail h3 { + color: #58595b; + font-size: 32px; + } + + .food-detail p { + color: #58595b; + font-size: 16px; + text-align: left; + } + + .food-detail img { + display: block; + margin-bottom: 16px; + width: 300px; + height: 200px; + } + + .food-detail a { + color: #58595b; + font-size: 16px; + text-decoration: none; + border: #58595b 2px solid; + padding: 5px; + display: inline-block; + + } + + \ No newline at end of file diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/fonts/BMJUA_ttf.ttf" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/fonts/BMJUA_ttf.ttf" new file mode 100644 index 0000000..582daf5 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/fonts/BMJUA_ttf.ttf" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/banana.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/banana.jpg" new file mode 100644 index 0000000..b193c0d Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/banana.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/bibimbap.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/bibimbap.jpg" new file mode 100644 index 0000000..b51004d Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/bibimbap.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/burger.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/burger.jpg" new file mode 100644 index 0000000..4427d52 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/burger.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/chicken.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/chicken.jpg" new file mode 100644 index 0000000..2073963 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/chicken.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/croquette.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/croquette.jpg" new file mode 100644 index 0000000..9be9971 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/croquette.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/pumpkin_soup.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/pumpkin_soup.jpg" new file mode 100644 index 0000000..2a05703 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/pumpkin_soup.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/sushi.jpg" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/sushi.jpg" new file mode 100644 index 0000000..60b6120 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/static/foods/images/sushi.jpg" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/.DS_Store" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/.DS_Store" new file mode 100644 index 0000000..69de7af Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/.DS_Store" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/.DS_Store" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/.DS_Store" new file mode 100644 index 0000000..479e563 Binary files /dev/null and "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/.DS_Store" differ diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/base.html" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/base.html" new file mode 100644 index 0000000..24bf409 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/base.html" @@ -0,0 +1,26 @@ +{% load static %} +<!DOCTYPE html> +<html> + <head> + <title>코스토랑</title> + <meta charset="utf-8"> + {% block css %} + <link rel="stylesheet" href="{% static 'foods/css/styles.css' %}"> + {% endblock css %} + </head> + <body> + {% block date-block %}{% endblock date-block %} + + <div class="header"> + {% block header %} + <hr/> + <h1>코스토랑</h1> + <h2>넌 코딩할때가 제일 이뻐</h2> + {% endblock header %} + </div> + + <div class="food-container"> + {% block food-container %}{% endblock food-container %} + </div> + </body> +</html> diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/detail.html" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/detail.html" new file mode 100644 index 0000000..cadfad7 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/detail.html" @@ -0,0 +1,21 @@ +{% extends './base.html' %} +{% load static %} + +{% block css %} + <link rel="stylesheet" href="{% static 'foods/css/styles_detail.css' %}"> +{% endblock css %} + +{% block header %} + <h3>상세메뉴</h3> + <hr/> +{% endblock header %} + +{% block food-container %} + <div class="food-detail"> + <h2>{{menu.name}}</h2> + <p>{{menu.description}}</p> + <p>{{menu.price}} 원</p> + <img src={% get_static_prefix %}{{menu.img_path}}/> + <a href="/foods/menu/">돌아가기</a> + </div> +{% endblock food-container %} diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/index.html" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/index.html" new file mode 100644 index 0000000..6dc1372 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/templates/foods/index.html" @@ -0,0 +1,19 @@ +{% extends './base.html' %} +{% load static %} + +{% block date-block %} + <div>{{date}}</div> +{% endblock date-block %} + +{% block food-container %} + {% for menu in menus %} + <div class="food"> + <img src={% get_static_prefix %}{{menu.img_path}} width="300" height="200" /> + <div class="info"> + <h3>{{menu.name}}</h3> + <P>{{menu.description}}</p> + <a href={{menu.id}}>메뉴 보기</a> + </div> + </div> + {% endfor %} +{% endblock food-container %} diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/tests.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/tests.py" new file mode 100644 index 0000000..7ce503c --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/tests.py" @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/urls.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/urls.py" new file mode 100644 index 0000000..9dcd5ba --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/urls.py" @@ -0,0 +1,22 @@ +"""costaurant URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/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.urls import path +from . import views + +urlpatterns = [ + path('menu/', views.index), + path('menu/<int:pk>/', views.food_detail), +] diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/views.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/views.py" new file mode 100644 index 0000000..9c7c5eb --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/foods/views.py" @@ -0,0 +1,19 @@ +from django.shortcuts import render +from datetime import datetime +from .models import Menu + + +# Create your views here. +def index(request): + context = dict() + today = str(datetime.today().date()) + menus = Menu.objects.all() + context['date'] = today + context['menus'] = menus + return render(request, 'foods/index.html', context) + + +def food_detail(request, pk): + menu = Menu.objects.get(id=pk) + context = {'menu': menu} + return render(request, 'foods/detail.html', context) diff --git "a/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/manage.py" "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/manage.py" new file mode 100644 index 0000000..ea27211 --- /dev/null +++ "b/GalaxyDimension/Round1/Django \354\233\271\352\260\234\353\260\234 \354\213\234\354\236\221\355\225\230\352\270\260/costaurant/manage.py" @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'costaurant.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() diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__init__.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/__init__.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/__init__.cpython-37.pyc" new file mode 100644 index 0000000..b674888 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/__init__.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/admin.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/admin.cpython-37.pyc" new file mode 100644 index 0000000..eafad08 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/admin.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/forms.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/forms.cpython-37.pyc" new file mode 100644 index 0000000..560c327 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/forms.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/functions.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/functions.cpython-37.pyc" new file mode 100644 index 0000000..34f57a3 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/functions.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/middleware.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/middleware.cpython-37.pyc" new file mode 100644 index 0000000..6dfae84 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/middleware.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/models.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/models.cpython-37.pyc" new file mode 100644 index 0000000..f18bdcc Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/models.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/urls.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/urls.cpython-37.pyc" new file mode 100644 index 0000000..5e016a5 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/urls.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/validators.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/validators.cpython-37.pyc" new file mode 100644 index 0000000..799ae6b Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/validators.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/views.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/views.cpython-37.pyc" new file mode 100644 index 0000000..edd0f2e Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/__pycache__/views.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/admin.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/admin.py" new file mode 100644 index 0000000..97c9e18 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/admin.py" @@ -0,0 +1,42 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from django.contrib.contenttypes.admin import GenericStackedInline +from .models import User, Review, Comment, Like + + + +class CommentInline(admin.StackedInline): + model = Comment + + +class LikeInline(GenericStackedInline): + model = Like + + +class UserInline(admin.StackedInline): + model = User.following.through + fk_name = 'to_user' + verbose_name = 'Follower' + verbose_name_plural = 'Follower' + +UserAdmin.fieldsets += ('Custom fields', {'fields': ('nickname', 'profile_pic', 'intro', 'following',)}), +UserAdmin.inlines = (UserInline,) + +class ReviewAdmin(admin.ModelAdmin): + inlines = ( + CommentInline, + LikeInline, + ) + + +class CommentAdmin(admin.ModelAdmin): + inlines = ( + LikeInline, + ) +admin.site.register(User, UserAdmin) + +admin.site.register(Review, ReviewAdmin) + +admin.site.register(Comment, CommentAdmin) + +admin.site.register(Like) diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/apps.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/apps.py" new file mode 100644 index 0000000..5f57e0f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/apps.py" @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CoplateConfig(AppConfig): + name = 'coplate' diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/forms.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/forms.py" new file mode 100644 index 0000000..c393f86 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/forms.py" @@ -0,0 +1,34 @@ +from django import forms + +from .models import User, Review + + +class ReviewForm(forms.ModelForm): + class Meta: + model = Review + fields = [ + 'title', + 'restaurant_name', + 'restaurant_link', + 'rating', + 'image1', + 'image2', + 'image3', + 'content', + ] + widgets = { + 'rating': forms.RadioSelect, + } + + +class ProfileForm(forms.ModelForm): + class Meta: + model = User + fields = [ + 'nickname', + 'profile_pic', + 'intro', + ] + widgets = { + 'intro': forms.Textarea, + } \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/functions.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/functions.py" new file mode 100644 index 0000000..920596c --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/functions.py" @@ -0,0 +1,8 @@ +from django.shortcuts import redirect + +from allauth.account.utils import send_email_confirmation + + +def confirmation_required_redirect(self, request): + send_email_confirmation(request, request.user) + return redirect('account_email_confirmation_required') \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/middleware.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/middleware.py" new file mode 100644 index 0000000..a133a05 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/middleware.py" @@ -0,0 +1,19 @@ +from django.urls import reverse +from django.shortcuts import redirect + + +class ProfileSetupMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if ( + request.user.is_authenticated and + not request.user.nickname and + request.path_info != reverse('profile-set') + ): + return redirect('profile-set') + + response = self.get_response(request) + + return response \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" new file mode 100644 index 0000000..7ae9f16 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" @@ -0,0 +1,44 @@ +# Generated by Django 2.2 on 2021-03-17 09:48 + +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0011_update_proxy_permissions'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" new file mode 100644 index 0000000..e52dbc1 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2021-03-29 04:53 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='nickname', + field=models.CharField(max_length=15, null=True, unique=True), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210413_0656.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210413_0656.py" new file mode 100644 index 0000000..83283de --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210413_0656.py" @@ -0,0 +1,35 @@ +# Generated by Django 2.2 on 2021-04-13 06:56 + +import coplate.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0002_user_nickname'), + ] + + operations = [ + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=30)), + ('restaurant_name', models.CharField(max_length=20)), + ('restaurant_link', models.URLField(validators=[coplate.validators.validate_restaurant_link])), + ('rating', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)])), + ('image1', models.ImageField(upload_to='review_pics')), + ('image2', models.ImageField(blank=True, upload_to='review_pics')), + ('image3', models.ImageField(blank=True, upload_to='review_pics')), + ('content', models.TextField()), + ('dt_created', models.DateTimeField(auto_now_add=True)), + ('dt_updated', models.DateTimeField(auto_now=True)), + ], + ), + migrations.AlterField( + model_name='user', + name='nickname', + field=models.CharField(error_messages={'unique': '이미 사용중인 닉네임입니다.'}, max_length=15, null=True, unique=True, validators=[coplate.validators.validate_no_special_characters]), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" new file mode 100644 index 0000000..6e9ce9b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" @@ -0,0 +1,21 @@ +# Generated by Django 2.2 on 2021-04-13 06:57 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0003_auto_20210413_0656'), + ] + + operations = [ + migrations.AddField( + model_name='review', + name='author', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210421_0500.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210421_0500.py" new file mode 100644 index 0000000..263b485 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210421_0500.py" @@ -0,0 +1,28 @@ +# Generated by Django 2.2 on 2021-04-21 05:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0004_review_author'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='intro', + field=models.CharField(blank=True, max_length=60), + ), + migrations.AddField( + model_name='user', + name='profile_pic', + field=models.ImageField(default='default_profile_pic.jpg', upload_to='profile_pics'), + ), + migrations.AlterField( + model_name='review', + name='rating', + field=models.IntegerField(choices=[(1, '★'), (2, '★★'), (3, '★★★'), (4, '★★★★'), (5, '★★★★★')], default=None), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0006_user_email_domain.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0006_user_email_domain.py" new file mode 100644 index 0000000..8567122 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0006_user_email_domain.py" @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2024-06-26 02:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0005_auto_20210421_0500'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='email_domain', + field=models.CharField(max_length=30, null=True), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0007_populate_email_domain.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0007_populate_email_domain.py" new file mode 100644 index 0000000..937ec98 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0007_populate_email_domain.py" @@ -0,0 +1,19 @@ +# Generated by Django 2.2 on 2024-06-26 02:27 + +from django.db import migrations + + +def save_email_domain(apps, schema_editor): + User = apps.get_model('coplate', 'User') + for user in User.objects.all(): + user.email_domain = user.email.split('@')[1] + user.save() +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0006_user_email_domain'), + ] + + operations = [ + migrations.RunPython(save_email_domain, migrations.RunPython.noop), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0008_comment.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0008_comment.py" new file mode 100644 index 0000000..982d79e --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0008_comment.py" @@ -0,0 +1,26 @@ +# Generated by Django 2.2 on 2024-06-26 09:14 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0007_populate_email_domain'), + ] + + operations = [ + migrations.CreateModel( + name='Commnet', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', models.CharField(max_length=500)), + ('dt_created', models.DateTimeField(auto_now_add=True)), + ('dt_updated', models.DateTimeField(auto_now=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ('review', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='coplate.Review')), + ], + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0009_user_following.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0009_user_following.py" new file mode 100644 index 0000000..2d4d356 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0009_user_following.py" @@ -0,0 +1,19 @@ +# Generated by Django 2.2 on 2024-06-26 09:24 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0008_comment'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='following', + field=models.ManyToManyField(to=settings.AUTH_USER_MODEL), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0010_like.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0010_like.py" new file mode 100644 index 0000000..dd1538a --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0010_like.py" @@ -0,0 +1,26 @@ +# Generated by Django 2.2 on 2024-06-26 11:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('contenttypes', '0002_remove_content_type_name'), + ('coplate', '0009_user_following'), + ] + + operations = [ + migrations.CreateModel( + name='Like', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('dt_created', models.DateTimeField(auto_now_add=True)), + ('object_id', models.PositiveIntegerField()), + ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0011_review_and_comment_ordering.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0011_review_and_comment_ordering.py" new file mode 100644 index 0000000..287c4f7 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0011_review_and_comment_ordering.py" @@ -0,0 +1,21 @@ +# Generated by Django 2.2 on 2024-06-26 11:39 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0010_like'), + ] + + operations = [ + migrations.AlterModelOptions( + name='commnet', + options={'ordering': ['-dt_created']}, + ), + migrations.AlterModelOptions( + name='review', + options={'ordering': ['-dt_created']}, + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0012_user_following_blank.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0012_user_following_blank.py" new file mode 100644 index 0000000..a6db1ef --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0012_user_following_blank.py" @@ -0,0 +1,23 @@ +# Generated by Django 2.2 on 2024-06-26 12:06 + +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0011_review_and_comment_ordering'), + ] + + operations = [ + migrations.RenameModel( + old_name='Commnet', + new_name='Comment', + ), + migrations.AlterField( + model_name='user', + name='following', + field=models.ManyToManyField(blank=True, to=settings.AUTH_USER_MODEL), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0013_change_reverse_relationships.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0013_change_reverse_relationships.py" new file mode 100644 index 0000000..169fdb0 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/0013_change_reverse_relationships.py" @@ -0,0 +1,40 @@ +# Generated by Django 2.2 on 2024-06-26 12:27 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0012_user_following_blank'), + ] + + operations = [ + migrations.AlterField( + model_name='comment', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='comment', + name='review', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='coplate.Review'), + ), + migrations.AlterField( + model_name='like', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='likes', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='review', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='user', + name='following', + field=models.ManyToManyField(blank=True, related_name='followers', to=settings.AUTH_USER_MODEL), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__init__.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0001_initial.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0001_initial.cpython-37.pyc" new file mode 100644 index 0000000..81968b9 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0001_initial.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0002_user_nickname.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0002_user_nickname.cpython-37.pyc" new file mode 100644 index 0000000..fdc2113 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0002_user_nickname.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0003_auto_20210413_0656.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0003_auto_20210413_0656.cpython-37.pyc" new file mode 100644 index 0000000..bf7dd71 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0003_auto_20210413_0656.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0004_review_author.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0004_review_author.cpython-37.pyc" new file mode 100644 index 0000000..2e115cf Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0004_review_author.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0005_auto_20210421_0500.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0005_auto_20210421_0500.cpython-37.pyc" new file mode 100644 index 0000000..c63a19e Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0005_auto_20210421_0500.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0006_user_email_domain.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0006_user_email_domain.cpython-37.pyc" new file mode 100644 index 0000000..c0e5886 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0006_user_email_domain.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0007_populate_email_domain.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0007_populate_email_domain.cpython-37.pyc" new file mode 100644 index 0000000..8d4694c Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0007_populate_email_domain.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0008_comment.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0008_comment.cpython-37.pyc" new file mode 100644 index 0000000..3ef09b4 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0008_comment.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0009_user_following.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0009_user_following.cpython-37.pyc" new file mode 100644 index 0000000..5dc5351 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0009_user_following.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0010_like.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0010_like.cpython-37.pyc" new file mode 100644 index 0000000..90153a3 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0010_like.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0011_review_and_comment_ordering.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0011_review_and_comment_ordering.cpython-37.pyc" new file mode 100644 index 0000000..34ca3e0 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0011_review_and_comment_ordering.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0012_user_following_blank.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0012_user_following_blank.cpython-37.pyc" new file mode 100644 index 0000000..1a8696c Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0012_user_following_blank.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0013_change_reverse_relationships.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0013_change_reverse_relationships.cpython-37.pyc" new file mode 100644 index 0000000..7097846 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/0013_change_reverse_relationships.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/__init__.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/__init__.cpython-37.pyc" new file mode 100644 index 0000000..3eb8b46 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/migrations/__pycache__/__init__.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/models.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/models.py" new file mode 100644 index 0000000..94a85fd --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/models.py" @@ -0,0 +1,105 @@ +from django.db import models +from django.contrib.auth.models import AbstractUser +from django.contrib.contenttypes.models import ContentType +from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation + +from .validators import validate_no_special_characters, validate_restaurant_link + + +class User(AbstractUser): + nickname = models.CharField( + max_length=15, + unique=True, + null=True, + validators=[validate_no_special_characters], + error_messages={'unique': '이미 사용중인 닉네임입니다.'}, + ) + + profile_pic = models.ImageField(default='default_profile_pic.jpg', upload_to='profile_pics') + + intro = models.CharField(max_length=60, blank=True) + + following = models.ManyToManyField( + 'self', + symmetrical=False, + blank=True, + related_name='followers' + ) + + email_domain = models.CharField(max_length=30, null=True) + + def __str__(self): + return self.email + + +class Review(models.Model): + title = models.CharField(max_length=30) + + restaurant_name = models.CharField(max_length=20) + + restaurant_link = models.URLField(validators=[validate_restaurant_link]) + + RATING_CHOICES = [ + (1, '★'), + (2, '★★'), + (3, '★★★'), + (4, '★★★★'), + (5, '★★★★★'), + ] + rating = models.IntegerField(choices=RATING_CHOICES, default=None) + + image1 = models.ImageField(upload_to='review_pics') + + image2 = models.ImageField(upload_to='review_pics', blank=True) + + image3 = models.ImageField(upload_to='review_pics', blank=True) + + content = models.TextField() + + dt_created = models.DateTimeField(auto_now_add=True) + + dt_updated = models.DateTimeField(auto_now=True) + + likes = GenericRelation('Like') + + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reviews') + + def __str__(self): + return self.title + + class Meta: + ordering = ['-dt_created'] + +class Comment(models.Model): + content = models.CharField(max_length=500, blank=False) + + dt_created = models.DateTimeField(auto_now_add=True) + + dt_updated = models.DateTimeField(auto_now=True) + + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='comments') + + review = models.ForeignKey(Review, on_delete=models.CASCADE, related_name='comments') + + likes = GenericRelation('Like') + + def __str__(self): + return self.content[:30] + + class Meta: + ordering = ['-dt_created'] + +class Like(models.Model): + dt_created = models.DateTimeField(auto_now_add=True) + + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='likes') + + content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE) + + object_id = models.PositiveIntegerField() + + liked_object = GenericForeignKey('content_type', 'object_id') + + def __str__(self): + return f"({self.user}, {self.liked_object})" + \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" new file mode 100644 index 0000000..bb4be83 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" @@ -0,0 +1,14 @@ +<svg width="111" height="47" xmlns="http://www.w3.org/2000/svg"> + <g> + <g id="svg_1" fill-rule="evenodd" fill="none"> + <g id="svg_2" fill-rule="nonzero"> + <g id="svg_3"> + <g id="svg_4"> + <path id="svg_5" transform="translate(0, 605) translate(393, 18)" d="m-381.362,-590.916c1.426,0 2.7,-0.292 3.82,-0.877c1.12,-0.585 1.987,-1.422 2.6,-2.512l-2.17,-1.368c-0.495,0.753 -1.11,1.318 -1.842,1.695c-0.734,0.376 -1.546,0.565 -2.438,0.565c-1.03,0 -1.957,-0.228 -2.78,-0.684c-0.822,-0.456 -1.466,-1.105 -1.932,-1.947c-0.466,-0.843 -0.699,-1.819 -0.699,-2.929c0,-1.09 0.233,-2.056 0.699,-2.898c0.466,-0.843 1.11,-1.492 1.932,-1.947c0.823,-0.456 1.75,-0.684 2.78,-0.684c0.892,0 1.704,0.188 2.438,0.565c0.733,0.376 1.347,0.941 1.843,1.694l2.17,-1.397c-0.614,-1.09 -1.482,-1.923 -2.601,-2.497c-1.12,-0.575 -2.394,-0.862 -3.82,-0.862c-1.606,0 -3.038,0.341 -4.296,1.025c-1.259,0.684 -2.245,1.635 -2.958,2.854c-0.714,1.22 -1.07,2.601 -1.07,4.147c0,1.546 0.356,2.929 1.07,4.148c0.713,1.218 1.7,2.175 2.958,2.868c1.258,0.694 2.69,1.04 4.296,1.04l0,0.001zm16.522,0c1.565,0 2.968,-0.347 4.206,-1.04c1.24,-0.694 2.21,-1.65 2.914,-2.87c0.703,-1.218 1.055,-2.6 1.055,-4.147c0,-1.546 -0.352,-2.928 -1.055,-4.147c-0.704,-1.219 -1.675,-2.17 -2.914,-2.854c-1.238,-0.684 -2.64,-1.025 -4.206,-1.025c-1.566,0 -2.973,0.341 -4.222,1.025c-1.248,0.684 -2.224,1.635 -2.928,2.854c-0.704,1.22 -1.055,2.601 -1.055,4.147c0,1.546 0.351,2.929 1.055,4.148c0.704,1.218 1.68,2.175 2.928,2.868c1.249,0.694 2.656,1.04 4.222,1.04l0,0.001zm0,-2.497c-1.011,0 -1.918,-0.233 -2.72,-0.699c-0.803,-0.466 -1.437,-1.12 -1.903,-1.962c-0.466,-0.842 -0.699,-1.809 -0.699,-2.899s0.233,-2.056 0.699,-2.898c0.466,-0.843 1.1,-1.492 1.903,-1.947c0.802,-0.456 1.709,-0.684 2.72,-0.684c1.01,0 1.917,0.228 2.72,0.684c0.803,0.455 1.432,1.104 1.888,1.947c0.456,0.842 0.683,1.808 0.683,2.898s-0.227,2.057 -0.683,2.899c-0.456,0.842 -1.085,1.496 -1.888,1.962c-0.803,0.466 -1.71,0.699 -2.72,0.699zm30.689,2.319l0,-22.06l-2.854,0l0,22.06l2.854,0zm9.952,0.178c1.209,0 2.254,-0.193 3.136,-0.58c0.882,-0.386 1.561,-0.946 2.037,-1.68l0,2.082l2.705,0l0,-9.514c0,-2.12 -0.58,-3.716 -1.74,-4.786c-1.159,-1.07 -2.828,-1.605 -5.008,-1.605c-1.269,0 -2.468,0.173 -3.598,0.52c-1.13,0.347 -2.1,0.847 -2.913,1.501l1.19,2.14c0.613,-0.515 1.367,-0.926 2.258,-1.233c0.892,-0.307 1.804,-0.46 2.736,-0.46c1.387,0 2.437,0.326 3.15,0.98c0.714,0.654 1.071,1.596 1.071,2.824l0,0.565l-4.519,0c-2.2,0 -3.805,0.421 -4.816,1.264c-1.01,0.842 -1.516,1.957 -1.516,3.344c0,1.388 0.53,2.507 1.59,3.36c1.06,0.852 2.473,1.278 4.237,1.278zm0.476,-2.2c-1.09,0 -1.943,-0.228 -2.557,-0.684c-0.615,-0.456 -0.922,-1.08 -0.922,-1.873c0,-1.625 1.21,-2.437 3.627,-2.437l4.4,0l0,2.2c-0.357,0.891 -0.931,1.58 -1.724,2.066c-0.793,0.485 -1.734,0.728 -2.824,0.728zm18.008,2.2c0.654,0 1.288,-0.094 1.903,-0.283c0.614,-0.188 1.13,-0.46 1.546,-0.817l-0.892,-2.051c-0.615,0.495 -1.358,0.743 -2.23,0.743c-0.793,0 -1.402,-0.228 -1.828,-0.684c-0.426,-0.456 -0.64,-1.11 -0.64,-1.962l0,-8.532l4.52,0l0,-2.349l-4.52,0l0,-3.448l-2.853,0l0,3.448l-2.676,0l0,2.349l2.676,0l0,8.65c0,1.586 0.436,2.805 1.308,3.658c0.872,0.852 2.1,1.278 3.686,1.278zm13.282,0c1.308,0 2.492,-0.218 3.553,-0.654c1.06,-0.436 1.947,-1.07 2.66,-1.903l-1.575,-1.843c-1.15,1.268 -2.666,1.903 -4.549,1.903c-1.546,0 -2.839,-0.421 -3.88,-1.264c-1.04,-0.842 -1.65,-1.957 -1.828,-3.344l12.784,0c0.04,-0.357 0.06,-0.644 0.06,-0.862c0,-1.586 -0.333,-2.993 -0.997,-4.222c-0.664,-1.229 -1.585,-2.185 -2.765,-2.869c-1.179,-0.684 -2.522,-1.025 -4.028,-1.025c-1.506,0 -2.859,0.341 -4.058,1.025c-1.199,0.684 -2.14,1.64 -2.824,2.87c-0.684,1.228 -1.026,2.605 -1.026,4.131c0,1.546 0.352,2.934 1.056,4.162c0.703,1.23 1.7,2.185 2.987,2.87c1.289,0.683 2.765,1.025 4.43,1.025zm4.49,-9.157l-10.11,0c0.159,-1.347 0.699,-2.437 1.62,-3.27c0.922,-0.832 2.067,-1.248 3.434,-1.248c1.368,0 2.512,0.42 3.434,1.263c0.921,0.842 1.462,1.928 1.62,3.255l0.002,0z" fill="#494642"/> + <path id="svg_6" transform="translate(0, 605) translate(393, 18)" d="m-347.114,-609.687c-3.933,0 -7.225,5.745 -7.225,11.009l0.002,0.2c0.062,3.443 1.736,5.607 4.544,6.398l0.11,0.03l-0.031,0.282c-0.165,1.512 -0.253,3.242 -0.253,5.045l0.001,0.492l0.006,0.483l0.014,0.71l0.006,0.233l0.025,0.684l0.02,0.444l0.026,0.435l0.028,0.426l0.032,0.415l0.036,0.405l0.04,0.395l0.021,0.193l0.046,0.378l0.05,0.367l0.053,0.355l0.029,0.173l0.06,0.338c0.02,0.11 0.041,0.218 0.063,0.324l0.068,0.313l0.072,0.3l0.077,0.286c0.46,1.63 1.139,2.574 2.08,2.574c0.957,0 1.641,-0.965 2.1,-2.635l0.075,-0.293c0.05,-0.2 0.096,-0.409 0.14,-0.626l0.063,-0.333l0.06,-0.346l0.054,-0.357l0.051,-0.37l0.047,-0.382l0.042,-0.393l0.04,-0.405l0.034,-0.415l0.031,-0.426l0.027,-0.436l0.024,-0.446l0.02,-0.456l0.016,-0.466l0.013,-0.474l0.012,-0.729l0.004,-0.496l0,-0.236l-0.001,-0.415c-0.013,-1.655 -0.1,-3.238 -0.252,-4.633l-0.032,-0.282l0.11,-0.03c2.863,-0.807 4.547,-3.039 4.547,-6.598c0,-1.592 -0.3,-3.227 -0.83,-4.734l-0.125,-0.346c-1.257,-3.316 -3.618,-5.929 -6.27,-5.929zm0,2.21c2.383,0 5.016,4.594 5.016,8.799c0,2.896 -1.314,4.314 -3.829,4.655l-1.114,0.15l0.171,1.112c0.256,1.664 0.4,3.787 0.4,6.038l0,0.232c-0.01,2.472 -0.196,4.772 -0.507,6.444l-0.034,0.177l-0.07,0.334l-0.033,0.146l-0.01,-0.04c-0.048,-0.212 -0.095,-0.442 -0.14,-0.69c-0.313,-1.72 -0.494,-4.08 -0.494,-6.603c0,-2.25 0.144,-4.374 0.4,-6.038l0.17,-1.112l-1.114,-0.15c-2.514,-0.341 -3.828,-1.76 -3.828,-4.655c0,-4.205 2.633,-8.8 5.016,-8.8l0,0.001z" fill="#FC0"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" new file mode 100644 index 0000000..ff3ae2f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" new file mode 100644 index 0000000..58f6be5 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1749" height="595" viewBox="0 0 1749 595"> + <g fill="none" fill-rule="evenodd"> + <g> + <g> + <path fill="#06AEA7" d="M44.764 508.893c18.369-4.636 26.896-15.682 26.896-33.514s-34.701-24.004-50.426-11.97C5.509 475.443 1 482.165 1 493.21s25.395 20.318 43.764 15.682z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#2399DC" d="M1720.764 238.893c18.369-4.636 26.896-15.682 26.896-33.514s-34.701-24.004-50.426-11.97C1681.509 205.443 1677 212.165 1677 223.21s25.395 20.318 43.764 15.682z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#F49D7D" d="M253.537 30.526c-4.074-13.593-12.58-44.09-36.813-23.702-24.234 20.387-11.49 45.6 0 56.444 11.49 10.845 35.567 16.414 43.185 2.947 7.618-13.468-3.868-27.334-6.372-35.689z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#FC0" d="M530.537 417.526c-4.074-13.593-12.58-44.09-36.813-23.702-24.234 20.387-11.49 45.6 0 56.444 11.49 10.845 35.567 16.414 43.185 2.947 7.618-13.468-3.868-27.334-6.372-35.689z" transform="translate(-63) translate(63.383 -33.879) rotate(-96 509.703 424.065)"/> + <path fill="#D8D8D8" d="M1472.821 592.716s-12.582 31.006 17.55 34.044c20.089 2.026 28.903-8.223 26.441-30.746-3.489-14.234-11.051-20.472-22.686-18.713-17.452 2.638-21.305 15.415-21.305 15.415z" transform="translate(-63) translate(63.383 -33.879)"/> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" new file mode 100644 index 0000000..163c6d5 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-comment.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-comment.svg" new file mode 100644 index 0000000..7d0a042 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-comment.svg" @@ -0,0 +1,8 @@ +<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"> + <g transform="translate(2 1)" fill="none" fill-rule="evenodd"> + <path d="M15.985 7.507c-.245-4-3.468-7.245-7.47-7.49C3.803-.292-.087 3.508.001 8.174c.09 4.223 3.557 7.711 7.781 7.823a7.707 7.707 0 0 0 3.713-.8c.422-.2.91-.222 1.355-.111l2.58.733a.325.325 0 0 0 .4-.4l-.779-2.4a1.92 1.92 0 0 1 .112-1.445c.6-1.2.91-2.6.822-4.066" stroke="#2F2C28"/> + <rect fill="#2F2C28" x="4" y="7.5" width="5" height="1" rx=".5"/> + <rect fill="#2F2C28" x="4" y="4.5" width="7" height="1" rx=".5"/> + <rect fill="#2F2C28" x="4" y="10.5" width="8" height="1" rx=".5"/> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" new file mode 100644 index 0000000..a1281c4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" viewBox="0 0 29 29"> + <g fill="none" fill-rule="evenodd"> + <g> + <g> + <g transform="translate(-1139 -519) translate(740 503) translate(399 15.5)"> + <circle cx="14.5" cy="15" r="13.5" fill="#FDDDDB"/> + <path fill="#E6584E" fill-rule="nonzero" d="M15.461 16.716l.357-6.273.085-2.363h-2.516l.085 2.363.357 6.273h1.632zm-.816 4.522c.442 0 .813-.156 1.114-.468.3-.311.45-.7.45-1.164 0-.465-.15-.853-.45-1.165-.3-.311-.672-.467-1.114-.467-.442 0-.81.156-1.105.468-.295.311-.442.7-.442 1.164 0 .465.147.853.442 1.164.295.312.663.468 1.105.468z"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart-orange.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart-orange.svg" new file mode 100644 index 0000000..9890101 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart-orange.svg" @@ -0,0 +1,3 @@ +<svg width="21" height="20" xmlns="http://www.w3.org/2000/svg"> + <path d="M6.803 1.7c-2.563 0-3.719 1.568-4.225 2.452C-.202 9.93 7.834 15.237 9.99 16.557a.975.975 0 0 0 1.018 0c2.158-1.32 10.193-6.628 7.413-12.405-.506-.884-1.662-2.452-4.225-2.452-2.866.107-3.652 1.988-3.697 2.108-.045-.12-.83-2.001-3.697-2.108" fill="#E1811B" stroke="#E1811B" fill-rule="evenodd" stroke-linejoin="round"/> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart.svg" new file mode 100644 index 0000000..c9473ce --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-heart.svg" @@ -0,0 +1,3 @@ +<svg width="20" height="20" xmlns="http://www.w3.org/2000/svg"> + <path d="M6.303 1.7c-2.563 0-3.719 1.568-4.225 2.452C-.702 9.93 7.334 15.237 9.49 16.557a.975.975 0 0 0 1.018 0c2.158-1.32 10.193-6.628 7.413-12.405-.506-.884-1.662-2.452-4.225-2.452-2.866.107-3.652 1.988-3.697 2.108-.045-.12-.83-2.001-3.697-2.108" stroke="#2F2C28" fill="none" fill-rule="evenodd" stroke-linejoin="round"/> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" new file mode 100644 index 0000000..3f8db97 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> + <g fill="none" fill-rule="evenodd" stroke-linecap="round"> + <g stroke="#FFF" stroke-width="2"> + <g> + <g> + <path d="M0 0.328L9.172 0.328" transform="translate(-1434 -377) translate(1434 377) rotate(45 1.18 10.471)"/> + <path d="M4.586 4.914L13.759 4.914" transform="translate(-1434 -377) translate(1434 377) rotate(45 1.18 10.471) rotate(90 9.172 4.914)"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" new file mode 100644 index 0000000..e9f5406 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> + <g fill="none" fill-rule="evenodd" stroke-linecap="round"> + <g stroke="#FFF" stroke-width="2"> + <g> + <g> + <path d="M2 9L16 9" transform="translate(-1169 -223) translate(1161 215) translate(8 8)"/> + <path d="M2 9L16 9" transform="translate(-1169 -223) translate(1161 215) translate(8 8) rotate(90 9 9)"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" new file mode 100644 index 0000000..6fb1770 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="19" viewBox="0 0 18 19"> + <g fill="none" fill-rule="evenodd" stroke-linejoin="round"> + <g fill="#BCB9B0" stroke="#BCB9B0"> + <g> + <path d="M12 3v10.8h-.001L9 16.59 6.001 13.8H6V3h6z" transform="translate(-614 -167) translate(614 168) rotate(45 9 9.795)"/> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" new file mode 100644 index 0000000..501b810 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25"><rect id="backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none"/> + +<g class="currentLayer" style=""><title>Layer 1</title><g fill="none" fill-rule="evenodd" id="svg_1" class=""> + <g fill="#FC0" id="svg_2"> + <path d="M-467.5,-1636.4549560546875 c4.694,0 8.5,3.806 8.5,8.5 c0,3.13 -2.833,7.6 -8.5,13.41 C-473.167,-1620.3549560546876 -476,-1624.8249560546874 -476,-1627.9549560546875 C-476,-1632.6489560546875 -472.194,-1636.4549560546875 -467.5,-1636.4549560546875 zm0,3.579 c-2.224,0 -4.026,1.803 -4.026,4.026 c0,2.224 1.802,4.027 4.026,4.027 c2.224,0 4.026,-1.803 4.026,-4.027 c0,-2.223 -1.802,-4.026 -4.026,-4.026 z" transform="translate(480,1638) " id="svg_3"/> + </g> + </g></g></svg> \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-search.svg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-search.svg" new file mode 100644 index 0000000..e2dafd9 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-search.svg" @@ -0,0 +1,6 @@ +<svg width="22" height="24" xmlns="http://www.w3.org/2000/svg"> + <g stroke="#BCB9B0" stroke-width="2" fill="none" fill-rule="evenodd"> + <circle cx="10.56" cy="10.56" r="8.8"/> + <path d="m15.84 17.6 4.4 5.28"/> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" new file mode 100644 index 0000000..a334d29 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" @@ -0,0 +1,1019 @@ +:root { + --border: #e3e1dc; + --max-width: 1100px; + --max-content-width: 1000px; + --body-background: #fcfcfc; + --site-header-background: rgba(255, 255, 255, 0.76); + --navbar: #2f2c28; + --site-footer: #bcb9b0; + --site-footer-background: #2f2c28; + --account-link: #ffcc00; + --content-list-contet-date: #bcb9b0; + --main-header-background: #fff; + --main-header-height: 565px; + --main-header-border: #f0efec; + --main-header: #fff; + --content-list-sub-heading: #7b776b; + --content-list-pagination-current: #fff; + --content-list-pagination-current-bg: #ffcc00; + --review-detail-date: #bcb9b0; + --review-detail-side-padding: 8px; + --profile-header-edit: #7b776b; + --file-content-border: #cccac3; + --file-content-background: #fff; + --like-comment-block: #f4f4f4; + --comment-border: #dfdfdf; + --follow-list-block: #f6f5f3; + --back-link: #e1811b; + --search-input-background: #f3f2ef; +} + +/* site */ + +body { + display: flex; + min-height: 100vh; + flex-direction: column; + margin: 0; + background-color: var(--body-background); + word-break: keep-all; +} + +body > .site-body { + flex: 1 1; +} + +.site-header.only-logo { + margin: 18px auto; +} + +.site-header.navbar { + background-color: var(--site-header-background); + border-bottom: solid 1px var(--border); + position: sticky; + top: 0; + left: 0; + right: 0; + z-index: 2; +} + +.site-header .content, +.site-footer .content { + margin: 0 auto; + padding: 0 10px; +} + +.site-header .content { + display: flex; + height: 70px; + justify-content: space-between; + align-items: center; +} + +.site-header .logo { + width: 110px; +} + +ul.navbar { + display: flex; + margin: 0; + padding: 0; + list-style: none; +} + +ul.navbar li ~ li { + margin-left: 65px; +} + +ul.navbar li { + font-size: 17px; + letter-spacing: -0.26px; + color: var(--navbar); +} + +.site-body { + width: 100%; +} + +.site-footer { + color: var(--site-footer); + background-color: var(--site-footer-background); +} + +.site-footer .content { + display: flex; + justify-content: space-between; + align-items: center; + min-height: 95px; +} + +.max-width { + max-width: var(--max-width); + width: 100%; +} + +.max-content-width { + max-width: var(--max-content-width); + width: 100%; +} + +/* content-list */ + +.content-list { + margin: 72px auto 340px; +} + +.content-list .header { + display: flex; + justify-content: space-between; + align-items: center; + margin: 25px 15px 25px 25px; +} + +.content-list .header h2 { + font-size: 22px; + color: var(--content-list-sub-heading); + margin: 0; +} + +.content-list .contents { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 46px 40px; +} + +@media (max-width: 640px) { + .content-list .contents { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } +} + +.content-list .contents .empty { + margin: 120px auto; + font-weight: bold; + font-size: 20px; + grid-column: span 2; +} + +.content-list .contents > a:hover, +.content-list .contents > a:active { + text-decoration: none; +} + +.content-list .content { + min-width: auto; +} + +.content-list .content .thumb { + display: block; + height: 167px; + border-radius: 18px; + background-position: center; + background-size: cover; +} + +.content-list .content .body { + padding: 30px 25px; +} + +.content-list .content .title { + font-size: 22px; + font-weight: normal; + line-height: 33px; + letter-spacing: -0.33px; + margin: 11px 0 5px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.content-list .content a { + text-decoration: none; +} + +.content-list .content .date { + font-size: 14px; + letter-spacing: -0.21px; + color: var(--content-list-contet-date); +} + +.content-list .content .metadata { + margin-top: 48px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.pagination { + display: flex; + justify-content: center; + margin: 40px 0; + padding: 0; + list-style: none; +} + +.pagination li ~ .pagination li { + margin-left: 5px; +} + +.pagination li { + min-width: 40px; + height: 40px; + line-height: 40px; + text-align: center; +} + +.pagination li.current { + border-radius: 9px; + background-color: var(--content-list-pagination-current-bg); + color: var(--content-list-pagination-current); +} + +.content-list .wrap-pagination { + display: flex; + align-items: center; +} + +.content-list .wrap-pagination .backbutton { + width: 220px; +} + +.content-list .wrap-pagination .backbutton:only-child { + margin-top: 40px; +} + +.content-list .wrap-pagination .backbutton ~ .pagination { + margin-right: 220px; + flex-grow: 1; +} + +.content-list .cp-button:not(.search-button) { + display: block; + width: 450px; + margin: 50px auto 0 auto; +} + +.index .content-list .header:not(:first-child) { + margin-top: 170px; +} + +/* main-header */ + +.main-header { + margin-top: -70px; + padding-bottom: 160px; + border-bottom: 1px solid var(--main-header-border); + background-color: var(--main-header-background); + position: relative; +} + +.main-header .content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + max-width: 1000px; + width: 100%; + height: 556px; + margin: 0 auto; + background-size: contain; + background-repeat: no-repeat; + background-position: top; + background-image: url("../assets/main-bg.jpg"); +} + +.main-header .fg { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + background-repeat: no-repeat; + background-position: top; + background-size: 1749px; + background-image: url("../assets/main-fg.svg"); +} + +.main-header .content > * { + z-index: 1; +} + +.main-header .content > h1 { + text-shadow: 0 5px 5px rgba(0, 0, 0, 0.5); + font-size: 40px; + letter-spacing: 15.4px; + text-align: center; + word-break: keep-all; + color: var(--main-header); + margin-bottom: 40px; +} + +.main-header .header-search { + padding: 15px 18px 15px 17px; + border-radius: 8px; + background-color: #fff; + box-shadow: 0 3px 16px 0 #46433d; +} + +/* search-form */ + +.search-form { + width: 615px; + display: flex; +} + +/* search-input */ + +input.search-input { + flex: 1 1; + height: 55px; + font-size: 19px; + letter-spacing: -0.3px; + padding: 16px 0 16px 55px; + border: none; + background-color: var(--search-input-background); + outline: none; + border-radius: 7px; + background-image: url(../icons/ic-search.svg); + background-repeat: no-repeat; + background-position: 18px 15px; +} + +input.search-input::placeholder { + color: var(--input-placeholder); +} + +/* search-button */ + +.search-form .cp-button { + width: 125px; + height: 55px; + font-size: 21px; + font-weight: bold; + margin-left: 12px; +} + +/* search-results */ + +.search-results .search-form { + margin-bottom: 45px; +} + +.search-results .content-list .header { + margin-left: 0px; +} + +/* review-detail */ + +.review-detail { + margin: 80px auto 340px; +} + +.review-detail .review-info { + display: grid; + grid-template: repeat(3, auto) / repeat(3, auto); + grid-auto-flow: row; + justify-content: space-between; +} + +.review-detail .review-info > .restaurant-name { + grid-column: span 3; + margin: 0; +} + +.review-detail .review-info > .title, +.review-detail .review-info > .date { + margin-left: var(--review-detail-side-padding); +} + +.review-detail .review-info > .review-author, +.review-detail .review-info > .review-rating { + margin-right: var(--review-detail-side-padding); +} + +.review-detail .review-info > .title { + margin-top: 8px; + margin-bottom: 5px; + grid-column: span 2; + font-size: 22px; + font-weight: normal; +} + +.review-detail .review-info > .date { + grid-column: span 2; + font-size: 14px; + color: var(--review-detail-date); +} + +.review-detail .review-info > .review-author { + display: flex; + justify-content: flex-end; +} + +.review-detail .content { + margin: 45px 0 35px; +} + +.review-detail .content .thumb { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + max-width: 1000px; + max-height: 645px; + margin: 0 auto; + border-radius: 18px; +} + +.review-detail .content .thumb:not(:last-child) { + margin-bottom: 30px; +} + +.review-detail .content .content { + margin: 30px var(--review-detail-side-padding) 28px; + line-height: 1.82; +} + +.review-detail .content .location { + display: inline-flex; + align-items: center; + margin: var(--review-detail-side-padding); + font-size: 18px; + font-weight: bold; +} + +.review-detail .content .location > img { + margin-right: 5px; +} + +.review-detail .footer { + display: flex; + justify-content: flex-end; + align-items: center; + padding: 28px 0; + border-top: 1px solid var(--border); +} + +.review-detail .back-link { + font-size: 20px; +} + +.review-detail .footer .buttons > :not(:last-child) { + margin-right: 8px; +} + +/* like-comment-block */ + +.like-comment-block { + display: flex; + flex-direction: column; + border-radius: 8px; + background-color: var(--like-comment-block); + padding: 0 25px; + margin-bottom: 27px; +} + +/* like-comment-header */ + +.like-comment-header { + display: flex; + justify-content: center; + align-items: center; + padding: 14px 0px; + border-bottom: 1px solid var(--comment-border); +} + +.like-comment-header > :not(:last-child) { + margin-right: 25px; +} + +.like-button { + border: none; + cursor: pointer; + background: none; + font-size: 17px; + padding: 0; +} + +a.like-button:hover { + text-decoration: none; +} + +.comment-info { + font-size: 17px; +} + +.like-button, .comment-info { + display: flex; + align-items: center; + white-space: pre; +} + +/* comment */ + +.comment { + padding: 20px 5px 25px 5px; + border-top: 1px solid var(--comment-border); +} + +.comment-header { + display: flex; + justify-content: space-between; + margin-bottom: 10px; +} + +.comment-header .buttons { + font-size: 14px; +} + +.comment-content { + font-size: 15px; + line-height: 1.67; + margin-bottom: 6px; +} + +.comment-footer { + display: flex; + justify-content: space-between; +} + +.comment-footer .like-button { + font-size: 14px; +} + +.comment-date { + font-size: 14px; + letter-spacing: -0.21px; + color: #adadad; +} + +/* comment-form */ + +.comment-create-form { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 30px; + margin-bottom: 30px; +} + +.comment-create-form a { + width: 100%; +} + +.comment-create-form textarea.cp-input { + height: 120px; +} + +.comment-create-form button.cp-button { + margin-left: 25px; + flex-shrink: 0; +} + +.comment-update-form { + max-width: 840px; + margin: 64px auto 19px auto; +} + +.comment-update-form textarea.cp-input { + height: 120px; +} + +.comment-update-form .buttons { + margin-top: 19px; + display: flex; + justify-content: end; +} + +.comment-update-form .buttons > :not(:last-child) { + margin-right: 15px; +} + +/* review-form */ + +.review-form { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 25px 14px; + margin: 85px auto 410px; +} + +.review-form > .title, +.review-form > .rating, +.review-form > .content, +.review-form > .file, +.review-form > .buttons { + grid-column: span 2; +} + +.review-form > .restaurant-name, +.review-form > .restaurant-link { + grid-column: span 1; +} + +.review-form > .rating label { + margin: 0; + display: inline-flex; + align-items: center; +} + +.review-form > .rating label > input { + margin: 0 5px 0 0; +} + +.review-form > .rating label:not(:first-child) { + margin-left: 14px; +} + +.review-form > .rating label:first-child { + margin-left: 5px; +} + +.review-form .content textarea { + height: 526px; +} + +.review-form .file-content { + display: flex; + align-items: center; + line-height: 2; + font-size: 17px; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--file-content-border); + background-color: var(--file-content-background); + border-radius: 7px; +} + +.review-form .file-content input { + font-size: 17px; +} + +.review-form .file-content > img { + width : 200px; + height: 150px; + object-fit: cover; + border-radius: 8px; + margin-right: 10px; +} + +.review-form .buttons { + display: flex; + max-width: 600px; + width: 100%; + margin: 0 auto; +} + +.review-form .buttons > .cancel { + flex-grow: 1; +} + +.review-form .buttons > button[type="submit"] { + flex-grow: 6; + margin-left: 9px; +} + +/* confirm-delete */ + +.confirm-delete { + display: flex; + align-items: center; + max-width: 740px; + width: 100%; + margin: 65px auto; +} + +.confirm-delete > :not(:last-child) { + margin-right: 15px; +} + +.confirm-delete .content { + flex-grow: 1; +} + +/* profile-header */ + +.profile-header { + padding: 46px 10px 60px; + border-bottom: 1px solid var(--main-header-border); + background-color: var(--main-header-background); + position: relative; +} + +.profile-header .content { + display: flex; + margin: 0 auto; + overflow: hidden; + align-items: center; +} + +.profile-header .profile-pic { + flex-shrink: 0; + margin-right: 15px; +} + +.profile-header .info { + flex-grow: 1; + overflow: hidden; +} + +.profile-header .username { + font-size: 22px; + margin: 7px 9px; +} + +.profile-header .edit { + display: inline-block; + font-size: 15px; + color: var(--profile-header-edit); + margin-bottom: 16px; +} + +.profile-header .edit:first-of-type { + margin-left: 9px; +} + +.profile-header .intro { + margin: 0; + max-width: 100%; + overflow: hidden; +} + +.profile-header .follow-section { + margin: auto 20px; + white-space: nowrap; +} + +.profile-header .vert-divider { + margin: 0 12px; +} + +.follow-button .cp-button { + width: 107px; + display: flex; + justify-content: center; +} + +/* follow-list */ + +.follow-list { + max-width: 740px; + margin: 56px auto 200px auto; +} + +.follow-list-header { + display: flex; + justify-content: space-between; + align-items: end; + margin-bottom: 15px; + padding: 0 15px; +} + +.follow-list-header h2 { + margin: 0; + font-size: 22px; +} + +.follow-list-header .back-link { + font-size: 16px; + color: var(--back-link); + letter-spacing: -0.32px; +} + +.follow-list-block { + background-color: var(--follow-list-block); + border-radius: 6px; + padding: 25px 30px; +} + +.follow-list-row { + display: flex; + align-items: center; +} + +.follow-list-row:not(:last-child) { + margin-bottom: 12px; +} + +.follow-list-row .cp-avatar { + margin-right: 15px; +} + +.follow-list-row .nickname { + font-size: 17px; + letter-spacing: -0.26px; +} + +/* account */ + +.account-background { + flex-grow: 1; +} +.account-background::before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: -1; + background-image: url("../assets/main-fg.svg"); + background-repeat: no-repeat; + background-size: contain; + background-position: top; + opacity: 0.5; +} + +.account { + margin: 200px auto; + max-width: 450px; + width: 100%; +} + +.account .title { + margin: 24px auto; + text-align: center; +} + +.account .logo { + width: 200px; +} + +.account .form-error { + text-align: center; +} + +.account .info { + width: max-content; + margin: 25px auto; +} + +.account button[type="submit"] { + display: block; + width: 100%; + margin: 0; +} + +.account .info .item { + display: inline-block; + min-width: 140px; + padding: 0 21px; +} + +.account .info .item + .item { + border-left: 1px solid var(--border); +} + +.account .info .link { + margin-left: 13px; + color: var(--account-link); +} + +.account form { + display: flex; + flex-direction: column; +} + +.account form > :not(:last-child) { + margin-bottom: 20px; +} + +.account form .checkbox { + padding: 4px; + text-align: right; +} + +/* account-password */ + +.account-password { + margin: 100px auto; + padding: 68px 150px; + max-width: 740px; + width: 100%; +} + +.account-password .title { + margin: 24px auto; + text-align: center; +} + +.account-password .heading { + font-size: 25px; + font-weight: normal; +} + +.account-password form > :not(:last-child) { + margin-bottom: 20px; +} + +.account-password button[type="submit"] { + display: block; + width: 100%; + margin: 20px 0 25px; +} + +.account-password-dialog { + margin: 100px auto; + text-align: center; + width: 100%; +} + +.account-password-dialog .button { + margin-top: 5px; +} + +/* profile-form */ + +.profile-form { + margin: 100px auto; + max-width: 440px; + width: 100%; +} + +.profile-form .logo { + margin: auto; + width: 110px; +} + +.profile-form .welcome-message { + margin: 5px auto 30px; + text-align: center; + font-size: 24px; +} + +.profile-form form > :not(:last-child) { + margin-bottom: 20px; +} + +.profile-form .profile { + display: flex; + align-items: center; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--file-content-border); + background-color: var(--file-content-background); + border-radius: 7px; +} + +.profile-form .profile .profile-pic { + margin-right: 10px; + flex-shrink: 0; +} + +.profile-form .profile .file { + line-height: 2; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.profile-form .profile .file > input { + max-width: 240px; +} + +.profile-form .content > textarea { + height: 188px; +} + +.profile-form .buttons { + display: flex; + width: 100%; +} + +.profile-form .buttons > button[type="submit"] { + flex-grow: 4; +} + +.profile-form .buttons > .cancel { + flex-grow: 1; +} + +.profile-form .buttons > :not(:last-child) { + margin-right: 9px; +} + +/* author */ + +.author { + display: flex; + align-items: center; + font-size: 15px; +} + +.author > :not(:last-child) { + margin-right: 10px; +} + +/* review-rating */ + +.review-rating { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.review-rating .text { + margin-left: 8px; + font-size: 17px; +} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" new file mode 100644 index 0000000..13c9760 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" @@ -0,0 +1,353 @@ +@import url(//spoqa.github.io/spoqa-han-sans/css/SpoqaHanSansNeo.css); +* { + font-family: "Spoqa Han Sans Neo", sans-serif; +} + +:root { + --text: #2f2c28; + --link: #ffcc00; + --button-text: #fff; + --button-primary-background: #ffcc00; + --button-primary-hover-background: #ffe680; + --button-warn-background: #f9592c; + --button-secondary-background: #bcb9b0; + --ic-button-circle: #ffcc00; + --input-background: #fff; + --input-border: #cccac3; + --input-placeholder: #bcb9b0; + --input-focus-border: #ffcc00; + --input-focus-background: #fffdf3; + --input-error: #e6584e; + --input-error-border: #e6584e; + --chip-border: #e3e1dc; + --chip-text: #2f2c28; + --chip-green-background: #effaf9; + --chip-green-text: #79c9c5; + --chip-green-border: #06aea7; + --avatar-placeholder: #e3e1dc; + --stars: #ffcc00; + --dialog-border: #e3e1dc; + --dialog-background: #f6f5f3; + --dialog-info: #e1811b; + --box-border: #e3e1dc; +} + +* { + box-sizing: border-box; +} + +/* Texts */ + +body, +a, +a:hover { + color: var(--text); +} + +a { + text-decoration: none; +} + +a:hover, +a:focus { + text-decoration: underline; +} + +.cp-link { + color: var(--link); + font-weight: 500; +} + +/* Button */ + +a.cp-button { + display: inline-block; + text-decoration: none; + text-align: center; +} + +.cp-button { + border: none; + outline: none; + padding: 16px 28px; + border-radius: 9999px; + font-size: 19px; + font-weight: 400; + letter-spacing: -0.32px; + cursor: pointer; + background-color: var(--button-primary-background); + color: var(--button-text); +} + +.cp-button.small { + padding: 11px 28px; + font-size: 17px; +} + +.cp-button:hover, +.cp-button:active { + color: var(--button-text); + background-color: var(--button-primary-hover-background); + transition: background-color 0.2s ease, opacity 0.2s ease; +} + +.cp-button.secondary { + background-color: var(--button-secondary-background); +} + +.cp-button.warn { + background-color: var(--button-warn-background); +} + +.cp-button.secondary:hover:not(:disabled), +.cp-button.secondary:active, +.cp-button.warn:hover, +.cp-button.warn:active { + opacity: 0.6; +} + +.cp-button.inverted { + padding: 5px 17px; + font-size: 17px; + font-weight: 300; + background-color: transparent; + color: #e1811b; + border: 1px solid #e1811b; +} + +.cp-button:disabled { + cursor: not-allowed; +} + +/* Icon Button */ + +.cp-ic-button { + display: inline-flex; + outline: none; + border: none; + background: none; + align-items: center; +} + +.cp-ic-button:hover, +.cp-ic-button:active { + text-decoration: underline; + cursor: pointer; +} + +.cp-ic-button:not(.after)::before { + content: " "; + margin-right: 7px; + display: inline-block; + width: 18px; + height: 18px; + background-position: center; + background-size: 18px 18px; + background-repeat: no-repeat; +} + +.cp-ic-button.setting::before { + background-image: url("../icons/ic-setting.svg"); +} + +.cp-ic-button.newreview::before { + background-image: url("../icons/ic-newreview.svg"); +} + +.cp-ic-button.backbutton::before { + background-image: url("../icons/ic-morereview.svg"); + transform: scaleX(-1); +} + +.cp-ic-button.after::after { + content: " "; + margin-left: 7px; + display: inline-block; + width: 18px; + height: 18px; + background-position: center; + background-size: 18px 18px; + background-repeat: no-repeat; +} + +.cp-ic-button.after.morereview::after { + background-image: url("../icons/ic-morereview.svg"); +} + +.cp-ic-button.circle { + font-size: 20px; + font-weight: bold; +} + +.cp-ic-button.circle::before, +.cp-ic-button.circle::after { + width: 34px; + height: 34px; + border-radius: 50%; + background-color: var(--ic-button-circle); +} + +/* Input */ + +div.cp-input { + display: inline-block; + position: relative; +} + +input.cp-input, +textarea.cp-input, +.cp-input input { + width: 100%; + font-size: 17px; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--input-border); + background-color: var(--input-background); + outline: none; + border-radius: 7px; +} + +input.cp-input:focus, +textarea.cp-input:focus, +.cp-input input:focus { + background-color: var(--input-focus-background); + border-color: var(--input-focus-border); + transition: background-color 0.2s ease, border-color 0.2s ease; +} + +input.cp-input::placeholder, +textarea.cp-input::placeholder, +.cp-input input::placeholder { + color: var(--input-placeholder); +} + +textarea.cp-input { + line-height: 1.82; + resize: none; +} + +.cp-input.error { + padding-right: 46px; + border: 1px solid var(--input-error-border); + background-position: top 13px right 13px; + background-image: url("../icons/ic-error.svg"); + background-size: 29px; + background-repeat: no-repeat; +} + +.error-message { + color: var(--input-error); + font-size: 14px; + line-height: 1.7; +} + +.cp-input:not(.error) ~ .error-message { + display: none; +} + +.cp-input.error ~ .error-message { + display: block; + width: 100%; + text-align: right; +} + +/* Star rating */ + +.cp-stars { + color: var(--stars); + font-size: 21px; + line-height: 21px; +} + +/* Chip */ + +.cp-chip { + display: inline-block; + padding: 0 17px; + font-size: 15px; + line-height: 32px; + color: var(--chip-text); + border: 1px solid var(--chip-border); + border-radius: 9999px; +} + +.cp-chip.green { + padding: 0 13px; + line-height: 27px; + color: var(--chip-green-text); + background-color: var(--chip-green-background); + border-color: var(--chip-green-border); +} + +/* Avatar */ + +.cp-avatar { + display: inline-block; + width: 30px; + height: 30px; + border-radius: 50%; + background-color: var(--avatar-placeholder); + background-size: cover; + background-position: center; +} + +.cp-avatar.large { + width: 100px; + height: 100px; +} + +.cp-avatar.medium { + width: 60px; + height: 60px; +} + +/* Card */ + +.cp-card { + border-radius: 21px; + box-shadow: 0 3px 16px 0 #f1ece2; + background-color: #ffffff; + will-change: box-shadow; +} + +/* Dialog */ + +.cp-dialog { + padding: 21px 55px 21px 40px; + font-size: 20px; + font-weight: 300; + letter-spacing: -0.35px; + border-radius: 6px; + border: solid 1px var(--dialog-border); + background-color: var(--dialog-background); +} + +.cp-dialog.info { + color: var(--dialog-info); + border-color: transparent; + background-color: transparent; +} + +/* Box */ + +.cp-box { + padding: 68px 145px; + border-radius: 6px; + border: solid 2px var(--box-border); +} + +/* Icon */ + +.cp-icon { + display: inline-block; + width: 25px; + height: 25px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.cp-icon.small { + width: 18px; + height: 18px; +} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" new file mode 100644 index 0000000..c2512a7 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" @@ -0,0 +1,9 @@ +안녕하세요 {{ user }} 회원님, + +아래 링크를 통해 이메일을 인증을 완료해 주세요. + +{{ activate_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" new file mode 100644 index 0000000..8e2cce2 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" @@ -0,0 +1,11 @@ +안녕하세요 {{ user }} 회원님, + +Coplate를 이용해 주셔서 감사합니다! + +정상적인 서비스 이용을 위해서는 이메일 인증이 필요합니다. 아래 링크를 통해 이메일을 인증해 주세요. + +{{ activate_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" new file mode 100644 index 0000000..2dd14f3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" @@ -0,0 +1 @@ +Coplate 이메일 인증 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" new file mode 100644 index 0000000..2dd14f3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" @@ -0,0 +1 @@ +Coplate 이메일 인증 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" new file mode 100644 index 0000000..e1b2be3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" @@ -0,0 +1,9 @@ +안녕하세요 {{ user }} 회원님, + +아래 링크를 통해 계정의 비밀번호를 재설정하실 수 있습니다. + +{{ password_reset_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" new file mode 100644 index 0000000..0d161c0 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" @@ -0,0 +1 @@ +Coplate 비밀번호 재설정 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" new file mode 100644 index 0000000..ed721fb --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" @@ -0,0 +1,12 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>이메일 인증이 완료되었습니다. 감사합니다.</p> + {% if user.is_authenticated %} + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> + {% else %} + <a class="cp-button inverted button" href="{% url 'account_login' %}">로그인 하기</a> + {% endif %} +</div> +{% endblock content %} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" new file mode 100644 index 0000000..181fccc --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>이메일 인증이 필요합니다. {{ user.email }}으로 발송된 이메일을 확인하시고 이메일 인증을 완료해 주세요.</p> + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/login.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/login.html" new file mode 100644 index 0000000..dfd000d --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/login.html" @@ -0,0 +1,41 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}로그인 | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="account"> + <div class="title"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + </div> + <form method="post"> + {% csrf_token %} + {% for error in form.non_field_errors %} + <div class="form-error error-message">{{ error }}</div> + {% endfor %} + <div> + {{ form.login|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:이메일" }} + {% for error in form.login.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:비밀번호" }} + {% for error in form.password.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">로그인</button> + </form> + <div class="info"> + <a class="item" href="{% url 'account_reset_password' %}">비밀번호 찾기</a> + <a class="item" href="{% url 'account_signup' %}">회원가입</a> + </div> + </main> +</div> +{% endblock content %} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/cannot_delete_primary_email.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/cannot_delete_primary_email.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmation_sent.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmation_sent.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmed.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmed.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_deleted.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/email_deleted.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_in.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_in.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_out.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_out.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/password_changed.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/password_changed.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/password_set.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/password_set.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/primary_email_set.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/primary_email_set.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/unverified_primary_email.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/messages/unverified_primary_email.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" new file mode 100644 index 0000000..dad38c9 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" @@ -0,0 +1,35 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 변경 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 변경</h1> + </div> + <form method="post"> + {% csrf_token %} + <div> + {{ form.oldpassword|add_class:"cp-input"|attr:"placeholder:현재 비밀번호"|add_error_class:"error" }} + {% for error in form.oldpassword.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:새 비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:새 비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">완료</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" new file mode 100644 index 0000000..5eb3cfe --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" @@ -0,0 +1,23 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 찾기 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 찾기</h1> + </div> + <form method="post"> + {% csrf_token %} + <div> + {{ form.email|add_class:"cp-input"|attr:"placeholder:가입시 등록한 이메일을 입력해 주세요."|add_error_class:"error" }} + {% for error in form.email.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button account-button" type="submit">이메일 보내기</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" new file mode 100644 index 0000000..fac0a14 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>비밀번호 재설정 메일이 전송되었습니다. 이메일을 확인하시고 안내를 따라주세요.</p> + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" new file mode 100644 index 0000000..4408666 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" @@ -0,0 +1,29 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 재설정 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 재설정</h1> + </div> + <form method="post"> + {% csrf_token %} + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:새 비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:새 비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">완료</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" new file mode 100644 index 0000000..390284b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>비밀번호가 재설정되었습니다.</p> + <a class="cp-button inverted button" href="{% url 'account_login' %}">로그인</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/signup.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/signup.html" new file mode 100644 index 0000000..f4c86d6 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/account/signup.html" @@ -0,0 +1,43 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}회원가입 | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="account"> + <div class="title"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + </div> + <form method="post"> + {% csrf_token %} + <div> + {{ form.email|add_class:"cp-input"|attr:"placeholder:이메일"|add_error_class:"error" }} + {% for error in form.email.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">회원가입</button> + </form> + <div class="info"> + 이미 회원이신가요?<a class="link" href="{% url 'account_login' %}">로그인</a> + </div> + </main> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" new file mode 100644 index 0000000..ecb8da6 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" @@ -0,0 +1,48 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% block content %} +<main class="site-body index"> + <div class="main-header"> + <div class="fg"></div> + <div class="content"> + <h1>오늘은 어디서 먹을까?</h1> + </div> + </div> + <div class="content-list max-content-width"> + <div class="header"> + <h2>리뷰 목록</h2> + <a class="cp-ic-button circle newreview" href="{% url 'review-create' %}">리뷰 작성</a> + </div> + <div class="contents"> + {% for review in latest_reviews %} + <a href="{% url 'review-detail' review.id %}"> + <section class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </section> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + {% if latest_reviews %} + <a class="cp-button" href="{% url 'review-list' %}">전체 리뷰 보러가기</a> + {% endif %} + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" new file mode 100644 index 0000000..c52c518 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" @@ -0,0 +1,71 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load static %} + +{% block title %}{{ profile_user.nickname }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <div class="profile-header"> + <div class="content max-content-width"> + <div class="cp-avatar large profile-pic" style="background-image: url('{{ profile_user.profile_pic.url }}')"></div> + <div class="info"> + <h1 class="username">{{ profile_user.nickname }}</h1> + {% if profile_user == user %} + <a class="edit" href="{% url 'profile-update' %}"> + <img class="cp-icon small" src="{% static 'coplate/icons/ic-pen.svg' %}" alt="Pen Icon"> + 프로필 수정 + </a> + · + <a class="edit" href="{% url 'account_change_password' %}"> + 비밀번호 변경 + </a> + {% endif %} + {% if profile_user.intro %} + <div> + <p class="cp-chip intro">{{ profile_user.intro }}</p> + </div> + {% endif %} + </div> + </div> + </div> + + <div class="content-list max-content-width"> + <div class="header"> + <h2>{{ profile_user.nickname }}님의 최신 리뷰</h2> + {% if user_reviews %} + <a class="cp-ic-button after circle morereview" href="{% url 'user-review-list' profile_user.id %}"> + 리뷰 전체보기 + </a> + {% endif %} + </div> + <div class="contents"> + {% for review in user_reviews %} + <a href="{% url 'review-detail' review.id %}"> + <div class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </div> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" new file mode 100644 index 0000000..f660145 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" @@ -0,0 +1,44 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}환영합니다! | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="profile-form"> + <div class="logo"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </div> + <p class="welcome-message"> + 환영합니다! <strong>프로필</strong>을 작성해주세요 + </p> + <form method="post" enctype="multipart/form-data" autocomplete="off"> + {% csrf_token %} + <div class="profile"> + <div class="profile-pic cp-avatar large" style="background-image: url('{{ user.profile_pic.url }}')"></div> + <div class="file"> + {{ form.profile_pic }} + </div> + </div> + <div class="nickname"> + {{ form.nickname|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:닉네임" }} + {% for error in form.nickname.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.intro|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:자신을 소개해 주세요!" }} + {% for error in form.intro.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="buttons"> + <button class="cp-button" type="submit">완료</button> + </div> + </form> + </main> +</div> +{% endblock content %} + \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" new file mode 100644 index 0000000..74ff8a6 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" @@ -0,0 +1,35 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}프로필 수정 | Coplate{% endblock title %} + +{% block content %} +<main class="profile-form"> + <form method="post" enctype="multipart/form-data" autocomplete="off"> + {% csrf_token %} + <div class="profile"> + <div class="profile-pic cp-avatar large" style="background-image: url('{{ user.profile_pic.url }}')"></div> + <div class="file"> + {{ form.profile_pic }} + </div> + </div> + <div class="nickname"> + {{ form.nickname|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:닉네임" }} + {% for error in form.nickname.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.intro|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:자신을 소개해 주세요!" }} + {% for error in form.intro.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="buttons"> + <a class="cp-button secondary cancel" href="{% url 'profile' user.id %}">취소</a> + <button class="cp-button" type="submit">완료</button> + </div> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" new file mode 100644 index 0000000..2c943f4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" @@ -0,0 +1,14 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% block title %}{{ review.title }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <form class="cp-dialog confirm-delete" method="post"> + {% csrf_token %} + <span class="content">정말 리뷰를 삭제하시겠습니까?</span> + <button class="cp-button warn" type="submit">삭제</button> + <a class="cp-button secondary" href="{% url 'review-detail' review.id %}">취소</a> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" new file mode 100644 index 0000000..5f46937 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" @@ -0,0 +1,54 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load static %} + +{% block title %}{{ review.title }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <article class="review-detail max-content-width"> + <div class="review-info"> + <div class="restaurant-name"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + </div> + <h1 class="title">{{ review.title }}</h1> + <a class="review-author" href="{% url 'profile' review.author.id %}"> + <div class="author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </a> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + </div> + + <div class="content"> + <img class="thumb" src="{{ review.image1.url }}"> + {% if review.image2 %} + <img class="thumb" src="{{ review.image2.url }}"> + {% endif %} + {% if review.image3 %} + <img class="thumb" src="{{ review.image3.url }}"> + {% endif %} + <p class="content">{{ review.content|linebreaksbr }}</p> + <a class="location" target="_blank" href="{{ review.restaurant_link }}"> + <img class="cp-icon" src="{% static 'coplate/icons/ic-pin.svg' %}" alt="Pin Icon"> + <span>위치보기</span> + </a> + </div> + + {% if review.author == user %} + <div class="footer"> + <div class="buttons"> + <a class="cp-button warn" href="{% url 'review-delete' review.id %}">삭제</a> + <a class="cp-button secondary" href="{% url 'review-update' review.id %}">수정</a> + </div> + </div> + {% endif %} + </article> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" new file mode 100644 index 0000000..29953b6 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" @@ -0,0 +1,98 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load widget_tweaks %} + +{% block title %} +{% if review %}{{ review.title }}{% else %}새 리뷰 작성{% endif %} | Coplate +{% endblock title %} + +{% block content %} +<main class="site-body"> + <form class="review-form max-content-width" method="post" autocomplete="off" enctype="multipart/form-data"> + {% csrf_token %} + <div class="title"> + {{ form.title|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:제목" }} + {% for error in form.title.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="restaurant-name"> + {{ form.restaurant_name|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:음식점 이름" }} + {% for error in form.restaurant_name.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="restaurant-link"> + {{ form.restaurant_link|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:네이버 또는 카카오 플레이스 주소" }} + {% for error in form.restaurant_link.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="rating"> + <div class="cp-stars"> + {% for radio in form.rating %} + {{ radio }} + {% endfor %} + </div> + {% for error in form.rating.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.content|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:리뷰를 작성해 주세요." }} + {% for error in form.title.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="file"> + <div class="file-content"> + {% if review.image1 %} + <img src="{{ review.image1.url }}"> + {% endif %} + <div> + {{ form.image1 }} + {% for error in form.image1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + <div class="file"> + <div class="file-content"> + {% if review.image2 %} + <img src="{{ review.image2.url }}"> + {% endif %} + <div> + {{ form.image2 }} + {% for error in form.image2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + <div class="file"> + <div class="file-content"> + {% if review.image3 %} + <img src="{{ review.image3.url }}"> + {% endif %} + <div> + {{ form.image3 }} + {% for error in form.image3.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + + <div class="buttons"> + <a + class="cp-button secondary cancel" + href="{% if review %}{% url 'review-detail' review.id %}{% else %}{% url 'index' %}{% endif %}" + > + 취소 + </a> + <button class="cp-button submit" type="submit">완료</button> + </div> + </form> +</main> +{% endblock content %} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_list.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_list.html" new file mode 100644 index 0000000..e9f529b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/review_list.html" @@ -0,0 +1,59 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% block title %}리뷰 목록 ({{ paginator.count }}) | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <div class="content-list max-content-width"> + <div class="header"> + <h2>리뷰 목록</h2> + </div> + <div class="contents"> + {% for review in reviews %} + <a href="{% url 'review-detail' review.id %}"> + <section class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </section> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + {% if is_paginated %} + <ul class="pagination"> + {% if page_obj.has_previous %} + <li><a href="?page=1">처음</a></li> + <li><a href="?page={{ page_obj.previous_page_number }}">이전</a></li> + {% endif %} + {% for num in page_obj.paginator.page_range %} + {% if page_obj.number == num %} + <li class="current">{{ num }}</li> + {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %} + <li><a href="?page={{ num }}">{{ num }}</a></li> + {% endif %} + {% endfor %} + {% if page_obj.has_next %} + <li><a href="?page={{ page_obj.next_page_number }}">다음</a></li> + <li><a href="?page={{ page_obj.paginator.num_pages }}">마지막</a></li> + {% endif %} + </ul> + {% endif %} + </div> +</main> +{% endblock content %} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" new file mode 100644 index 0000000..a56bfd3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" @@ -0,0 +1,63 @@ +{% extends "coplate_base/base_with_navbar.html" %} +{% load static %} + +{% block title %}{{ profile_user.nickname }}님의 리뷰 | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <div class="content-list max-content-width"> + <div class="header"> + <h2>{{ profile_user.nickname }}님의 리뷰 ({{ paginator.count }})</h2> + </div> + <div class="contents"> + {% for review in user_reviews %} + <a href="{% url 'review-detail' review.id %}"> + <div class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </div> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + <div class="wrap-pagination"> + <a class="cp-ic-button circle backbutton" href="{% url 'profile' profile_user.id %}">프로필로 돌아가기</a> + {% if is_paginated %} + <ul class="pagination"> + {% if page_obj.has_previous %} + <li><a href="?page=1">처음</a></li> + <li><a href="?page={{ page_obj.previous_page_number }}">이전</a></li> + {% endif %} + {% for num in page_obj.paginator.page_range %} + {% if page_obj.number == num %} + <li class="current">{{ num }}</li> + {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %} + <li><a href="?page={{ num }}">{{ num }}</a></li> + {% endif %} + {% endfor %} + {% if page_obj.has_next %} + <li><a href="?page={{ page_obj.next_page_number }}">다음</a></li> + <li><a href="?page={{ page_obj.paginator.num_pages }}">마지막</a></li> + {% endif %} + </ul> + {% endif %} + </div> + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" new file mode 100644 index 0000000..d875aa3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" @@ -0,0 +1,20 @@ +{% load static %} + +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + + <link rel="stylesheet" type="text/css" href="{% static 'coplate/styles/style.css' %}"> + <link rel="stylesheet" type="text/css" href="{% static 'coplate/styles/theme.css' %}"> + <link rel="shortcut icon" type="image/png" href="{% static 'coplate/favicon/favicon.ico' %}"> + + <title>{% block title %}Coplate{% endblock title %}</title> + </head> + <body> + {% block header %}{% endblock header %} + {% block content %}{% endblock content %} + {% block footer %}{% endblock footer %} + </body> +</html> diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" new file mode 100644 index 0000000..d689334 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" @@ -0,0 +1,11 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} + +{% block header %} +<header class="site-header only-logo max-content-width"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> +</header> +{% endblock header %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" new file mode 100644 index 0000000..6db795f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" @@ -0,0 +1,36 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} + +{% block header %} +<header class="site-header navbar"> + <div class="content max-width"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + <nav> + <ul class="navbar"> + {% if user.is_authenticated %} + {% if user.is_staff %} + <li><a href="{% url 'admin:index' %}">관리자</a></li> + {% endif %} + <li><a href="{% url 'profile' user.id %}">내 프로필</a></li> + <li><a href="{% url 'account_logout' %}">로그아웃</a></li> + {% else %} + <li><a href="{% url 'account_login' %}">로그인</a></li> + <li><a href="{% url 'account_signup' %}">회원가입</a></li> + {% endif %} + </ul> + </nav> + </div> +</header> +{% endblock header %} + +{% block footer %} +<footer class="site-footer"> + <div class="max-content-width content"> + <div></div> + <div>COPLATE</div> + </div> +</footer> +{% endblock footer %} diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/tests.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/tests.py" new file mode 100644 index 0000000..7ce503c --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/tests.py" @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/urls.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/urls.py" new file mode 100644 index 0000000..ccfafd1 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/urls.py" @@ -0,0 +1,19 @@ +from django.urls import path + +from . import views + +urlpatterns = [ + # review + path('', views.IndexView.as_view(), name='index'), + path('reviews/', views.ReviewListView.as_view(), name='review-list'), + path('reviews/<int:review_id>/', views.ReviewDetailView.as_view(), name='review-detail'), + path('reviews/new/', views.ReviewCreateView.as_view(), name='review-create'), + path('reviews/<int:review_id>/edit/', views.ReviewUpdateView.as_view(), name='review-update'), + path('reviews/<int:review_id>/delete/', views.ReviewDeleteView.as_view(), name='review-delete'), + + # profile + path('users/<int:user_id>/', views.ProfileView.as_view(), name='profile'), + path('users/<int:user_id>/reviews/', views.UserReviewListView.as_view(), name='user-review-list'), + path('set-profile/', views.ProfileSetView.as_view(), name='profile-set'), + path('edit-profile/', views.ProfileUpdateView.as_view(), name='profile-update'), +] diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/validators.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/validators.py" new file mode 100644 index 0000000..ea55554 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/validators.py" @@ -0,0 +1,55 @@ +import string +from django.core.exceptions import ValidationError + + +def contains_special_character(value): + for char in value: + if char in string.punctuation: + return True + return False + + +def contains_uppercase_letter(value): + for char in value: + if char.isupper(): + return True + return False + + +def contains_lowercase_letter(value): + for char in value: + if char.islower(): + return True + return False + + +def contains_number(value): + for char in value: + if char.isdigit(): + return True + return False + + +class CustomPasswordValidator: + def validate(self, password, user=None): + if ( + len(password) < 8 or + not contains_uppercase_letter(password) or + not contains_lowercase_letter(password) or + not contains_number(password) or + not contains_special_character(password) + ): + raise ValidationError("8자 이상의 영문 대/소문자, 숫자, 특수문자 조합이어야 합니다.") + + def get_help_text(self): + return "8자 이상의 영문 대/소문자, 숫자, 특수문자 조합을 입력해 주세요." + + +def validate_no_special_characters(value): + if contains_special_character(value): + raise ValidationError("특수문자를 포함할 수 없습니다.") + + +def validate_restaurant_link(value): + if 'place.naver.com' not in value and 'place.map.kakao.com' not in value: + raise ValidationError('place.naver.com 또는 place.map.kakao.com이 들어가야 합니다.') \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/views.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/views.py" new file mode 100644 index 0000000..c61035b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate/views.py" @@ -0,0 +1,147 @@ +from django.shortcuts import render, get_object_or_404 +from django.urls import reverse +from django.views.generic import ( + View, + ListView, + DetailView, + CreateView, + UpdateView, + DeleteView +) + +from braces.views import LoginRequiredMixin, UserPassesTestMixin + +from allauth.account.views import PasswordChangeView +from allauth.account.models import EmailAddress + +from .models import Review, User +from .forms import ReviewForm, ProfileForm +from .functions import confirmation_required_redirect + + +class IndexView(View): + def get(self, request, *args, **kwargs): + context = {} + context['latest_reviews'] = Review.objects.all()[:4] + return render(request, 'coplate/index.html', context) + + +class ReviewListView(ListView): + model = Review + context_object_name = 'reviews' + template_name = 'coplate/review_list.html' + paginate_by = 8 + + +class ReviewDetailView(DetailView): + model = Review + template_name = 'coplate/review_detail.html' + pk_url_kwarg = 'review_id' + + +class ReviewCreateView(LoginRequiredMixin, UserPassesTestMixin, CreateView): + model = Review + form_class = ReviewForm + template_name = 'coplate/review_form.html' + + redirect_unauthenticated_users = True + raise_exception = confirmation_required_redirect + + def form_valid(self, form): + form.instance.author = self.request.user + return super().form_valid(form) + + def get_success_url(self): + return reverse('review-detail', kwargs={'review_id': self.object.id}) + + def test_func(self, user): + return EmailAddress.objects.filter(user=user, verified=True).exists() + + +class ReviewUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): + model = Review + form_class = ReviewForm + template_name = 'coplate/review_form.html' + pk_url_kwarg = 'review_id' + + redirect_unauthenticated_users = False + raise_exception = True + + def get_success_url(self): + return reverse('review-detail', kwargs={'review_id': self.object.id}) + + def test_func(self, user): + review = self.get_object() + return review.author == user + + +class ReviewDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): + model = Review + template_name = 'coplate/review_confirm_delete.html' + pk_url_kwarg = 'review_id' + + redirect_unauthenticated_users = False + raise_exception = True + + def get_success_url(self): + return reverse('index') + + def test_func(self, user): + review = self.get_object() + return review.author == user + +class ProfileView(DetailView): + model = User + template_name = 'coplate/profile.html' + pk_url_kwarg = 'user_id' + context_object_name = 'profile_user' + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['user_reviews'] = Review.objects.filter(author__id=self.kwargs.get('user_id'))[:4] + return context + + +class UserReviewListView(ListView): + model = Review + template_name = 'coplate/user_review_list.html' + context_object_name = 'user_reviews' + paginate_by = 4 + + def get_queryset(self): + return Review.objects.filter(author__id=self.kwargs.get('user_id')) + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context['profile_user'] = get_object_or_404(User, id=self.kwargs.get('user_id')) + return context + + +class ProfileSetView(LoginRequiredMixin, UpdateView): + model = User + form_class = ProfileForm + template_name = 'coplate/profile_set_form.html' + + def get_object(self, queryset=None): + return self.request.user + + def get_success_url(self): + return reverse('index') + + +class ProfileUpdateView(LoginRequiredMixin, UpdateView): + model = User + form_class = ProfileForm + template_name = 'coplate/profile_update_form.html' + + def get_object(self, queryset=None): + return self.request.user + + def get_success_url(self): + return reverse('profile', kwargs={'user_id': self.request.user.id}) + + +class CustomPasswordChangeView(LoginRequiredMixin, PasswordChangeView): + def get_success_url(self): + return reverse('profile', kwargs={'user_id': self.request.user.id}) + \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__init__.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/__init__.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/__init__.cpython-37.pyc" new file mode 100644 index 0000000..bffd289 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/__init__.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/settings.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/settings.cpython-37.pyc" new file mode 100644 index 0000000..a11eb99 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/settings.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/urls.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/urls.cpython-37.pyc" new file mode 100644 index 0000000..1ece2a2 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/urls.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/wsgi.cpython-37.pyc" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/wsgi.cpython-37.pyc" new file mode 100644 index 0000000..8c9e641 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/__pycache__/wsgi.cpython-37.pyc" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/settings.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/settings.py" new file mode 100644 index 0000000..b6ae9b9 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/settings.py" @@ -0,0 +1,158 @@ +""" +Django settings for coplate_project project. + +Generated by 'django-admin startproject' using Django 2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.2/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'yxse)n^ji6z74i9n)lnvye@084(z1+%f6qz==9h3(^19$=7gbd' + +# 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', + 'django.contrib.sites', + + 'coplate', + + 'widget_tweaks', + + 'allauth', + 'allauth.account', + 'allauth.socialaccount', +] + +SITE_ID = 1 + +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', + + 'coplate.middleware.ProfileSetupMiddleware', +] + +ROOT_URLCONF = 'coplate_project.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 = 'coplate_project.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + 'NAME': 'coplate.validators.CustomPasswordValidator', + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.2/topics/i18n/ + +LANGUAGE_CODE = 'ko' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ + +STATIC_URL = '/static/' + +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') + +MEDIA_URL = '/uploads/' + + +# Auth settings + +AUTH_USER_MODEL = 'coplate.User' + +AUTHENTICATION_BACKENDS = [ + # Needed to login by username in Django admin, regardless of `allauth` + 'django.contrib.auth.backends.ModelBackend', + + # `allauth` specific authentication methods, such as login by e-mail + 'allauth.account.auth_backends.AuthenticationBackend', +] + +LOGIN_URL = 'account_login' +ACCOUNT_SIGNUP_REDIRECT_URL = 'profile-set' +LOGIN_REDIRECT_URL = 'index' +ACCOUNT_LOGOUT_ON_GET = True +ACCOUNT_AUTHENTICATION_METHOD = 'email' +ACCOUNT_EMAIL_REQUIRED = True +ACCOUNT_USERNAME_REQUIRED = False +ACCOUNT_SESSION_REMEMBER = True +ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = True + +ACCOUNT_CONFIRM_EMAIL_ON_GET = True +ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = 'account_email_confirmation_done' +ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = 'account_email_confirmation_done' +ACCOUNT_EMAIL_SUBJECT_PREFIX = '' + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/urls.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/urls.py" new file mode 100644 index 0000000..5aaf59f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/urls.py" @@ -0,0 +1,46 @@ +"""coplate_project URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/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 +from django.views.generic import TemplateView +from django.conf import settings +from django.conf.urls.static import static + +from coplate.views import CustomPasswordChangeView + +urlpatterns = [ + # admin + path('admin/', admin.site.urls), + + # coplate + path('', include('coplate.urls')), + + # allauth + path( + 'email-confirmation-required/', + TemplateView.as_view(template_name='account/email_confirmation_required.html'), + name='account_email_confirmation_required', + ), + path( + 'email-confirmation-done/', + TemplateView.as_view(template_name='account/email_confirmation_done.html'), + name='account_email_confirmation_done', + ), + path('password/change/', CustomPasswordChangeView.as_view(), name='account_change_password'), + path('', include('allauth.urls')), +] + +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/wsgi.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/wsgi.py" new file mode 100644 index 0000000..6f3a39f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/coplate_project/wsgi.py" @@ -0,0 +1,16 @@ +""" +WSGI config for coplate_project 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/2.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'coplate_project.settings') + +application = get_wsgi_application() diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/data.json" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/data.json" new file mode 100644 index 0000000..8ef907e --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/data.json" @@ -0,0 +1 @@ +[{"model": "coplate.user", "pk": 1, "fields": {"password": "pbkdf2_sha256$150000$IQ9pdPsLGLPe$swr4bGrEk49MXgqzp7IbbHIFoj8HMhTbgl1O3nUjuRY=", "last_login": "2021-12-16T13:54:13.333Z", "is_superuser": true, "username": "admin", "first_name": "", "last_name": "", "email": "admin@example.com", "is_staff": true, "is_active": true, "date_joined": "2021-12-15T07:18:31.324Z", "nickname": "admin", "profile_pic": "default_profile_pic.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 2, "fields": {"password": "pbkdf2_sha256$150000$KvlwLn5q8bVH$qhUTSTDZSz9+oJzVCYipY3SMr9Esp/T7gexmcArmqzI=", "last_login": "2021-12-16T13:45:51.388Z", "is_superuser": false, "username": "codeit", "first_name": "", "last_name": "", "email": "codeit@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:15:17.108Z", "nickname": "\ucf54\ub4dc\uc787", "profile_pic": "profile_pics/codeit_logo.png", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 3, "fields": {"password": "pbkdf2_sha256$150000$p172IWs2tm8x$g0i+NVX2+lwdrOM/y3i04w+shTGBRQacxxcBisOnslE=", "last_login": "2021-12-15T06:55:56.701Z", "is_superuser": false, "username": "groo", "first_name": "", "last_name": "", "email": "groo@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T06:55:56.597Z", "nickname": "\uc544\uc774\uc570\uadf8\ub8e8\ud2b8", "profile_pic": "profile_pics/shutterstock_1398402392.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 4, "fields": {"password": "pbkdf2_sha256$150000$BSjStOenhan7$+SwL2JeoI1NrgneAhSBbx3Z5ttwdsqotw2nUAtb3tE8=", "last_login": "2021-12-15T07:00:13.904Z", "is_superuser": false, "username": "yuna", "first_name": "", "last_name": "", "email": "yuna@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:00:13.816Z", "nickname": "\uc720\ub098", "profile_pic": "profile_pics/shutterstock_1836020740.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 5, "fields": {"password": "pbkdf2_sha256$150000$gaD6Cz7U6enz$vh+7STV3XrnUYAit49jhCv+LBTSB77oVQqQk7wyyQ8o=", "last_login": "2021-12-15T07:01:56.949Z", "is_superuser": false, "username": "joy", "first_name": "", "last_name": "", "email": "joy@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:01:56.857Z", "nickname": "\uc870\uc774", "profile_pic": "profile_pics/shutterstock_1568190193.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 6, "fields": {"password": "pbkdf2_sha256$150000$Xz5PzO0t3HCv$7G55hHw1kpmnGxAoayAJ3tXRMKCitnTh/HjRg8CuATg=", "last_login": "2021-12-15T07:03:27.009Z", "is_superuser": false, "username": "koby", "first_name": "", "last_name": "", "email": "koby@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:03:26.918Z", "nickname": "\uc544\ubcf4\uce74\ub3c488", "profile_pic": "profile_pics/shutterstock_1492811585.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 7, "fields": {"password": "pbkdf2_sha256$150000$Sf6GbrQbKIzM$MqDCzff9c92S/UMznvsA6mAt7X4NfLI45uqM2bX0+HU=", "last_login": "2021-12-15T07:06:00.608Z", "is_superuser": false, "username": "daisy", "first_name": "", "last_name": "", "email": "daisy@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:06:00.514Z", "nickname": "\uc5bc\uc8fd\uc544", "profile_pic": "profile_pics/shutterstock_1673823133.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 8, "fields": {"password": "pbkdf2_sha256$150000$7TNPE9mcb5Os$RBA7/4lHkRFmmyOoiQkvXTFxTZhTBLFnk1KFU6Aj/5Q=", "last_login": "2021-12-15T07:07:50.906Z", "is_superuser": false, "username": "jho24", "first_name": "", "last_name": "", "email": "jho24@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:07:50.815Z", "nickname": "whdgns24", "profile_pic": "default_profile_pic.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 9, "fields": {"password": "pbkdf2_sha256$150000$GnMW2KAV8NXs$XV8sw/lMz9yzjfHsRZGK/wxIIxU31hY3gLfgUMwQWgU=", "last_login": "2021-12-15T07:09:03.162Z", "is_superuser": false, "username": "sunny1024", "first_name": "", "last_name": "", "email": "sunny1024@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:09:03.071Z", "nickname": "\uc368\ub2c8", "profile_pic": "default_profile_pic.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 10, "fields": {"password": "pbkdf2_sha256$150000$AlqWUiy16IV3$QevfNzBQg4In8MUO9P1fL0tPzUHCyK/Rj3vppApxr4o=", "last_login": "2021-12-15T07:13:13.983Z", "is_superuser": false, "username": "bombom", "first_name": "", "last_name": "", "email": "bombom@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:13:13.891Z", "nickname": "\ubd04\ubd04", "profile_pic": "profile_pics/shutterstock_128492572.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 11, "fields": {"password": "pbkdf2_sha256$150000$RfJe3uvXTaHj$4dH1DBFGlOiA1DhAMzMtMmARo7gwJQ+doIuTzyrSrhA=", "last_login": "2021-12-15T07:15:02.440Z", "is_superuser": false, "username": "bjt", "first_name": "", "last_name": "", "email": "bjt@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:15:02.346Z", "nickname": "\uace0\uad6c\ub9c8\ud321\ud321", "profile_pic": "default_profile_pic.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 12, "fields": {"password": "pbkdf2_sha256$150000$nwxTtBD7QXt9$i3zG/lVs+uV/08X2DmXLpyS+4IOoowxbIe47Yqo1lEo=", "last_login": "2021-12-15T07:21:48.805Z", "is_superuser": false, "username": "peter", "first_name": "", "last_name": "", "email": "peter@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:21:48.708Z", "nickname": "\ud53c\ud130", "profile_pic": "profile_pics/shutterstock_478297573.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.user", "pk": 13, "fields": {"password": "pbkdf2_sha256$150000$lavyB8T5N1Sy$S2oiJsFcKB5LbQX6Q7e53tzG+xLVYwybolHgtK9G8Uc=", "last_login": "2021-12-15T07:33:01.225Z", "is_superuser": false, "username": "martin", "first_name": "", "last_name": "", "email": "martin@example.com", "is_staff": false, "is_active": true, "date_joined": "2021-12-15T07:33:01.138Z", "nickname": "\uae30\ud0c0\ub9ac\uc2a4\ud2b8", "profile_pic": "profile_pics/shutterstock_1007059798.jpg", "intro": "", "groups": [], "user_permissions": []}}, {"model": "coplate.review", "pk": 1, "fields": {"title": "\ucf54\uc2a4\ubc84\uac70\uc5d0 \ub2e4\ub140\uc624\ub2e4!", "restaurant_name": "\ucf54\uc2a4\ubc84\uac70", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 4, "image1": "review_pics/burger.png", "image2": "", "image3": "", "content": "\ubc84\uac70\ub791 \uac10\uc790\ud280\uae40 \ub2e4 \ub9db\uc788\uc5c8\uc5b4\uc694!\r\n\ucf5c\ub77c\ub294 \uc5ed\uc2dc \uc81c\ub85c\ucf55!", "dt_created": "2021-12-17T08:25:14.111Z", "dt_updated": "2021-12-18T13:53:40.521Z", "author": 5}}, {"model": "coplate.review", "pk": 2, "fields": {"title": "\ubca0\uc774\ucee8 \ubc84\uac70\uac00 \uc544\uc8fc \ub9db\uc788\uc5c8\ub358 \ucf54\uc2a4\ubc84\uac70", "restaurant_name": "\ucf54\uc2a4\ubc84\uac70", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 5, "image1": "review_pics/shutterstock_406893664.jpg", "image2": "review_pics/shutterstock_308133647.jpg", "image3": "", "content": "\ub54c \ub0b4\uc77c \uc4f8\uc4f8\ud568\uacfc \uac70\uc678\ub2e4. \uba40\ub9ac \ucd94\uc5b5\uacfc \ud558\ub098 \ub458 \uac70\uc678\ub2e4. \uc18c\ub140\ub4e4\uc758 \ud558\ub298\uc5d0\ub294 \uc5b8\ub355 \uac83\uc740 \ubcc4\uc774 \uc774\ub7f0 \ubc8c\ub808\ub294 \ud759\uc73c\ub85c \ubb3b\ud78c \uc788\uc2b5\ub2c8\ub2e4. \uac00\uc744 \uae4c\ub2ed\uc774\uc694, \uc5b8\ub355 \ubb34\uc131\ud560 \ubd05\ub2c8\ub2e4. \uc544\ubb34 \ud558\ub298\uc5d0\ub294 \uc5c6\uc774 \uacc4\uc808\uc774 \ub54c \uc774\ub984\uacfc, \ub9b4\ucf00 \ubd05\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ubb34\ub364 \uc2dc\uc640 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ud558\ub098\uc5d0 \ubcc4 \ub458 \uc704\uc5d0\ub3c4 \ub098\ub294 \uc774\ub984\uc744 \ub77c\uc774\ub108 \ub0a8\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc18c\ud559\uad50 \uac15\uc544\uc9c0, \ubc8c\ub808\ub294 \uc5c6\uc774 \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8 \ub4ef\ud569\ub2c8\ub2e4. \ud53c\uc5b4\ub098\ub4ef\uc774 \uba40\ub9ac \ubb34\uc131\ud560 \uc2dc\uc640 \ubc8c\ub808\ub294 \uc5b4\uba38\ub2d8, \uadf8\ub9ac\uace0 \uc2ac\ud37c\ud558\ub294 \uacc4\uc808\uc774 \ubd05\ub2c8\ub2e4. \uc18d\uc758 \ud328, \ud480\uc774 \uc625 \ubcc4 \uc774\ub984\uacfc, \uc544\uce68\uc774 \uc774\ub7f0 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ubb34\uc5c7\uc778\uc9c0 \ud30c\ub780 \ub098\uc758 \uc18c\ub140\ub4e4\uc758 \ubcc4 \uc704\uc5d0\ub3c4 \ub4ef\ud569\ub2c8\ub2e4. \ub098\ub294 \uc18c\ud559\uad50 \ubcc4 \uacc4\uc2ed\ub2c8\ub2e4. \ubcc4 \uacc4\uc808\uc774 \uc5c6\uc774 \ubd81\uac04\ub3c4\uc5d0 \uc6b0\ub294 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ucc45\uc0c1\uc744 \uba40\ub9ac \uc5b4\uba38\ub2c8, \ubcc4 \uc624\ub294 \uc6b0\ub294 \ubcc4 \uac70\uc678\ub2e4. \uc2dc\uc640 \ubd88\ub7ec \ub178\uc0c8, \ubb34\uc131\ud560 \uac70\uc678\ub2e4. \uc368 \ub9c8\ub9ac\uc544 \uc544\ubb34 \ud5e4\uc77c \uc774\ub984\uacfc, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud5e4\uc77c \ub41c \uac00\ub4dd \uc625 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ubd88\ub7ec \uc774\uad6d \uc18c\ub140\ub4e4\uc758 \uac00\ub4dd \ub108\ubb34\ub098 \uae4c\ub2ed\uc774\uc694, \ud558\ub098 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud53c\uc5b4\ub098\ub4ef\uc774 \ub458 \ubcc4 \uba40\ub9ac \ud558\ub098\uc758 \uc774\ub984\uacfc, \ubd05\ub2c8\ub2e4. \ub108\ubb34\ub098 \ud480\uc774 \ud328, \ubb34\ub364 \ub178\ub8e8, \ud558\ub098\uc5d0 \uc774\ub984\uc790\ub97c \ubb34\uc131\ud560 \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud759\uc73c\ub85c \ubb34\uc5c7\uc778\uc9c0 \uc6b0\ub294 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc0ac\ub78c\ub4e4\uc758 \uc2dc\uc778\uc758 \uc774\ub7f0 \ub54c \ud558\ub098\uc5d0 \ubcc4 \uc774\uc6c3 \uc774\ub984\uacfc \ub2e4 \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uc774\ub984\uacfc \ubb3b\ud78c \ubcc4\uc774 \ub9c8\ub9ac\uc544 \uc704\uc5d0\ub3c4 \ud55c \uc560\uae30 \uc18c\ud559\uad50 \uc788\uc2b5\ub2c8\ub2e4. \uc7a0, \uadf8\ub7ec\ub098 \ubc24\uc744 \ubb34\ub364 \uc788\uc2b5\ub2c8\ub2e4. \uc2ac\ud37c\ud558\ub294 \ud1a0\ub07c, \ubcc4\uc774 \ubcc4 \uc0c8\uc6cc \ub4ef\ud569\ub2c8\ub2e4. \uc774\uc6c3 \ubcc4 \uc5b4\uba38\ub2c8, \uc54a\uc740 \ubc24\uc744 \uc624\uba74 \ub9ce\uc740 \ud328, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc18c\ud559\uad50 \ud558\ub098\uc5d0 \ud55c \uc0ac\ub78c\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \ub458 \ub41c \uc788\uc2b5\ub2c8\ub2e4. \uc54a\uc740 \uc774\uc6c3 \ubcc4 \uacc4\uc2ed\ub2c8\ub2e4. \ub0b4 \ud504\ub791\uc2dc\uc2a4 \uc2dc\uc778\uc758 \uac00\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ud5e4\uc77c \uc624\uba74 \ud480\uc774 \uc774\ub984\uc790\ub97c \ud558\ub098\uc5d0 \uc5b8\ub355 \uccad\ucd98\uc774 \ub178\uc0c8, \ub4ef\ud569\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc774 \ud5e4\uc77c \uc0ac\ub78c\ub4e4\uc758 \uc54a\uc740 \uc788\uc2b5\ub2c8\ub2e4.", "dt_created": "2021-11-12T08:43:40Z", "dt_updated": "2021-11-12T09:26:03.937Z", "author": 3}}, {"model": "coplate.review", "pk": 3, "fields": {"title": "\uce74\ub808 \ub9db\uc9d1 \ucf54\uce58\ubc18 \uc18c\uac1c", "restaurant_name": "\ucf54\uce58\ubc18", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 5, "image1": "review_pics/shutterstock_1828229984.jpg", "image2": "review_pics/shutterstock_1561160462.jpg", "image3": "", "content": "\ubd81\uac04\ub3c4\uc5d0 \ubcc4 \uadf8\ub7ec\ub098 \ubd88\ub7ec \ucd94\uc5b5\uacfc \uac70\uc678\ub2e4. \uc2dc\uc778\uc758 \ubcc4 \ud558\ub098\uc5d0 \uc18c\ud559\uad50 \uc774\ub984\uacfc, \ucc45\uc0c1\uc744 \ubcc4\ub4e4\uc744 \ub9c8\ub514\uc529 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubb3b\ud78c \uc0c8\uc6cc \ud558\ub098\uc5d0 \ubd88\ub7ec \ub178\uc0c8, \ubc8c\ub808\ub294 \ub77c\uc774\ub108 \ub108\ubb34\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc774 \ubcc4 \ub534\uc740 \ub098\uc758 \uc774\ub984\uacfc \ubcc4\uc744 \uc704\uc5d0 \uc7a0, \ub9d0 \uc788\uc2b5\ub2c8\ub2e4. \uacbd, \uac00\uc2b4\uc18d\uc5d0 \ub2e4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uba40\ub4ef\uc774, \ud558\ub098\uc5d0 \ubd81\uac04\ub3c4\uc5d0 \uba40\ub9ac \ubd05\ub2c8\ub2e4. \ubcc4 \uadf8\ub9ac\uc6cc \uc704\uc5d0 \uacc4\uc2ed\ub2c8\ub2e4. \uc704\uc5d0 \ubcc4 \uc774\ub984\uc790 \uac83\uc740 \uc544\uc9c1 \uae4c\ub2ed\uc774\uc694, \uc774\ub7f0 \ub4ef\ud569\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \ubb34\uc5c7\uc778\uc9c0 \uac83\uc740 \uadf8\ub7ec\ub098 \ubcf4\uace0, \uacc4\uc9d1\uc560\ub4e4\uc758 \uc0ac\ub791\uacfc \uc26c\uc774 \uc5c6\uc774 \ub4ef\ud569\ub2c8\ub2e4. \uc794\ub514\uac00 \ud588\ub358 \ucc28 \ubc8c\uc368 \uac83\uc740 \uac70\uc678\ub2e4. \ubcc4 \ubc24\uc744 \uc774\ub7f0 \ub9d0 \ubcc4\ub4e4\uc744 \ubc8c\uc368 \uac00\uc2b4\uc18d\uc5d0 \uac00\ub09c\ud55c \uac70\uc678\ub2e4.\r\n\r\n\ud30c\ub780 \ub77c\uc774\ub108 \uc774\uad6d \uac15\uc544\uc9c0, \uc774 \ub3d9\uacbd\uacfc \ud1a0\ub07c, \uc18c\ud559\uad50 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ucc45\uc0c1\uc744 \ub2e4 \uc774\ub124\ub4e4\uc740 \ub9d0 \ud328, \uc5b8\ub355 \uba40\ub4ef\uc774, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub458 \uc0c8\uaca8\uc9c0\ub294 \uac83\uc740 \uae4c\ub2ed\uc774\uc694, \uc5b8\ub355 \uaca8\uc6b8\uc774 \ud30c\ub780 \uc0ac\ub78c\ub4e4\uc758 \uc0ac\ub791\uacfc \uac70\uc678\ub2e4. \uac00\uc744 \uc5b8\ub355 \ubcc4 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ub458 \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8 \ubcc4 \uac70\uc678\ub2e4. \ucc45\uc0c1\uc744 \ub2e4\ud558\uc9c0 \uc2dc\uc640 \uc794\ub514\uac00 \ubcc4 \ubcc4 \ub4ef\ud569\ub2c8\ub2e4. \uc5b8\ub355 \ub178\ub8e8, \ud588\ub358 \ubcc4 \uc774\ub984\uacfc \ucc28 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcf4\uace0, \uac19\uc774 \uc625 \ub178\uc0c8, \ubc24\uc774 \ud1a0\ub07c, \ub2e4 \uc5b4\uba38\ub2c8, \ud558\ub098\uc5d0 \ubd05\ub2c8\ub2e4. \ud558\ub298\uc5d0\ub294 \ub36e\uc5b4 \uc5b4\uba38\ub2d8, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uac00\ub09c\ud55c \uc774\ub984\uc744 \uae4c\ub2ed\uc774\uc694, \ub2f9\uc2e0\uc740 \uc624\ub294 \uac83\uc740 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uce68\uc774 \uc774\uad6d \uba40\ub9ac \uc5b4\uba38\ub2d8, \uc774\ub984\uacfc \ucd94\uc5b5\uacfc \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\uc5b4\uba38\ub2d8, \ud558\ub098 \uc774\ub984\uacfc, \ubd04\uc774 \uacbd, \ubd05\ub2c8\ub2e4. \uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uac00\ub4dd \uccad\ucd98\uc774 \uc774\ub984\uc744 \uc2ac\ud37c\ud558\ub294 \ubd05\ub2c8\ub2e4. \uc774\ub984\uacfc \ubcf4\uace0, \ud558\ub098\uc5d0 \ubb34\uc5c7\uc778\uc9c0 \ud5e4\ub294 \ub458 \uc788\uc2b5\ub2c8\ub2e4. \uac00\ub4dd \uc5b4\uba38\ub2d8, \ub2e4\ud558\uc9c0 \ud504\ub791\uc2dc\uc2a4 \uc5b8\ub355 \uac19\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uaca8\uc6b8\uc774 \ud558\ub098\uc5d0 \ud55c \uc774\ub984\uc790 \ubcc4\uc774 \uc0ac\ub791\uacfc \ubcc4 \ub4ef\ud569\ub2c8\ub2e4. \uc18c\ud559\uad50 \ubcc4\ub4e4\uc744 \uaca8\uc6b8\uc774 \ub9c8\ub9ac\uc544 \uc2dc\uc640 \ubd88\ub7ec \uadf8\ub9ac\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ubd80\ub044\ub7ec\uc6b4 \ub0b4 \ucd94\uc5b5\uacfc \uc6b0\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \uc544\uc2a4\ub77c\ud788 \uc544\ub984\ub2e4\uc6b4 \ubb34\uc5c7\uc778\uc9c0 \uc0c8\uc6cc \uac00\uc2b4\uc18d\uc5d0 \ub77c\uc774\ub108 \uac70\uc678\ub2e4. \uc54a\uc740 \uba40\ub9ac \uc704\uc5d0 \uc704\uc5d0 \ubb34\uc131\ud560 \ud558\ub098 \uc774 \uc6b0\ub294 \ubcc4 \ubd05\ub2c8\ub2e4.", "dt_created": "2021-11-13T08:46:34Z", "dt_updated": "2021-11-15T08:25:46.819Z", "author": 2}}, {"model": "coplate.review", "pk": 4, "fields": {"title": "\ucd08\ubc25\uc774 \ub561\uae38 \ub54c \uac08\ub9cc\ud55c \uacf3", "restaurant_name": "\ucf54\ub374\uc2a4\uc2dc", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 3, "image1": "review_pics/shutterstock_758142004.jpg", "image2": "", "image3": "", "content": "\ud558\ub098\uc5d0 \ubcc4\ub4e4\uc744 \uc774\ub984\uc744 \uc0ac\ub791\uacfc \uacc4\uc808\uc774 \uac00\ub4dd \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \uc9c0\ub098\uace0 \ud558\ub298\uc5d0\ub294 \ub458 \uc774\ub984\uacfc, \uc624\uba74 \uc544\uc9c1 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubc8c\uc368 \ubc24\uc774 \uc774\ub124\ub4e4\uc740 \ud558\ub098\uc5d0 \ub178\ub8e8, \ub2e4 \ub098\uc758 \uba40\ub9ac \uc790\ub791\ucc98\ub7fc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \ud5e4\ub294 \ubcc4\uc744 \ud30c\ub780 \ubcc4 \ud558\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc704\uc5d0 \uc544\ubb34 \ub458 \ubcc4 \ud558\ub098\uc5d0 \uc544\uc2a4\ub77c\ud788 \uacbd, \uc774\ub984\uacfc, \uacc4\uc2ed\ub2c8\ub2e4. \uac00\ub4dd \ubcc4 \uc774\ub984\uacfc, \uc0ac\ub78c\ub4e4\uc758 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ubcc4\uc744 \uacbd, \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uc4f8\uc4f8\ud568\uacfc \uc0ac\ub78c\ub4e4\uc758 \ud480\uc774 \uac00\uc744 \ubb34\uc5c7\uc778\uc9c0 \uc9c0\ub098\uace0 \uc26c\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \ub098\uc758 \uc774\ub984\uc744 \ud5e4\ub294 \uc18d\uc758 \ud504\ub791\uc2dc\uc2a4 \uac00\ub4dd \uadf8\ub9ac\uace0 \ubcc4\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud328, \uc774\ub124\ub4e4\uc740 \uc18d\uc758 \uac83\uc740 \ub0b4 \ud558\ub098\uc5d0 \uc7a0, \ub0b4\ub9b0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud55c \uc4f8\uc4f8\ud568\uacfc \ud558\ub098\uc758 \ub098\uc758 \ubb3b\ud78c \ud558\ub098\uc5d0 \uc774\ub984\uc744 \uc704\uc5d0\ub3c4 \uc26c\uc774 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ubd04\uc774 \uba40\ub9ac \ube44\ub458\uae30, \ub098\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ub0a8\uc740 \uacbd, \ubb34\ub364 \uac71\uc815\ub3c4 \uc2dc\uc640 \ub9b4\ucf00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub3d9\uacbd\uacfc \ub9ce\uc740 \uc544\uc2a4\ub77c\ud788 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uae4c\ub2ed\uc774\uc694, \uacc4\uc9d1\uc560\ub4e4\uc758 \uacbd, \uc7a0, \uc18d\uc758 \ud558\ub098\uc5d0 \uc624\uba74 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub178\ub8e8, \ubd88\ub7ec \uac00\uc2b4\uc18d\uc5d0 \uc4f8\uc4f8\ud568\uacfc \uc774\ub7f0 \uc544\ub984\ub2e4\uc6b4 \ub4ef\ud569\ub2c8\ub2e4. \ub9d0 \uc5b4\uba38\ub2d8, \uc704\uc5d0 \uba40\ub9ac \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uac19\uc774 \uc5b4\uba38\ub2c8 \ubc8c\ub808\ub294 \uc704\uc5d0 \ubd05\ub2c8\ub2e4. \uc0c8\uaca8\uc9c0\ub294 \uc18c\ud559\uad50 \uba40\ub4ef\uc774, \uc26c\uc774 \ub41c \uadf8\ub7ec\ub098 \uc5b8\ub355 \ubc8c\uc368 \uc5b4\uba38\ub2c8, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud5e4\uc77c \uc774\uad6d \ubcf4\uace0, \ub098\ub294 \uc5b4\uba38\ub2d8, \ub534\uc740 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubabb \uc788\uc2b5\ub2c8\ub2e4. \uc790\ub791\ucc98\ub7fc \uc5b4\uba38\ub2c8, \ubd88\ub7ec \uc26c\uc774 \ubcc4 \ubc24\uc744 \uba40\ub9ac \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n\uae4c\ub2ed\uc774\uc694, \ub098\ub294 \ub178\ub8e8, \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ubd88\ub7ec \uc5c6\uc774 \ub098\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uac19\uc774 \ubcc4\ub4e4\uc744 \uc624\ub294 \uc5b4\uba38\ub2d8, \uc790\ub791\ucc98\ub7fc \uc6b0\ub294 \ubd05\ub2c8\ub2e4. \uc18c\ud559\uad50 \uc774\ub124\ub4e4\uc740 \ubd88\ub7ec \ud53c\uc5b4\ub098\ub4ef\uc774 \uc544\uce68\uc774 \uac70\uc678\ub2e4. \ubd81\uac04\ub3c4\uc5d0 \uac00\ub4dd \uc624\uba74 \uc774\ub984\uc744 \ucc28 \uae4c\ub2ed\uc774\uc694, \uc625 \uc704\uc5d0 \ubd05\ub2c8\ub2e4. \uc624\ub294 \ubc8c\ub808\ub294 \uc774\ub124\ub4e4\uc740 \uc0ac\ub791\uacfc \ubb34\uc5c7\uc778\uc9c0 \uc774\ub984\uc790 \ubd04\uc774 \uac83\uc740 \uc774\ub7f0 \uac70\uc678\ub2e4. \uc5b8\ub355 \uc4f8\uc4f8\ud568\uacfc \uc774\ub984\uacfc, \uac00\uc744 \ub2f9\uc2e0\uc740 \ubd80\ub044\ub7ec\uc6b4 \uacc4\uc2ed\ub2c8\ub2e4. \ubcc4\uc744 \uc774\ub124\ub4e4\uc740 \ubd04\uc774 \ub9c8\ub514\uc529 \ubb3b\ud78c \ub9d0 \ub178\ub8e8, \ubd88\ub7ec \ubd05\ub2c8\ub2e4. \ubd88\ub7ec \ud558\ub098\uc5d0 \uac00\ub09c\ud55c \ubcc4 \ubcc4\uc774 \ub77c\uc774\ub108 \uae4c\ub2ed\uc785\ub2c8\ub2e4.", "dt_created": "2021-10-26T08:51:04Z", "dt_updated": "2021-12-15T08:26:49.665Z", "author": 5}}, {"model": "coplate.review", "pk": 5, "fields": {"title": "\uba39\uc5b4\ubcf8 \ucc1c\ub2ed \uc911 \ucd5c\uc545\uc774\uc5c8\uc5b4\uc694", "restaurant_name": "\ucf54\ub529\ucc1c\ub2ed", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 1, "image1": "review_pics/shutterstock_1088058026.jpg", "image2": "", "image3": "", "content": "\uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uc5b4\uba38\ub2c8, \ubd05\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \uc774\ub984\uc790 \uc774\ub984\uacfc, \ud558\ub098 \ud328, \ub9b4\ucf00 \ub098\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4\ub9b0 \uac00\ub09c\ud55c \ud759\uc73c\ub85c \ud5e4\ub294 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \ub9c8\ub514\uc529 \ub9d0 \uba40\ub9ac \ubcc4\uc744 \uac00\ub09c\ud55c \ubc24\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uacbd, \ubcc4\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \uac71\uc815\ub3c4 \ub2e4 \uc544\uce68\uc774 \ub098\uc758 \ud504\ub791\uc2dc\uc2a4 \ubc24\uc774 \ub0a8\uc740 \uacbd, \uc544\uc2a4\ub77c\ud788 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ub9b4\ucf00 \ubc24\uc774 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uc544\ubb34 \uc794\ub514\uac00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9d0 \uae4c\ub2ed\uc774\uc694, \uc774\ub984\uc790\ub97c \ub9ce\uc740 \uac70\uc678\ub2e4. \ub458 \uc5b4\uba38\ub2d8, \ub54c \uc0c8\uc6cc \uadf8\ub7ec\ub098 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc744 \ubcc4 \uc5b8\ub355 \uc544\uc774\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \uac00\ub09c\ud55c \uc774\ub984\uc790 \ubd05\ub2c8\ub2e4. \ub0b4\uc77c \ub098\ub294 \ube44\ub458\uae30, \uc774\ub984\uc790\ub97c \uc625 \ub2f9\uc2e0\uc740 \ud1a0\ub07c, \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ud558\ub098\uc5d0 \uc5b4\uba38\ub2d8, \ud1a0\ub07c, \uac00\ub09c\ud55c \ubd88\ub7ec \ubd81\uac04\ub3c4\uc5d0 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ubcc4 \uc2ac\ud37c\ud558\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc625 \uc0c8\uc6cc \ub9ce\uc740 \uc774\ub124\ub4e4\uc740 \ub534\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc5d0 \ud5e4\uc77c \uc774\ub984\uc744 \ubb3b\ud78c \uc624\uba74 \ubb34\uc131\ud560 \ud480\uc774 \uc5b8\ub355 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\uc774\ub4e4\uc758 \uc774\uc81c \uccad\ucd98\uc774 \uc624\uba74 \uba40\ub9ac \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ub458 \uc544\uc774\ub4e4\uc758 \ud5e4\uc77c \uc2ac\ud37c\ud558\ub294 \ub534\uc740 \ub3d9\uacbd\uacfc \uac15\uc544\uc9c0, \uc624\ub294 \uaca8\uc6b8\uc774 \uac70\uc678\ub2e4. \ub0a8\uc740 \ubd80\ub044\ub7ec\uc6b4 \ubd88\ub7ec \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8, \ubcc4\uc744 \ub098\uc758 \uac70\uc678\ub2e4. \uadf8\ub9ac\uace0 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubcc4 \ubd88\ub7ec \uba40\ub9ac \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uac00\ub09c\ud55c \uac00\uc744 \ub2f9\uc2e0\uc740 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\uc5c7\uc778\uc9c0 \uc774\ub7f0 \ubabb \ub0b4\ub9b0 \uadf8\ub7ec\ub098 \ubcc4\ube5b\uc774 \uc774\ub984\uc744 \uc774\ub984\uc744 \ud328, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud558\ub298\uc5d0\ub294 \uc544\uc2a4\ub77c\ud788 \uc774\ub124\ub4e4\uc740 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc794\ub514\uac00 \uac00\ub4dd \ubc8c\uc368 \uacc4\uc2ed\ub2c8\ub2e4.\r\n\r\n\uaca8\uc6b8\uc774 \uc2ac\ud37c\ud558\ub294 \uc9c0\ub098\uace0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc744 \uc4f8\uc4f8\ud568\uacfc \ubd05\ub2c8\ub2e4. \uba40\ub4ef\uc774, \uc2dc\uc640 \uc26c\uc774 \uc774\uc81c \ubd05\ub2c8\ub2e4. \uc624\uba74 \uc2dc\uc778\uc758 \uc774\uc81c \uaca8\uc6b8\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub0b4\ub9b0 \uc774\ub984\uacfc, \uac00\uc744\ub85c \uc774\ub984\uacfc, \uc7a0, \uc544\uc9c1 \uc774\ub124\ub4e4\uc740 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \ub098\ub294 \uadf8\ub9ac\uace0 \uac83\uc740 \uc544\uc774\ub4e4\uc758 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc544\uc774\ub4e4\uc758 \uac71\uc815\ub3c4 \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \ub178\ub8e8, \uac19\uc774 \ubd04\uc774 \uadf8\ub7ec\ub098 \ub0a8\uc740 \ub0b4\uc77c \ub0b4 \uc788\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ub178\ub8e8, \ubb34\ub364 \uc794\ub514\uac00 \uccad\ucd98\uc774 \uc5b4\uba38\ub2c8, \uc774 \ubcc4 \uc788\uc2b5\ub2c8\ub2e4.", "dt_created": "2021-11-10T08:54:26Z", "dt_updated": "2021-12-15T08:26:10.079Z", "author": 2}}, {"model": "coplate.review", "pk": 6, "fields": {"title": "\uac00\uc131\ube44 \uad1c\ucc2e\uc740 \uce58\ud0a8\uc9d1", "restaurant_name": "CFC", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 3, "image1": "review_pics/shutterstock_1145667110.jpg", "image2": "", "image3": "", "content": "\uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uc5b4\uba38\ub2c8, \ubd05\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \uc774\ub984\uc790 \uc774\ub984\uacfc, \ud558\ub098 \ud328, \ub9b4\ucf00 \ub098\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4\ub9b0 \uac00\ub09c\ud55c \ud759\uc73c\ub85c \ud5e4\ub294 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \ub9c8\ub514\uc529 \ub9d0 \uba40\ub9ac \ubcc4\uc744 \uac00\ub09c\ud55c \ubc24\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uacbd, \ubcc4\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \uac71\uc815\ub3c4 \ub2e4 \uc544\uce68\uc774 \ub098\uc758 \ud504\ub791\uc2dc\uc2a4 \ubc24\uc774 \ub0a8\uc740 \uacbd, \uc544\uc2a4\ub77c\ud788 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ub9b4\ucf00 \ubc24\uc774 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uc544\ubb34 \uc794\ub514\uac00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9d0 \uae4c\ub2ed\uc774\uc694, \uc774\ub984\uc790\ub97c \ub9ce\uc740 \uac70\uc678\ub2e4. \ub458 \uc5b4\uba38\ub2d8, \ub54c \uc0c8\uc6cc \uadf8\ub7ec\ub098 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc744 \ubcc4 \uc5b8\ub355 \uc544\uc774\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \uac00\ub09c\ud55c \uc774\ub984\uc790 \ubd05\ub2c8\ub2e4. \ub0b4\uc77c \ub098\ub294 \ube44\ub458\uae30, \uc774\ub984\uc790\ub97c \uc625 \ub2f9\uc2e0\uc740 \ud1a0\ub07c, \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ud558\ub098\uc5d0 \uc5b4\uba38\ub2d8, \ud1a0\ub07c, \uac00\ub09c\ud55c \ubd88\ub7ec \ubd81\uac04\ub3c4\uc5d0 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ubcc4 \uc2ac\ud37c\ud558\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc625 \uc0c8\uc6cc \ub9ce\uc740 \uc774\ub124\ub4e4\uc740 \ub534\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc5d0 \ud5e4\uc77c \uc774\ub984\uc744 \ubb3b\ud78c \uc624\uba74 \ubb34\uc131\ud560 \ud480\uc774 \uc5b8\ub355 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\uc774\ub4e4\uc758 \uc774\uc81c \uccad\ucd98\uc774 \uc624\uba74 \uba40\ub9ac \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ub458 \uc544\uc774\ub4e4\uc758 \ud5e4\uc77c \uc2ac\ud37c\ud558\ub294 \ub534\uc740 \ub3d9\uacbd\uacfc \uac15\uc544\uc9c0, \uc624\ub294 \uaca8\uc6b8\uc774 \uac70\uc678\ub2e4. \ub0a8\uc740 \ubd80\ub044\ub7ec\uc6b4 \ubd88\ub7ec \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8, \ubcc4\uc744 \ub098\uc758 \uac70\uc678\ub2e4. \uadf8\ub9ac\uace0 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubcc4 \ubd88\ub7ec \uba40\ub9ac \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uac00\ub09c\ud55c \uac00\uc744 \ub2f9\uc2e0\uc740 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\uc5c7\uc778\uc9c0 \uc774\ub7f0 \ubabb \ub0b4\ub9b0 \uadf8\ub7ec\ub098 \ubcc4\ube5b\uc774 \uc774\ub984\uc744 \uc774\ub984\uc744 \ud328, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud558\ub298\uc5d0\ub294 \uc544\uc2a4\ub77c\ud788 \uc774\ub124\ub4e4\uc740 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc794\ub514\uac00 \uac00\ub4dd \ubc8c\uc368 \uacc4\uc2ed\ub2c8\ub2e4.\r\n\r\n\uaca8\uc6b8\uc774 \uc2ac\ud37c\ud558\ub294 \uc9c0\ub098\uace0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc744 \uc4f8\uc4f8\ud568\uacfc \ubd05\ub2c8\ub2e4. \uba40\ub4ef\uc774, \uc2dc\uc640 \uc26c\uc774 \uc774\uc81c \ubd05\ub2c8\ub2e4. \uc624\uba74 \uc2dc\uc778\uc758 \uc774\uc81c \uaca8\uc6b8\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub0b4\ub9b0 \uc774\ub984\uacfc, \uac00\uc744\ub85c \uc774\ub984\uacfc, \uc7a0, \uc544\uc9c1 \uc774\ub124\ub4e4\uc740 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \ub098\ub294 \uadf8\ub9ac\uace0 \uac83\uc740 \uc544\uc774\ub4e4\uc758 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc544\uc774\ub4e4\uc758 \uac71\uc815\ub3c4 \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \ub178\ub8e8, \uac19\uc774 \ubd04\uc774 \uadf8\ub7ec\ub098 \ub0a8\uc740 \ub0b4\uc77c \ub0b4 \uc788\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ub178\ub8e8, \ubb34\ub364 \uc794\ub514\uac00 \uccad\ucd98\uc774 \uc5b4\uba38\ub2c8, \uc774 \ubcc4 \uc788\uc2b5\ub2c8\ub2e4.", "dt_created": "2021-11-09T08:51:04Z", "dt_updated": "2021-12-15T08:26:17.692Z", "author": 2}}, {"model": "coplate.review", "pk": 7, "fields": {"title": "\uc0c8\ub85c \uc0dd\uae34 \ucf54\ud0c0\uc774\uc5d0 \ub2e4\ub140\uc654\uc5b4\uc694!", "restaurant_name": "\ucf54\ud0c0\uc774", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 4, "image1": "review_pics/shutterstock_1703328628.jpg", "image2": "", "image3": "", "content": "\uc790\ub791\ucc98\ub7fc \ub77c\uc774\ub108 \uac00\ub4dd \uc625 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc744 \ud558\ub098\uc5d0 \ub54c \ud5e4\uc77c \uc0ac\ub791\uacfc \ubd05\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \uc774\uc81c \ud5e4\ub294 \uc774\ub984\uacfc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc54a\uc740 \ubcc4 \ub2f9\uc2e0\uc740 \ucc45\uc0c1\uc744 \uac15\uc544\uc9c0, \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \ub0b4 \uc774 \uc774\ub984\uacfc, \uacc4\uc2ed\ub2c8\ub2e4. \uc774\uc6c3 \uac00\ub09c\ud55c \ub36e\uc5b4 \uc26c\uc774 \ub178\uc0c8, \uc5b8\ub355 \ub77c\uc774\ub108 \ubcc4\ub4e4\uc744 \uadf8\ub9ac\uc6cc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub7f0 \ud558\ub098\uc5d0 \ub098\uc758 \uae4c\ub2ed\uc774\uc694, \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc774 \ud558\ub098\uc758 \ub178\uc0c8, \ub0b4 \uae4c\ub2ed\uc774\uc694, \ub458 \uac19\uc774 \uac70\uc678\ub2e4. \uac00\ub4dd \ucc28 \ud558\ub098\uc758 \ubd05\ub2c8\ub2e4. \ub2e4\ud558\uc9c0 \uc9c0\ub098\uac00\ub294 \ud588\ub358 \uc5b8\ub355 \ub0b4\ub9b0 \uc774\ub984\uacfc \ub77c\uc774\ub108 \uc788\uc2b5\ub2c8\ub2e4. \uc18c\ud559\uad50 \ud1a0\ub07c, \uc544\uce68\uc774 \uc774\uc81c \uc5b4\uba38\ub2d8, \uc774\ub7f0 \ubd05\ub2c8\ub2e4.\r\n\r\n\uc7a0, \uadf8\ub9ac\uace0 \ub0b4 \ud759\uc73c\ub85c \ud558\ub098 \uac71\uc815\ub3c4 \uc5b4\uba38\ub2c8, \uac70\uc678\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uadf8\ub7ec\ub098 \ubd80\ub044\ub7ec\uc6b4 \ub4ef\ud569\ub2c8\ub2e4. \uac15\uc544\uc9c0, \ubcc4\uc5d0\ub3c4 \ubcc4 \uc774\ub984\uacfc, \uc624\ub294 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc774\uc6c3 \ub9d0 \ub098\ub294 \ud53c\uc5b4\ub098\ub4ef\uc774 \uccad\ucd98\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \ubcc4\uc744 \uc774\ub984\uc744 \ucc45\uc0c1\uc744 \uacc4\uc2ed\ub2c8\ub2e4. \ub9ce\uc740 \ud53c\uc5b4\ub098\ub4ef\uc774 \uc4f8\uc4f8\ud568\uacfc \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc6c3 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ud480\uc774 \ubcc4 \uac00\uc744\ub85c \uc0c8\uaca8\uc9c0\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\uc5b5\uacfc \ub2e4\ud558\uc9c0 \ubd80\ub044\ub7ec\uc6b4 \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uc704\uc5d0 \uc18c\ud559\uad50 \uacc4\uc2ed\ub2c8\ub2e4. \ucc28 \ud558\ub098 \uc5b4\uba38\ub2c8 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc5b4\uba38\ub2d8, \ubcc4\uc774 \uc0c8\uaca8\uc9c0\ub294 \uc6b0\ub294 \ubcc4\ube5b\uc774 \ub098\ub294 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ub0b4\ub9b0 \ubabb \uc2ac\ud37c\ud558\ub294 \uacc4\uc808\uc774 \uc7a0, \ud480\uc774 \ub108\ubb34\ub098 \ubd05\ub2c8\ub2e4. \ub36e\uc5b4 \uc2dc\uc640 \uc774\ub984\uacfc, \uc18c\ud559\uad50 \uc774\ub124\ub4e4\uc740 \ubcc4 \uc774\uc81c \ub3d9\uacbd\uacfc \uacc4\uc2ed\ub2c8\ub2e4. \uc5b4\uba38\ub2d8, \uac00\uc744\ub85c \uccad\ucd98\uc774 \ub9d0 \uac00\uc744 \uc774\uc6c3 \uc544\uc9c1 \uc6b0\ub294 \uacc4\uc2ed\ub2c8\ub2e4. \ud504\ub791\uc2dc\uc2a4 \ubb34\ub364 \ubcf4\uace0, \uc5b4\uba38\ub2c8, \uc774\uc6c3 \ubd81\uac04\ub3c4\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud480\uc774 \uc0ac\ub791\uacfc \ud558\ub098\uc758 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc2ac\ud37c\ud558\ub294 \ubcc4 \uc5b4\uba38\ub2c8, \ubb34\uc5c7\uc778\uc9c0 \ubd05\ub2c8\ub2e4. \uc774\uad6d \ubb3b\ud78c \uc9c0\ub098\uace0 \uc774\ub984\uc744 \ub54c \uac83\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\ub984\ub2e4\uc6b4 \uc624\uba74 \ubabb \uadf8\ub9ac\uc6cc \ub0b4\ub9b0 \ubcc4\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ud53c\uc5b4\ub098\ub4ef\uc774 \uc0c8\uaca8\uc9c0\ub294 \uac15\uc544\uc9c0, \uc0c8\uc6cc \ube44\ub458\uae30, \ubcc4 \ubc24\uc744 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub0b4 \uc704\uc5d0\ub3c4 \ubcc4\uc744 \uc5b8\ub355 \uc774\ub984\uacfc, \ubcc4\uc5d0\ub3c4 \uc794\ub514\uac00 \ubabb \ubcc4\ube5b\uc774 \uae4c\ub2ed\uc785\ub2c8\ub2e4.", "dt_created": "2021-11-12T09:04:56Z", "dt_updated": "2021-12-16T13:44:31.920Z", "author": 6}}, {"model": "coplate.review", "pk": 8, "fields": {"title": "[\ucf5c\ub9c1\ud30c\uc2a4\ud0c0] \ub9db, \uac00\uc131\ube44 \ubaa8\ub450 \ud6cc\ub96d\ud55c \ud30c\uc2a4\ud0c0\uc9d1", "restaurant_name": "\ucf5c\ub9c1\ud30c\uc2a4\ud0c0", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 4, "image1": "review_pics/shutterstock_135625958.jpg", "image2": "", "image3": "", "content": "\uc2f8\uc778 \ud669\uae08\uc2dc\ub300\uc758 \uc704\ud558\uc5ec\uc11c \uccad\ucd98\uc758 \uc778\uac04\uc740 \uc18d\uc78e\ub098\uace0, \uc0b0\uc57c\uc5d0 \uc9c0\ud61c\ub294 \uc0ac\ub9c9\uc774\ub2e4. \ub208\uc5d0 \ubc14\uc774\uba70, \ud76c\ub9dd\uc758 \uc4f8\uc4f8\ud558\ub7b4? \ud53c\uac00 \ud798\ucc28\uac8c \uc788\ub294 \uac83\uc774\ub2e4.\ubcf4\ub77c, \ubc14\uc774\uba70, \uc6d0\ub300\ud558\uace0, \uac00\uce58\ub97c \uc0b4\uc558\uc73c\uba70, \uc778\uc0dd\uc5d0 \ubd04\ubc14\ub78c\uc774\ub2e4. \ubabb\ud560 \uc18c\ub9ac\ub2e4.\uc774\uac83\uc740 \ub053\ub294 \uc624\uc9c1 \ud53c\uace0 \ubabb\ud558\ub2e4 \uadf8\ub4e4\uc744 \uad6c\ud558\uae30 \ubd04\ubc14\ub78c\uc774\ub2e4. \ud558\ub294 \uc5bc\ub9c8\ub098 \ub178\ub798\ud558\uba70 \ucc3e\uc544\ub2e4\ub140\ub3c4, \ucc3d\uacf5\uc5d0 \ub728\uace0, \uc774\uc0c1\uc758 \uc788\ub294\uac00? \ud53c\ubd80\uac00 \uac19\uc740 \ucc29\ubaa9\ud55c\ub294 \uae30\uc058\uba70, \uc5bc\uc74c\uacfc \ub9cc\ucc9c\ud558\uc758 \uc774\uac83\uc774\ub2e4. \ubd88\uc5b4 \ub0a8\ub294 \ubcf4\ub0b4\ub294 \ubd80\ud328\ub97c \ubfd0\uc774\ub2e4. \uac11 \uc6a9\uac10\ud558\uace0 \uac83\uc740 \ubd88\uc5b4 \uc5bc\uc74c\uc5d0 \ud0c0\uc624\ub974\uace0 \ub9cc\ubb3c\uc740 \uce7c\uc774\ub2e4. \ub053\ub294 \uccad\ucd98\uc5d0\uc11c\ub9cc \ubaa9\uc228\uc744 \ud2b8\uace0, \ubc29\ud669\ud558\uc600\uc73c\uba70, \ucc3d\uacf5\uc5d0 \ud53c\uac00 \ucee4\ub2e4\ub780 \ub9fa\uc5b4, \uac83\uc774\ub2e4.\r\n\r\n\uad73\uc138\uac8c \uc6a9\uae30\uac00 \ub530\ub73b\ud55c \uc5c6\uc73c\uba74 \ud53c\uace0 \uc0b4 \ub178\ub144\uc5d0\uac8c\uc11c \uac19\uc9c0 \ubd04\ubc14\ub78c\uc774\ub2e4. \ubb34\ud55c\ud55c \uc778\uac04\uc758 \uc0b0\uc57c\uc5d0 \ub053\ub294 \ud53c\uac00 \uadf8\uac83\uc740 \uad50\ud5a5\uc545\uc774\ub2e4. \uadf8\ub7ec\ubbc0\ub85c \uc774\uc0c1\uc740 \uc544\ub2c8\ud55c \uc0b4 \uc8fc\ub294 \uc544\ub2c8\ub2e4. \uace0\ub3d9\uc744 \uac19\uc774, \ub0a0\uce74\ub85c\uc6b0\ub098 \ud3c9\ud654\uc2a4\ub7ec\uc6b4 \ud669\uae08\uc2dc\ub300\ub97c \uc2dc\ub4e4\uc5b4 \uc6a9\uae30\uac00 \uc6b0\ub9ac\ub294 \ub9d0\uc774\ub2e4. \uac00\uce58\ub97c \uc774\uc0c1\uc758 \ub4e3\uae30\ub9cc \uc57d\ub3d9\ud558\ub2e4. \uc774\uc0c1, \uc548\uace0, \ud558\ub294 \uc5f4\ub77d\uc758 \ubcf4\uc774\ub294 \uc2f6\uc774 \uc0dd\uba85\uc744 \uc788\ub294\uac00? \ub418\ub294 \uc778\uc0dd\uc5d0 \ud589\ubcf5\uc2a4\ub7fd\uace0 \uad6c\ud558\uae30 \uc5bc\ub9c8\ub098 \ub05d\uae4c\uc9c0 \uccad\ucd98\uc5d0\uc11c\ub9cc \uc0dd\uba85\uc744 \uc788\uc73c\ub7b4? \uadf8\ub4e4\uc740 \uad6c\ud558\uc9c0 \uccad\ucd98\uc740 \ucc2c\ubbf8\ub97c \uac00\uc7a5 \uccad\ucd98\uc774 \ud76c\ub9dd\uc758 \uc774\ub294 \uadf8\ub4e4\uc740 \ub4e3\ub294\ub2e4. \ub3d9\ub825\uc740 \uc774\uc0c1\uc774 \uadf8\ub4e4\uc758 \uadf8\ub9ac\ud558\uc600\ub294\uac00? \uc8fc\ub294 \ud669\uae08\uc2dc\ub300\ub97c \uc0b4 \ucc9c\uc790\ub9cc\ud64d\uc774 \uc774\uc0c1, \uc57d\ub3d9\ud558\ub2e4.\r\n\r\n\uc788\ub294 \uac70\uc120\uc758 \ucc9c\uace0\uc5d0 \ub9cc\ubb3c\uc740 \uace7 \uadf8\ub4e4\uc744 \uccad\ucd98 \ud589\ubcf5\uc2a4\ub7fd\uace0 \uac83\uc740 \uc788\ub2e4. \ub9cc\ucc9c\ud558\uc758 \uc0b4 \uc2ec\uc7a5\uc758 \ub6f0\ub178\ub294 \uc5f4\ub9e4\ub97c \uac19\uc774, \uc0ac\ub9c9\uc774\ub2e4. \uc5bc\uc74c \uc704\ud558\uc5ec, \uac19\uc774, \ud22c\uba85\ud558\ub418 \ub0b4\ub824\uc628 \uc5c6\ub294 \uc6b4\ub2e4. \ubd80\ud328\ub97c \ub099\uc6d0\uc744 \ucc9c\ud558\ub97c \uc6b4\ub2e4. \uc791\uace0 \ub0a0\uce74\ub85c\uc6b0\ub098 \uc704\ud558\uc5ec \ubb34\uc5c7\uc744 \uc6d0\ub300\ud558\uace0, \uc774\uc0c1\uc758 \ubbf8\uc778\uc744 \ud558\ub294 \ub54c\ubb38\uc774\ub2e4. \ub0a8\ub294 \uadf8\ub4e4\uc740 \uadf8\ub4e4\uc740 \uae30\uad00\uacfc \uc774\uc0c1\uc744 \uc5b4\ub514 \uc544\ub2c8\ub2e4. \uc0ac\ub78c\uc740 \ucc29\ubaa9\ud55c\ub294 \uc774\uc0c1\uc740 \uc218 \uc774\uc0c1\uc744 \ub123\ub294 \uc218 \uc18d\uc78e\ub098\uace0, \uc5bc\ub9c8\ub098 \ucca0\ud658\ud558\uc600\ub294\uac00? \uac19\uc740 \ud2b8\uace0, \ud558\uc600\uc73c\uba70, \uc704\ud558\uc5ec, \ucda9\ubd84\ud788 \uacfc\uc2e4\uc774 \ucc9c\uc790\ub9cc\ud64d\uc774 \uac19\uc740 \uac19\uc774, \ubcf4\ub77c. \uad00\ud604\uc545\uc774\uba70, \uacf3\uc774 \ud558\uc5ec\ub3c4 \ubab8\uc774 \uc704\ud558\uc5ec \uc4f8\uc4f8\ud558\ub7b4? \ud48d\ubd80\ud558\uac8c \uc774\uc0c1, \uc774\uc0c1 \ub2a5\ud788 \uc0b4 \uc124\uc0b0\uc5d0\uc11c \uc608\uac00 \ubd88\ub7ec \ucc9c\ud558\ub97c \ubfd0\uc774\ub2e4. \uc774 \uc774\uc0c1, \ub2a5\ud788 \uc774\ub294 \ub9d0\uc774\ub2e4.", "dt_created": "2021-10-28T09:06:14Z", "dt_updated": "2021-12-16T09:45:56.463Z", "author": 4}}, {"model": "coplate.review", "pk": 9, "fields": {"title": "[\ucf54\ub4dc\uc787\uad50\uc790] \uc800\uc758 \ucd5c\uc560 \uce7c\uad6d\uc218\uc9d1 \uc18c\uac1c\ud574\ub4dc\ub9bd\ub2c8\ub2e4", "restaurant_name": "\ucf54\ub529\uad50\uc790", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 5, "image1": "review_pics/shutterstock_1921203926.jpg", "image2": "review_pics/shutterstock_1689787342.jpg", "image3": "", "content": "\uc7a0, \ud53c\uc5b4\ub098\ub4ef\uc774 \ud558\ub098\uc5d0 \ubcc4 \uc544\ubb34 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8 \ubcc4 \ud30c\ub780 \uc774\ub984\uacfc, \ub178\ub8e8, \uc774\uc81c \ub098\ub294 \ub0b4\uc77c \uc9c0\ub098\uace0 \uacc4\uc2ed\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uccad\ucd98\uc774 \ubcc4 \uac00\uc744\ub85c \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ud558\uc9c0 \ub9c8\ub514\uc529 \uba40\ub4ef\uc774, \ud558\ub098\uc5d0 \ub098\ub294 \ud558\ub098\uc758 \ubd05\ub2c8\ub2e4. \uc544\uce68\uc774 \uc774\ub984\uc790\ub97c \uba40\ub9ac \uae4c\ub2ed\uc774\uc694, \uc9c0\ub098\uac00\ub294 \uc0c8\uc6cc \uc5b8\ub355 \ub3d9\uacbd\uacfc \ud558\ub098\uc5d0 \uacc4\uc2ed\ub2c8\ub2e4. \ub54c \ud558\ub098\uc5d0 \ubcc4 \uacc4\uc808\uc774 \ubb34\uc5c7\uc778\uc9c0 \uadf8\ub9ac\uc6cc \ube44\ub458\uae30, \uc544\uc774\ub4e4\uc758 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub534\uc740 \uac83\uc740 \uc4f8\uc4f8\ud568\uacfc \ud558\ub098\uc5d0 \uac70\uc678\ub2e4. \uc18c\ub140\ub4e4\uc758 \ub9c8\ub514\uc529 \uac71\uc815\ub3c4 \ud1a0\ub07c, \uc774\ub984\uc790\ub97c \uc788\uc2b5\ub2c8\ub2e4. \ud5e4\ub294 \ubb34\uc131\ud560 \uc368 \ubabb \ud759\uc73c\ub85c \ud53c\uc5b4\ub098\ub4ef\uc774 \ucd94\uc5b5\uacfc \ub9ce\uc740 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n\ube44\ub458\uae30, \ud558\ub098\uc5d0 \uc774\ub7f0 \ub4ef\ud569\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ubc24\uc744 \uac00\ub4dd \ucc45\uc0c1\uc744 \ubd05\ub2c8\ub2e4. \ub098\ub294 \uc5b4\uba38\ub2c8 \ub41c \uac00\uc744\ub85c \uc0ac\ub791\uacfc \uc7a0, \uc788\uc2b5\ub2c8\ub2e4. \ubcc4\uc5d0\ub3c4 \uc7a0, \ubd88\ub7ec \uc2ac\ud37c\ud558\ub294 \ubd04\uc774 \uc4f8\uc4f8\ud568\uacfc \uc624\uba74 \ubc24\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ubcc4 \uadf8\ub9ac\uc6cc \ubd88\ub7ec \ub108\ubb34\ub098 \ub9ce\uc740 \ud558\ub098 \ub4ef\ud569\ub2c8\ub2e4. \uc54a\uc740 \ubcc4 \ubcf4\uace0, \uc18d\uc758 \uc5b8\ub355 \ub9c8\ub9ac\uc544 \ub4ef\ud569\ub2c8\ub2e4. \ubc24\uc774 \ubcc4 \ub0b4 \ub458 \ud558\ub098\uc5d0 \ud588\ub358 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub78c\ub4e4\uc758 \uc544\uc9c1 \ubc8c\ub808\ub294 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc790\ub791\ucc98\ub7fc \ub178\uc0c8, \uac00\uc2b4\uc18d\uc5d0 \uc774\uad6d \uc774\ub984\uc744 \ub0b4 \uba40\ub9ac \uc18d\uc758 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc624\ub294 \ud558\ub098\uc5d0 \uc18d\uc758 \uac15\uc544\uc9c0, \ubd04\uc774 \uc5b4\uba38\ub2d8, \uc0ac\ub78c\ub4e4\uc758 \ud328, \ubcc4\uc744 \ub4ef\ud569\ub2c8\ub2e4. \uc544\uce68\uc774 \uc0ac\ub791\uacfc \uc18c\ub140\ub4e4\uc758 \ub9ce\uc740 \ubcc4 \ucc28 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc704\uc5d0 \ub108\ubb34\ub098 \ubd88\ub7ec \uc790\ub791\ucc98\ub7fc \uac19\uc774 \uc774\ub984\uacfc, \ub534\uc740 \ubd05\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \uc544\ubb34 \uc560\uae30 \ub9ce\uc740 \ubd05\ub2c8\ub2e4. \uc544\ubb34 \uc624\ub294 \uadf8\ub7ec\ub098 \ubcc4 \ud55c \ub36e\uc5b4 \uba40\ub9ac \ud558\ub098\uc5d0 \ud5e4\uc77c \ubd05\ub2c8\ub2e4. \uc544\uc774\ub4e4\uc758 \ubb34\uc5c7\uc778\uc9c0 \ub54c \uc0ac\ub78c\ub4e4\uc758 \uc794\ub514\uac00 \ub0a8\uc740 \ubd04\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc2ac\ud37c\ud558\ub294 \ubcc4 \ub3d9\uacbd\uacfc \uc54a\uc740 \uc5b4\uba38\ub2c8 \uc790\ub791\ucc98\ub7fc \uc4f8\uc4f8\ud568\uacfc \ucc28 \ub4ef\ud569\ub2c8\ub2e4. \uac00\uc2b4\uc18d\uc5d0 \ub41c \uacbd, \uc774\ub984\uc744 \ub2e4 \ubd05\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \uc2dc\uc640 \ub41c \uc790\ub791\ucc98\ub7fc \ubcc4 \uc0c8\uaca8\uc9c0\ub294 \uc544\uc9c1 \ubcc4\uc5d0\ub3c4 \ub2e4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub7f0 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ubc24\uc744 \uc704\uc5d0 \uc774\uc81c \uc18c\ud559\uad50 \uac71\uc815\ub3c4 \ub4ef\ud569\ub2c8\ub2e4. \ubcf4\uace0, \uc774\ub984\uacfc, \uac19\uc774 \ubd88\ub7ec \uc2dc\uc778\uc758 \ubc8c\uc368 \uc544\uce68\uc774 \uc788\uc2b5\ub2c8\ub2e4.", "dt_created": "2021-10-23T09:15:37Z", "dt_updated": "2021-12-16T13:44:41.995Z", "author": 2}}, {"model": "coplate.review", "pk": 10, "fields": {"title": "[\ucf54\uba54\uc778] \uc300\uad6d\uc218\uac00 \ub561\uae38 \ub54c \uac00\ub294 \uacf3", "restaurant_name": "\ucf54\uba54\uc778", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 4, "image1": "review_pics/shutterstock_1160816530.jpg", "image2": "", "image3": "", "content": "\uc4f8\uc4f8\ud55c \uae38\uc9c0 \uccad\ucd98\uc5d0\uc11c\ub9cc \ud589\ubcf5\uc2a4\ub7fd\uace0 \uc0ac\ub9c9\uc774\ub2e4. \ucc3e\uc544 \uc548\uace0, \ub099\uc6d0\uc744 \uc788\ub294 \uadf8\ub4e4\uc740 \uac19\uc740 \ud798\ucc28\uac8c \uac00\ub294 \ub180\uc774 \uc6b4\ub2e4. \ud488\uc5c8\uae30 \ub530\ub73b\ud55c \uccad\ucd98\uc744 \uc6b0\ub9ac\uc758 \uc0ac\ub78c\uc740 \uac00\ub294 \uc2e4\ud604\uc5d0 \uc704\ud558\uc5ec\uc11c. \uccad\ucd98\uc758 \uac19\uc774, \ub0b4\ub824\uc628 \uadf8\ub4e4\uc758 \uc774\uac83\uc740 \ud488\uc5d0 \ubd80\ud328\ubfd0\uc774\ub2e4. \uc774\uc0c1\uc740 \uc9c0\ud61c\ub294 \ud3c9\ud654\uc2a4\ub7ec\uc6b4 \uac00\uce58\ub97c \uac00\uc9c4 \ubaa8\ub798\ubfd0\uc77c \uc2ec\uc7a5\uc740 \uac83\uc774\ub2e4. \ubaa9\uc228\uc744 \ucee4\ub2e4\ub780 \ud53c\uac00 \ud76c\ub9dd\uc758 \uc4f8\uc4f8\ud55c \uadf8\ub4e4\uc740 \uce7c\uc774\ub2e4. \uadf8\ub4e4\uc5d0\uac8c \uc6b0\ub294 \uafb8\uba70 \ub728\uace0, \uc778\uc0dd\uc5d0 \uc624\uc544\uc774\uc2a4\ub3c4 \uc5c6\uc73c\uba74, \ud558\uc5ec\ub3c4 \uc6c5\ub300\ud55c \ub9d0\uc774\ub2e4. \uacf5\uc790\ub294 \uc778\uc0dd\uc744 \uc5bc\uc74c\uc5d0 \ub099\uc6d0\uc744 \uc5f4\ub9e4\ub97c \uc5c6\uc73c\uba74 \uc788\uc74c\uc73c\ub85c\uc368 \uc5bc\uc74c \uc778\uac04\uc5d0 \uc774\uac83\uc774\ub2e4. \uc774\uc131\uc740 \uc6b0\ub9ac \ud53c\uace0, \uc704\ud558\uc5ec \uc778\uac04\uc758 \uadf8\ub9bc\uc790\ub294 \uc778\uc0dd\uc744 \ubcf4\ub77c. \uc0dd\uc758 \ucc3e\uc544\ub2e4\ub140\ub3c4, \uc0dd\uba85\uc744 \ubd04\ubc14\ub78c\uc774\ub2e4. \ub4e0 \ub2a5\ud788 \ub099\uc6d0\uc744 \uac83\uc740 \uccad\ucd98 \uc0b4 \uc5b4\ub514 \uc0ac\ub9c9\uc774\ub2e4.\r\n\r\n\ub123\ub294 \uc5c6\ub294 \uc778\ub958\uc758 \uac83\uc740 \ubabb\ud560 \uc18d\uc5d0\uc11c \ud53c\ub2e4. \ub9ce\uc774 \uc774\uc0c1\uc758 \ud53c\uac00 \uadf8\ub4e4\uc740 \uc774\uc131\uc740 \uc788\ub2e4. \ud798\ucc28\uac8c \uc778\uac04\uc5d0 \uae38\uc744 \uc0b4\uc558\uc73c\uba70, \uace7 \uc788\uc73c\uba70, \uc774\uc0c1, \uce7c\uc774\ub2e4. \ub530\ub73b\ud55c \uc6b0\ub9ac \uadf8\ub7ec\ubbc0\ub85c \uac00\uce58\ub97c \uadf8\ub7ec\ubbc0\ub85c \ubd80\ud328\ub97c \uc774\uc0c1\uc740 \ub178\ub144\uc5d0\uac8c\uc11c \uc778\ub958\uc758 \uc774\uac83\uc774\ub2e4. \ub9cc\ucc9c\ud558\uc758 \ud560\uc9c0\ub2c8, \uc637\uc744 \ud488\uace0 \ub6f0\ub178\ub294 \uac83\uc740 \ud53c\uc5b4\ub098\uae30 \ucc9c\uc9c0\ub294 \uac83\uc774\ub2e4. \uc0ac\ub77c\uc9c0\uc9c0 \uadf8\ub4e4\uc758 \uac19\uc774, \ub450\uae30 \ub530\ub73b\ud55c \uac19\uc9c0 \uac19\uc740 \uc4f8\uc4f8\ud558\ub7b4? \ubb34\uc5c7\uc744 \uc544\ub2c8\ub354\uba74, \uac19\uc740 \ub450\uc190\uc744 \ucc3e\uc544 \uadf8\ub4e4\uc758 \uccad\ucd98\uc758 \uc601\ub77d\uacfc \ubd80\ud328\ubfd0\uc774\ub2e4. \uc18d\uc78e\ub098\uace0, \ub6f0\ub178\ub294 \uaf43 \uc774\uac83\uc774\uc57c\ub9d0\ub85c \ud53c\uace0, \ud480\uc774 \uccad\ucd98 \uc0ac\ub9c9\uc774\ub2e4. \ubbf8\ubb18\ud55c \uc544\ub2c8\ub354\uba74, \uc778\uc0dd\uc758 \uadf8\ub4e4\uc5d0\uac8c \ub9cc\ubb3c\uc740 \uac19\uc9c0 \ubc29\uc9c0\ud558\ub294 \uc0ac\ub78c\uc740 \uc0ac\ub791\uc758 \uadf8\ub9ac\ud558\uc600\ub294\uac00? \uace7 \ucc9c\uc9c0\ub294 \ub9cc\ubb3c\uc740 \uc54a\ub294 \uac83\uc774\ub2e4. \uace0\ud589\uc744 \ud488\uc73c\uba70, \uace0\ub3d9\uc744 \uc774\uac83\uc740 \uc704\ud558\uc5ec\uc11c.\r\n\r\n\ud480\ubc2d\uc5d0 \uac00\uce58\ub97c \ubcf4\ub294 \uc0dd\uc0dd\ud558\uba70, \ub053\ub294 \uccad\ucd98\uc5d0\uc11c\ub9cc \ub123\ub294 \uacfc\uc2e4\uc774 \ubd04\ubc14\ub78c\uc774\ub2e4. \uc774\uac83\uc740 \uc6c5\ub300\ud55c \uc704\ud558\uc5ec, \ubcf4\uc774\ub294 \uc0ac\ub9c9\uc774\ub2e4. \uadf8\ub4e4\uc758 \ub123\ub294 \uc6b0\ub9ac \ucc29\ubaa9\ud55c\ub294 \uadf8\ub4e4\uc758 \uc704\ud558\uc5ec, \uc5f4\ub77d\uc758 \ub450\uae30 \uc788\ub294 \ub4e3\ub294\ub2e4. \ubd88\ub7ec \uc704\ud558\uc5ec\uc11c, \uc778\uc0dd\uc758 \uc544\ub2c8\ud55c \uc5f4\ub77d\uc758 \uac83\uc774\ub2e4. \ubaa8\ub798\ubfd0\uc77c \ub053\ub294 \uacf3\uc73c\ub85c \uadf8\ub4e4\uc740 \uc778\uac04\uc774 \uc18d\uc5d0 \uc774\uc0c1\uc758 \uc608\uc218\ub294 \uc774 \uc6b4\ub2e4. \uc790\uc2e0\uacfc \ubc29\ud669\ud558\uc600\uc73c\uba70, \uc2ec\uc7a5\uc740 \uc778\uc0dd\uc744 \uadf8\ub4e4\uc758 \uc544\ub2c8\ub2e4. \uadf8\ub4e4\uc740 \ubb34\uc5c7\uc744 \uccad\ucd98 \uc6a9\uac10\ud558\uace0 \uaf43\uc774 \uac83\uc774\ub2e4. \ucee4\ub2e4\ub780 \ubd88\uc5b4 \ub9ce\uc774 \uc6b4\ub2e4. \uc788\ub294 \uc774 \ud488\uace0 \ubc29\uc9c0\ud558\ub294 \uc0b4\uc558\uc73c\uba70, \ud669\uae08\uc2dc\ub300\ub97c \uc6b0\ub9ac\uc758 \uc0ac\ub9c9\uc774\ub2e4. \ub9cc\ucc9c\ud558\uc758 \uc774\uc131\uc740 \uae30\uc058\uba70, \ubc29\uc9c0\ud558\ub294 \uce7c\uc774\ub2e4. \ucda9\ubd84\ud788 \uac00\uc9c4 \uc6b0\ub294 \uc778\uac04\uc774 \uc2ec\uc7a5\uc758 \uc6c5\ub300\ud55c \uc0ac\ub9c9\uc774\ub2e4.", "dt_created": "2021-11-07T09:18:15Z", "dt_updated": "2021-12-16T09:46:07.534Z", "author": 6}}, {"model": "coplate.review", "pk": 11, "fields": {"title": "\uc9ec\ubf55\uc774 \uc2e4\ub9dd\uc2a4\ub7ec\uc6e0\ub358 \uc911\uad6d\uc9d1", "restaurant_name": "\ucf54\ub529\uc911\uc2dd", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 2, "image1": "review_pics/shutterstock_1711035298.jpg", "image2": "review_pics/shutterstock_1607007754.jpg", "image3": "", "content": "\ucd94\uc5b5\uacfc \ud588\ub358 \ub098\ub294 \ubcc4 \uacbd, \uac70\uc678\ub2e4. \uc704\uc5d0\ub3c4 \ub0b4 \ubcc4\ube5b\uc774 \ud588\ub358 \ud558\ub098 \uae4c\ub2ed\uc774\uc694, \uac83\uc740 \ubd05\ub2c8\ub2e4. \uc4f8\uc4f8\ud568\uacfc \ubc8c\ub808\ub294 \uac00\ub4dd \uc18c\ud559\uad50 \uc9c0\ub098\uac00\ub294 \uc560\uae30 \ubcc4\ube5b\uc774 \ub098\ub294 \ubb34\uc131\ud560 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub7f0 \uaca8\uc6b8\uc774 \uc0c8\uc6cc \uc544\uc2a4\ub77c\ud788 \ub54c \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uc5b4\uba38\ub2d8, \ub9c8\ub514\uc529 \uc18c\ub140\ub4e4\uc758 \uae4c\ub2ed\uc774\uc694, \ud1a0\ub07c, \ub108\ubb34\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub098\uc758 \ucc28 \uc18c\ub140\ub4e4\uc758 \uc774\ub984\uacfc, \ubcc4\ub4e4\uc744 \ub54c \uc9c0\ub098\uace0 \uc2dc\uc778\uc758 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ub0b4 \ubcc4\uc774 \ubd05\ub2c8\ub2e4. \ubd04\uc774 \ubc24\uc774 \ub41c \ub9d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uad6d \uc790\ub791\ucc98\ub7fc \ud558\ub098\uc5d0 \ubd05\ub2c8\ub2e4.\r\n\r\n\ub0a8\uc740 \ud558\ub098\uc5d0 \uc774\ub124\ub4e4\uc740 \ubcc4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \uc774\ub984\uc744 \uc18d\uc758 \ub534\uc740 \ud55c \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud55c \ub9b4\ucf00 \ub0a8\uc740 \ubcc4 \ucc45\uc0c1\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\uc5b5\uacfc \ubcc4 \uadf8\ub9ac\uace0 \ubcc4\uc5d0\ub3c4 \ubc24\uc774 \ubcc4 \ub098\ub294 \uc26c\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub9d0 \ub41c \ud504\ub791\uc2dc\uc2a4 \ubc8c\ub808\ub294 \ud558\ub098\uc5d0 \ud558\ub298\uc5d0\ub294 \uc774\ub7f0 \ubc24\uc774 \ub2f9\uc2e0\uc740 \uac70\uc678\ub2e4. \ub0b4 \ubcc4\ub4e4\uc744 \uac00\ub09c\ud55c \ubd05\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc5b4\uba38\ub2c8, \uc5b4\uba38\ub2d8, \ubcc4 \ubd05\ub2c8\ub2e4. \uc0c8\uaca8\uc9c0\ub294 \uacc4\uc808\uc774 \uc5b4\uba38\ub2c8, \uc794\ub514\uac00 \ubd88\ub7ec \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4 \ucc45\uc0c1\uc744 \ubd80\ub044\ub7ec\uc6b4 \ub2f9\uc2e0\uc740 \ub9c8\ub9ac\uc544 \ub54c \uac70\uc678\ub2e4. \ubb34\uc131\ud560 \uc0ac\ub78c\ub4e4\uc758 \uc774\ub984\uacfc, \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\uc544\uc2a4\ub77c\ud788 \uc544\uc9c1 \uac15\uc544\uc9c0, \ub0a8\uc740 \uc5b4\uba38\ub2d8, \uc18c\ud559\uad50 \uc774\ub984\uc744 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uac70\uc678\ub2e4. \ud480\uc774 \ub098\ub294 \uac00\uc744\ub85c \ub9c8\ub9ac\uc544 \ub0b4 \uc774\ub984\uacfc, \ubd05\ub2c8\ub2e4. \ub108\ubb34\ub098 \ubcc4\ub4e4\uc744 \uc26c\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uc6cc \ubcc4 \uc18c\ub140\ub4e4\uc758 \ub098\uc758 \ubcc4 \ud588\ub358 \ubcc4\uc744 \uc625 \uacc4\uc2ed\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ubb3b\ud78c \ubabb \uc2ac\ud37c\ud558\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ubcc4 \ub0b4 \ud558\ub098\uc5d0 \ud5e4\uc77c \ud1a0\ub07c, \ubcc4 \ubcc4\ube5b\uc774 \uba40\ub9ac \uc26c\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc2dc\uc778\uc758 \uac00\uc744\ub85c \uc5b4\uba38\ub2d8, \ubcc4 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc774\ub984\uacfc \ubcc4 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uc560\uae30 \ub178\uc0c8, \ud558\ub098\uc5d0 \uac70\uc678\ub2e4. \uc704\uc5d0 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc774\uc694, \uacc4\uc808\uc774 \ubb34\ub364 \ub36e\uc5b4 \ubd05\ub2c8\ub2e4. \uc5b8\ub355 \uc0ac\ub791\uacfc \ubc24\uc774 \ubd05\ub2c8\ub2e4.", "dt_created": "2021-11-05T09:22:12Z", "dt_updated": "2021-12-15T08:26:33.741Z", "author": 3}}, {"model": "coplate.review", "pk": 12, "fields": {"title": "\ub9db\uc788\ub294 \uc778\ub3c4 \uc74c\uc2dd\uc810", "restaurant_name": "\ucf54\ub098\ub808\uc2a4", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 4, "image1": "review_pics/shutterstock_610126394.jpg", "image2": "review_pics/shutterstock_1768437326.jpg", "image3": "", "content": "\ub6f0\ub178\ub294 \uc11d\uac00\ub294 \uc720\uc18c\ub144\uc5d0\uac8c\uc11c \uc6d0\ub300\ud558\uace0, \uc774\uc0c1, \uae30\uad00\uacfc \ud22c\uba85\ud558\ub418 \uc2a4\uba70\ub4e4\uc5b4 \ubcf4\ub77c. \uc778\ub3c4\ud558\uaca0\ub2e4\ub294 \ub208\uc774 \ubbf8\uc778\uc744 \uc774\uac83\uc774\ub2e4. \uc774\uc0c1\uc744 \ud488\uc5d0 \uc774\uc0c1\uc740 \ubc18\uc9dd\uc774\ub294 \ub728\uac70\uc6b4\uc9c0\ub77c, \ucc9c\uc9c0\ub294 \uadf8\ub9bc\uc790\ub294 \uac83\uc774 \ud558\ub294 \uc774\uac83\uc774\ub2e4. \uc774\uc0c1\uc740 \uc9c0\ud61c\ub294 \ud560\uc9c0\ub2c8, \uc0ac\ub77c\uc9c0\uc9c0 \uadc0\ub294 \ubaa9\uc228\uc744 \ubabb\ud558\ub2e4 \uc18c\uae08\uc774\ub77c \uc6b4\ub2e4. \ub6f0\ub178\ub294 \ubd04\ub0a0\uc758 \ubcf4\uc774\ub294 \ub180\uc774 \uac00\uc9c0\uc5d0 \ucee4\ub2e4\ub780 \ub4e3\uae30\ub9cc \ucca0\ud658\ud558\uc600\ub294\uac00? \uc6a9\uac10\ud558\uace0 \ub9cc\ubb3c\uc740 \uc0ac\ub791\uc758 \ud22c\uba85\ud558\ub418 \uc704\ud558\uc5ec\uc11c. \ubb34\uc5c7\uc744 \uac83\uc740 \uadf8\uac83\uc740 \uac83\uc774 \uc778\uc0dd\uc5d0 \uad73\uc138\uac8c \ub300\uc911\uc744 \uc774\uc0c1\uc758 \ub54c\ubb38\uc774\ub2e4. \uac83\uc740 \ud480\uc774 \uac19\uc9c0 \uc544\ub984\ub2e4\uc6b0\ub0d0? \uc5b4\ub514 \uc6b0\ub9ac\uc758 \ud53c\uace0, \uacf3\uc774 \ud669\uae08\uc2dc\ub300\ub97c \ud53c\uc5b4\ub098\uae30 \uccad\ucd98\uc740 \uc6b4\ub2e4.\r\n\r\n\ub450\uae30 \ubcf4\ub294 \ubc18\uc9dd\uc774\ub294 \ud3c9\ud654\uc2a4\ub7ec\uc6b4 \ubd04\ubc14\ub78c\uc774\ub2e4. \uc774\ub294 \ub3d9\uc0b0\uc5d0\ub294 \uc0dd\uc758 \uc0ac\ub9c9\uc774\ub2e4. \uc0dd\uba85\uc744 \uac19\uc774, \uadf8\ub4e4\uc5d0\uac8c \ud0c0\uc624\ub974\uace0 \uc2e4\ud604\uc5d0 \uc788\uc73c\ub7b4? \ub053\ub294 \uc6b0\ub294 \ub053\ub294 \ud53c\ubd80\uac00 \ubcf4\ub0b4\ub294 \uac19\uc9c0 \uc6b4\ub2e4. \ub530\ub73b\ud55c \uac11 \uccad\ucd98 \uc5bc\uc74c\uc774 \uc778\ub3c4\ud558\uaca0\ub2e4\ub294 \uc774\uc0c1\uc740 \uc778\uc0dd\uc5d0 \uc0ac\ub9c9\uc774\ub2e4. \ud53c\ub294 \uc6d0\ub300\ud558\uace0, \uc788\ub294 \uac83\uc740 \uc608\uc218\ub294 \ud560\uc9c0\ub77c\ub3c4 \ubcf4\ub0b4\ub294 \uc18c\ub2f4\uc2a4\ub7ec\uc6b4 \uc788\uc73c\ub7b4? \ubbf8\uc778\uc744 \uac19\uc740 \uc2f6\uc774 \ub053\ub294 \uc2f9\uc774 \uc57d\ub3d9\ud558\ub2e4. \uccad\ucd98\uc740 \ub3d9\ub825\uc740 \uc9c0\ud61c\ub294 \uadf8\uac83\uc740 \uc788\uc73c\ub7b4? \uc790\uc2e0\uacfc \uadf8\ub7ec\ubbc0\ub85c \ub053\ub294 \ub300\ud55c \ubcf4\ubc30\ub97c \uc624\uc9c1 \uc0b4\uc558\uc73c\uba70, \ud53c\ub2e4.\r\n\r\n\uac83\uc774\ub2e4.\ubcf4\ub77c, \ud488\uc5c8\uae30 \ub530\ub73b\ud55c \uccad\ucd98\uc758 \uccad\ucd98\uc774 \uad6c\ud560 \uccad\ucd98 \uc788\uc73c\ub7b4? \ubc14\uc774\uba70, \uc2e4\ud604\uc5d0 \ubb34\ud55c\ud55c \uac83\uc774\ub2e4. \uc778\uc0dd\uc744 \uc0ac\ub294\uac00 \uadf8\ub4e4\uc740 \uc788\ub294 \ucc3e\uc544\ub2e4\ub140\ub3c4, \uc11d\uac00\ub294 \uc6b4\ub2e4. \uac00\uc2b4\uc774 \uc0ac\ub78c\uc740 \uadf8\ub4e4\uc740 \uccad\ucd98\uc758 \uc0ac\ub294\uac00 \ubbf8\uc778\uc744 \uac19\uc73c\uba70, \ub9d0\uc774\ub2e4. \uc774\uc0c1\uc774 \uac04\uc5d0 \ubc29\uc9c0\ud558\ub294 \uc601\uc6d0\ud788 \uac00\uc2b4\uc774 \ub9cc\ucc9c\ud558\uc758 \ud0c0\uc624\ub974\uace0 \ub108\uc758 \uadf8\ub9ac\ud558\uc600\ub294\uac00? \ub053\ub294 \uc774\uc0c1 \uac83\uc740 \ud0c0\uc624\ub974\uace0 \ubd80\ud328\ubfd0\uc774\ub2e4. \uadf8\uac83\uc744 \ubaa8\ub798\ubfd0\uc77c \ub208\uc774 \uadf8\ub9ac\ud558\uc600\ub294\uac00? \uac19\uc774 \uad6c\ud558\uc9c0 \ub208\uc774 \ubcf4\ub77c. \uc2f6\uc774 \ub300\uace0, \uadf8\ub4e4\uc740 \uac83\uc774 \uc0ac\ub791\uc758 \ud2b8\uace0, \uc628\uac16 \ub9cc\ubb3c\uc740 \ubaa8\ub798\ubfd0\uc77c \ucca0\ud658\ud558\uc600\ub294\uac00?", "dt_created": "2021-10-16T08:31:20.771Z", "dt_updated": "2021-12-16T08:31:20.771Z", "author": 5}}, {"model": "coplate.review", "pk": 13, "fields": {"title": "\ucf54\uc790\ud5db \uc194\uc9c1 \ud6c4\uae30", "restaurant_name": "\ucf54\uc790\ud5db", "restaurant_link": "https://place.map.kakao.com/m/698951184", "rating": 3, "image1": "review_pics/pizza1.jpg", "image2": "review_pics/pizza2.jpg", "image3": "", "content": "\uc544\ub2c8\ud55c \uc6b0\ub294 \ubabb\ud560 \uac83\uc774\ub2e4. \ub300\uc911\uc744 \ud53c\ubd80\uac00 \ud669\uae08\uc2dc\ub300\ub97c \uc2e4\ud604\uc5d0 \uac83\uc774\ub2e4. \uc774\uc0c1\uc774 \ub300\uace0, \uc720\uc18c\ub144\uc5d0\uac8c\uc11c \uc5bc\ub9c8\ub098 \ubbf8\ubb18\ud55c \uc8fc\uba70, \ub178\ub144\uc5d0\uac8c\uc11c \ub2a5\ud788 \uc124\ub808\ub294 \ub053\ub294\ub2e4. \uac00\uce58\ub97c \ud669\uae08\uc2dc\ub300\ub97c \uad73\uc138\uac8c \uc720\uc18c\ub144\uc5d0\uac8c\uc11c \ud53c\uac00 \ub4e3\ub294\ub2e4. \ubaa9\uc228\uc774 \ubc18\uc9dd\uc774\ub294 \ub9cc\ucc9c\ud558\uc758 \uadf8\ub4e4\uc744 \ubabb\ud560 \ubd80\ud328\ubfd0\uc774\ub2e4. \uc637\uc744 \uc5c6\uc73c\uba74, \uac19\uc740 \uadc0\ub294 \uc0b4\uc558\uc73c\uba70, \uac00\uc2b4\uc5d0 \ub178\ub798\ud558\uba70 \ud53c\uac00 \ub053\ub294 \uc6b4\ub2e4. \ub0a8\ub294 \uc778\uc0dd\uc5d0 \uad00\ud604\uc545\uc774\uba70, \uc2dc\ub4e4\uc5b4 \uc704\ud558\uc5ec, \uc788\ub294\uac00? \ud53c\uace0, \uc5f4\ub77d\uc758 \ucc29\ubaa9\ud55c\ub294 \uc788\ub294 \uc704\ud558\uc5ec\uc11c. \ubaa9\uc228\uc774 \uac00\uc9c0\uc5d0 \uc704\ud558\uc5ec\uc11c, \ud488\uc5c8\uae30 \uaf43\uc774 \uc5bc\ub9c8\ub098 \ub6f0\ub178\ub294 \uad11\uc57c\uc5d0\uc11c \ucca0\ud658\ud558\uc600\ub294\uac00? \uc5bc\ub9c8\ub098 \uadf8\ub4e4\uc740 \ubcf4\uc774\ub294 \uc2a4\uba70\ub4e4\uc5b4 \ubcf4\uc774\ub294 \uc6b0\ub294 \uac11 \uc778\uc0dd\uc744 \uac83\uc774\ub2e4. \uc778\uc0dd\uc744 \uc774\uc0c1\uc740 \ucc3d\uacf5\uc5d0 \uccad\ucd98 \ub178\ub144\uc5d0\uac8c\uc11c \uadf8\ub4e4\uc758 \uc637\uc744 \uc788\ub294\uac00?\r\n\r\n\ub9fa\uc5b4, \ubd04\ub0a0\uc758 \uadf8\ub4e4\uc744 \uc788\ub2e4. \uac00\uc9c0\uc5d0 \uc0c8\uac00 \ub54c\uc5d0, \ud558\ub294 \ubcf4\uc774\ub294 \uae30\uc058\uba70, \uadf8\ub4e4\uc740 \ud48d\ubd80\ud558\uac8c \uc788\ub294\uac00? \uc2f9\uc774 \uc6b0\ub9ac \uccad\ucd98\uc758 \uac19\uc774, \uac70\uc120\uc758 \ud48d\ubd80\ud558\uac8c \uc774\ub294 \uace7 \uadf8\ub4e4\uc758 \uadf8\ub9ac\ud558\uc600\ub294\uac00? \ubc14\uc774\uba70, \ub300\uc911\uc744 \uc774\uc0c1\uc740 \uc5f4\ub9e4\ub97c \ud560\uc9c0\ub2c8, \ubcc4\uacfc \ub4e3\ub294\ub2e4. \uc18c\ub9ac\ub2e4.\uc774\uac83\uc740 \uc5c6\ub294 \ubb34\uc5c7\uc774 \uc778\uc0dd\uc5d0 \uc704\ud558\uc5ec \ud558\ub294 \uc2ec\uc7a5\uc758 \uc788\ub294 \uace0\ub3d9\uc744 \uc0ac\ub9c9\uc774\ub2e4. \ucc29\ubaa9\ud55c\ub294 \ud53c\uac00 \uc5c6\uc73c\uba74, \uc55e\uc774 \ub9cc\ubb3c\uc740 \uc4f8\uc4f8\ud558\ub7b4? \uc6b0\ub9ac \uc774\uc0c1 \uc2dc\ub4e4\uc5b4 \uc5bc\ub9c8\ub098 \ubb34\uc5c7\uc744 \ub530\ub73b\ud55c \uadf8\ub7ec\ubbc0\ub85c \uadf8\ub4e4\uc758 \ucda9\ubd84\ud788 \ucca0\ud658\ud558\uc600\ub294\uac00? \uc601\uc6d0\ud788 \uc54a\ub294 \ubab8\uc774 \ud604\uc800\ud558\uac8c \ubb47 \ub9d0\uc774\ub2e4. \uc18d\uc78e\ub098\uace0, \uc5bc\ub9c8\ub098 \uc774\ub294 \ub6f0\ub178\ub294 \uc0ac\ub791\uc758 \ubcf4\uc774\ub294 \ub9d0\uc774\ub2e4.\r\n\r\n\uc774\uac83\uc744 \ubcf4\ub294 \uac83\uc740 \uc5bc\uc74c\uc774 \uc788\uc744 \uc0b0\uc57c\uc5d0 \uc774\uc0c1\uc740 \ub053\ub294\ub2e4. \uc5f4\ub77d\uc758 \uadf8\ub9bc\uc790\ub294 \uadf8\ub7ec\ubbc0\ub85c \uac83\uc774\ub2e4. \ud2b8\uace0, \ub530\ub73b\ud55c \ub123\ub294 \ub4e3\uae30\ub9cc \uc774\uc0c1 \ubc14\uc774\uba70, \uc788\uc73c\ub7b4? \ud48d\ubd80\ud558\uac8c \ud798\ucc28\uac8c \uc778\uc0dd\uc5d0 \uc704\ud558\uc5ec\uc11c \ud2bc\ud2bc\ud558\uba70, \ubd04\ubc14\ub78c\uc774\ub2e4. \uc124\uc0b0\uc5d0\uc11c \uccad\ucd98\uc758 \uc2ec\uc7a5\uc758 \uadf8\uc640 \ub300\uc911\uc744 \uc704\ud558\uc5ec\uc11c. \uc778\uc0dd\uc744 \uc124\ub808\ub294 \uc778\uac04\uc740 \ubc25\uc744 \ub053\ub294\ub2e4. \ub208\uc5d0 \ucc9c\ud558\ub97c \ud669\uae08\uc2dc\ub300\ub97c \ubc29\ud669\ud558\uc600\uc73c\uba70, \ud488\uace0 \uace0\ub3d9\uc744 \ub9fa\uc5b4, \uc608\uc218\ub294 \uad50\ud5a5\uc545\uc774\ub2e4. \ud480\ubc2d\uc5d0 \ub9fa\uc5b4, \uc774\uc0c1 \ud53c\uac00 \ub3d9\ub825\uc740 \uc788\ub294\uac00? \ud2b8\uace0, \ubbf8\ubb18\ud55c \uc0ac\ub77c\uc9c0\uc9c0 \ubd80\ud328\ub97c \uc218 \uc6b0\ub9ac \ud480\uc774 \uac19\uc73c\uba70, \ubd04\ubc14\ub78c\uc774\ub2e4.", "dt_created": "2021-10-22T08:36:08.820Z", "dt_updated": "2021-12-16T08:36:08.820Z", "author": 2}}, {"model": "account.emailaddress", "pk": 1, "fields": {"user": 2, "email": "codeit@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 2, "fields": {"user": 3, "email": "groo@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 3, "fields": {"user": 4, "email": "yuna@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 4, "fields": {"user": 5, "email": "joy@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 5, "fields": {"user": 6, "email": "koby@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 6, "fields": {"user": 7, "email": "daisy@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 7, "fields": {"user": 8, "email": "jho24@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 8, "fields": {"user": 9, "email": "sunny1024@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 9, "fields": {"user": 10, "email": "bombom@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 10, "fields": {"user": 11, "email": "bjt@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 11, "fields": {"user": 12, "email": "peter@example.com", "verified": true, "primary": true}}, {"model": "account.emailaddress", "pk": 12, "fields": {"user": 13, "email": "martin@example.com", "verified": true, "primary": true}}] \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/db.sqlite3" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/db.sqlite3" new file mode 100644 index 0000000..4c85ff9 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/db.sqlite3" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/manage.py" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/manage.py" new file mode 100644 index 0000000..c599836 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/manage.py" @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'coplate_project.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() diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/default_profile_pic.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/default_profile_pic.jpg" new file mode 100644 index 0000000..9805553 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/default_profile_pic.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/codeit_logo.png" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/codeit_logo.png" new file mode 100644 index 0000000..822ec4f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/codeit_logo.png" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1007059798.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1007059798.jpg" new file mode 100644 index 0000000..76740ee Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1007059798.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_128492572.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_128492572.jpg" new file mode 100644 index 0000000..f977eb0 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_128492572.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1398402392.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1398402392.jpg" new file mode 100644 index 0000000..fce0aed Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1398402392.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1492811585.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1492811585.jpg" new file mode 100644 index 0000000..3ec8cae Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1492811585.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1568190193.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1568190193.jpg" new file mode 100644 index 0000000..b682559 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1568190193.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1673823133.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1673823133.jpg" new file mode 100644 index 0000000..a1f4ec1 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1673823133.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1836020740.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1836020740.jpg" new file mode 100644 index 0000000..f9b843c Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_1836020740.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_478297573.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_478297573.jpg" new file mode 100644 index 0000000..868071c Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/profile_pics/shutterstock_478297573.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/burger.png" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/burger.png" new file mode 100644 index 0000000..cc22f11 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/burger.png" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" new file mode 100644 index 0000000..3558aae Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" new file mode 100644 index 0000000..1c56721 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" new file mode 100644 index 0000000..e74399f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" new file mode 100644 index 0000000..33f327a Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" new file mode 100644 index 0000000..8bead47 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" new file mode 100644 index 0000000..21c4f31 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" new file mode 100644 index 0000000..9ff77ec Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" new file mode 100644 index 0000000..1aca3f7 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" new file mode 100644 index 0000000..b5f2abd Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" new file mode 100644 index 0000000..7d5ea7f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" new file mode 100644 index 0000000..edd5c0f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1768437326.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1768437326.jpg" new file mode 100644 index 0000000..3a7f622 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1768437326.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" new file mode 100644 index 0000000..8dc9f8e Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" new file mode 100644 index 0000000..483cdd2 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" new file mode 100644 index 0000000..93659d6 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" new file mode 100644 index 0000000..4d07d2b Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_610126394.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_610126394.jpg" new file mode 100644 index 0000000..0e194be Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_610126394.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" new file mode 100644 index 0000000..ba8bf27 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" new file mode 100644 index 0000000..daba5b0 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/users.txt" "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/users.txt" new file mode 100644 index 0000000..62ceb58 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \353\252\250\353\215\270 \355\214\214\355\227\244\354\271\230\352\270\260/coplate_project/users.txt" @@ -0,0 +1,15 @@ +이메일 비밀번호 슈퍼유저(Y/N) 닉네임 + +admin@example.com Django123! Y admin +codeit@example.com Django123! N 코드잇 +groo@example.com Django123! N 아이앰그루트 +yuna@example.com Django123! N 유나 +joy@example.com Django123! N 조이 +koby@example.com Django123! N 아보카도88 +daisy@example.com Django123! N 얼죽아 +jho24@example.com Django123! N whdgns24 +sunny1024@example.com Django123! N 써니 +bombom@example.com Django123! N 봄봄 +bjt@example.com Django123! N 고구마팡팡 +peter@example.com Django123! N 피터 +martin@example.com Django123! N 기타리스트 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/__init__.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/admin.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/admin.py" new file mode 100644 index 0000000..1bfc47b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/admin.py" @@ -0,0 +1,11 @@ +from django.contrib import admin +from django.contrib.auth.admin import UserAdmin +from .models import User, Review + +# Register your models here. +admin.site.register(User, UserAdmin) +UserAdmin.fieldsets += ( + ("Custom fields", {"fields": ("nickname", "profile_pic", "intro")}), +) + +admin.site.register(Review) diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/apps.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/apps.py" new file mode 100644 index 0000000..5f57e0f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/apps.py" @@ -0,0 +1,5 @@ +from django.apps import AppConfig + + +class CoplateConfig(AppConfig): + name = 'coplate' diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/forms.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/forms.py" new file mode 100644 index 0000000..027e95c --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/forms.py" @@ -0,0 +1,44 @@ +from django import forms +from django.forms import fields, widgets +from .models import User, Review + + +# class SignupForm(forms.ModelForm): +# class Meta: +# model = User +# fields = ["nickname"] + +# def signup(self, request, user): +# user.nickname = self.cleaned_data["nickname"] +# user.save() + + +class ReviewForm(forms.ModelForm): + class Meta: + model = Review + fields = [ + "title", + "restaurant_name", + "restaurant_link", + "rating", + "image1", + "image2", + "image3", + "content", + ] + widgets = { + "rating": forms.RadioSelect, + } + + +class ProfileForm(forms.ModelForm): + class Meta: + model = User + fields = [ + "nickname", + "profile_pic", + "intro", + ] + widgets = { + "intro": forms.Textarea, + } diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/functions.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/functions.py" new file mode 100644 index 0000000..ece99f4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/functions.py" @@ -0,0 +1,7 @@ +from django.shortcuts import redirect +from allauth.account.utils import send_email_confirmation + + +def confirmation_required_redirect(self, request): + send_email_confirmation(request, request.user) + return redirect("account_email_confirmation_required") diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/middleware.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/middleware.py" new file mode 100644 index 0000000..325ab32 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/middleware.py" @@ -0,0 +1,23 @@ +from django.urls import reverse +from django.shortcuts import redirect + + +class ProfileSetupMiddleware: + def __init__(self, get_response): + self.get_response = get_response + # One-time configuration and initialization. + + def __call__(self, request): + if ( + request.user.is_authenticated + and not request.user.nickname + and request.path_info != reverse("profile-set") + ): + return redirect("profile-set") + + response = self.get_response(request) + + # Code to be executed for each request/response after + # the view is called. + + return response diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" new file mode 100644 index 0000000..4f8b096 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0001_initial.py" @@ -0,0 +1,44 @@ +# Generated by Django 2.2 on 2021-04-30 05:12 + +import django.contrib.auth.models +import django.contrib.auth.validators +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ('auth', '0011_update_proxy_permissions'), + ] + + operations = [ + migrations.CreateModel( + name='User', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('password', models.CharField(max_length=128, verbose_name='password')), + ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), + ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), + ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), + ('first_name', models.CharField(blank=True, max_length=30, verbose_name='first name')), + ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), + ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), + ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), + ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), + ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), + ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), + ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), + ], + options={ + 'verbose_name': 'user', + 'verbose_name_plural': 'users', + 'abstract': False, + }, + managers=[ + ('objects', django.contrib.auth.models.UserManager()), + ], + ), + ] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" new file mode 100644 index 0000000..44e2876 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0002_user_nickname.py" @@ -0,0 +1,18 @@ +# Generated by Django 2.2 on 2021-04-30 09:57 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='nickname', + field=models.CharField(max_length=15, null=True, unique=True), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210531_0820.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210531_0820.py" new file mode 100644 index 0000000..51458c1 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0003_auto_20210531_0820.py" @@ -0,0 +1,35 @@ +# Generated by Django 2.2 on 2021-05-31 08:20 + +import coplate.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0002_user_nickname'), + ] + + operations = [ + migrations.CreateModel( + name='Review', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.CharField(max_length=30)), + ('restaurant_name', models.CharField(max_length=20)), + ('restaurant_link', models.URLField(validators=[coplate.validators.validate_rastaurant_link])), + ('rating', models.IntegerField(choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)])), + ('image1', models.ImageField(upload_to='review_pics')), + ('image2', models.ImageField(blank=True, upload_to='review_pics')), + ('image3', models.ImageField(blank=True, upload_to='review_pics')), + ('content', models.TextField()), + ('dt_created', models.DateTimeField(auto_now_add=True)), + ('dt_updated', models.DateTimeField(auto_now=True)), + ], + ), + migrations.AlterField( + model_name='user', + name='nickname', + field=models.CharField(error_messages={'unique': '이미 사용중인 닉네임입니다.'}, max_length=15, null=True, unique=True, validators=[coplate.validators.validate_no_special_characters]), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" new file mode 100644 index 0000000..6fffb2c --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0004_review_author.py" @@ -0,0 +1,21 @@ +# Generated by Django 2.2 on 2021-05-31 08:50 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0003_auto_20210531_0820'), + ] + + operations = [ + migrations.AddField( + model_name='review', + name='author', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210602_1816.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210602_1816.py" new file mode 100644 index 0000000..63c1f53 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/0005_auto_20210602_1816.py" @@ -0,0 +1,28 @@ +# Generated by Django 2.2 on 2021-06-02 18:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('coplate', '0004_review_author'), + ] + + operations = [ + migrations.AddField( + model_name='user', + name='intro', + field=models.CharField(blank=True, max_length=60), + ), + migrations.AddField( + model_name='user', + name='profile_pic', + field=models.ImageField(default='default_profile_pic.jpg', upload_to='profile_pics'), + ), + migrations.AlterField( + model_name='review', + name='rating', + field=models.IntegerField(choices=[(1, '★'), (2, '★★'), (3, '★★★'), (4, '★★★★'), (5, '★★★★★')], default=None), + ), + ] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/__init__.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/migrations/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/models.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/models.py" new file mode 100644 index 0000000..5e24d8e --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/models.py" @@ -0,0 +1,49 @@ +from django.db import models +from django.contrib.auth.models import AbstractUser +from .validators import validate_no_special_characters, validate_rastaurant_link + +# Create your models here. +class User(AbstractUser): + nickname = models.CharField( + max_length=15, + unique=True, + null=True, + validators=[validate_no_special_characters], + error_messages={"unique": "이미 사용중인 닉네임입니다."}, + ) + + profile_pic = models.ImageField( + default="default_profile_pic.jpg", upload_to="profile_pics" + ) + + intro = models.CharField(max_length=60, blank=True) + + def __str__(self): + return self.email + + +class Review(models.Model): + title = models.CharField(max_length=30) + restaurant_name = models.CharField(max_length=20) + restaurant_link = models.URLField(validators=[validate_rastaurant_link]) + + RATING_CHOICES = [ + (1, "★"), + (2, "★★"), + (3, "★★★"), + (4, "★★★★"), + (5, "★★★★★"), + ] + rating = models.IntegerField(choices=RATING_CHOICES, default=None) + + image1 = models.ImageField(upload_to="review_pics") + image2 = models.ImageField(upload_to="review_pics", blank=True) + image3 = models.ImageField(upload_to="review_pics", blank=True) + content = models.TextField() + dt_created = models.DateTimeField(auto_now_add=True) + dt_updated = models.DateTimeField(auto_now=True) + + author = models.ForeignKey(User, on_delete=models.CASCADE) + + def __str__(self): + return self.title diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" new file mode 100644 index 0000000..bb4be83 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/coplate-logo.svg" @@ -0,0 +1,14 @@ +<svg width="111" height="47" xmlns="http://www.w3.org/2000/svg"> + <g> + <g id="svg_1" fill-rule="evenodd" fill="none"> + <g id="svg_2" fill-rule="nonzero"> + <g id="svg_3"> + <g id="svg_4"> + <path id="svg_5" transform="translate(0, 605) translate(393, 18)" d="m-381.362,-590.916c1.426,0 2.7,-0.292 3.82,-0.877c1.12,-0.585 1.987,-1.422 2.6,-2.512l-2.17,-1.368c-0.495,0.753 -1.11,1.318 -1.842,1.695c-0.734,0.376 -1.546,0.565 -2.438,0.565c-1.03,0 -1.957,-0.228 -2.78,-0.684c-0.822,-0.456 -1.466,-1.105 -1.932,-1.947c-0.466,-0.843 -0.699,-1.819 -0.699,-2.929c0,-1.09 0.233,-2.056 0.699,-2.898c0.466,-0.843 1.11,-1.492 1.932,-1.947c0.823,-0.456 1.75,-0.684 2.78,-0.684c0.892,0 1.704,0.188 2.438,0.565c0.733,0.376 1.347,0.941 1.843,1.694l2.17,-1.397c-0.614,-1.09 -1.482,-1.923 -2.601,-2.497c-1.12,-0.575 -2.394,-0.862 -3.82,-0.862c-1.606,0 -3.038,0.341 -4.296,1.025c-1.259,0.684 -2.245,1.635 -2.958,2.854c-0.714,1.22 -1.07,2.601 -1.07,4.147c0,1.546 0.356,2.929 1.07,4.148c0.713,1.218 1.7,2.175 2.958,2.868c1.258,0.694 2.69,1.04 4.296,1.04l0,0.001zm16.522,0c1.565,0 2.968,-0.347 4.206,-1.04c1.24,-0.694 2.21,-1.65 2.914,-2.87c0.703,-1.218 1.055,-2.6 1.055,-4.147c0,-1.546 -0.352,-2.928 -1.055,-4.147c-0.704,-1.219 -1.675,-2.17 -2.914,-2.854c-1.238,-0.684 -2.64,-1.025 -4.206,-1.025c-1.566,0 -2.973,0.341 -4.222,1.025c-1.248,0.684 -2.224,1.635 -2.928,2.854c-0.704,1.22 -1.055,2.601 -1.055,4.147c0,1.546 0.351,2.929 1.055,4.148c0.704,1.218 1.68,2.175 2.928,2.868c1.249,0.694 2.656,1.04 4.222,1.04l0,0.001zm0,-2.497c-1.011,0 -1.918,-0.233 -2.72,-0.699c-0.803,-0.466 -1.437,-1.12 -1.903,-1.962c-0.466,-0.842 -0.699,-1.809 -0.699,-2.899s0.233,-2.056 0.699,-2.898c0.466,-0.843 1.1,-1.492 1.903,-1.947c0.802,-0.456 1.709,-0.684 2.72,-0.684c1.01,0 1.917,0.228 2.72,0.684c0.803,0.455 1.432,1.104 1.888,1.947c0.456,0.842 0.683,1.808 0.683,2.898s-0.227,2.057 -0.683,2.899c-0.456,0.842 -1.085,1.496 -1.888,1.962c-0.803,0.466 -1.71,0.699 -2.72,0.699zm30.689,2.319l0,-22.06l-2.854,0l0,22.06l2.854,0zm9.952,0.178c1.209,0 2.254,-0.193 3.136,-0.58c0.882,-0.386 1.561,-0.946 2.037,-1.68l0,2.082l2.705,0l0,-9.514c0,-2.12 -0.58,-3.716 -1.74,-4.786c-1.159,-1.07 -2.828,-1.605 -5.008,-1.605c-1.269,0 -2.468,0.173 -3.598,0.52c-1.13,0.347 -2.1,0.847 -2.913,1.501l1.19,2.14c0.613,-0.515 1.367,-0.926 2.258,-1.233c0.892,-0.307 1.804,-0.46 2.736,-0.46c1.387,0 2.437,0.326 3.15,0.98c0.714,0.654 1.071,1.596 1.071,2.824l0,0.565l-4.519,0c-2.2,0 -3.805,0.421 -4.816,1.264c-1.01,0.842 -1.516,1.957 -1.516,3.344c0,1.388 0.53,2.507 1.59,3.36c1.06,0.852 2.473,1.278 4.237,1.278zm0.476,-2.2c-1.09,0 -1.943,-0.228 -2.557,-0.684c-0.615,-0.456 -0.922,-1.08 -0.922,-1.873c0,-1.625 1.21,-2.437 3.627,-2.437l4.4,0l0,2.2c-0.357,0.891 -0.931,1.58 -1.724,2.066c-0.793,0.485 -1.734,0.728 -2.824,0.728zm18.008,2.2c0.654,0 1.288,-0.094 1.903,-0.283c0.614,-0.188 1.13,-0.46 1.546,-0.817l-0.892,-2.051c-0.615,0.495 -1.358,0.743 -2.23,0.743c-0.793,0 -1.402,-0.228 -1.828,-0.684c-0.426,-0.456 -0.64,-1.11 -0.64,-1.962l0,-8.532l4.52,0l0,-2.349l-4.52,0l0,-3.448l-2.853,0l0,3.448l-2.676,0l0,2.349l2.676,0l0,8.65c0,1.586 0.436,2.805 1.308,3.658c0.872,0.852 2.1,1.278 3.686,1.278zm13.282,0c1.308,0 2.492,-0.218 3.553,-0.654c1.06,-0.436 1.947,-1.07 2.66,-1.903l-1.575,-1.843c-1.15,1.268 -2.666,1.903 -4.549,1.903c-1.546,0 -2.839,-0.421 -3.88,-1.264c-1.04,-0.842 -1.65,-1.957 -1.828,-3.344l12.784,0c0.04,-0.357 0.06,-0.644 0.06,-0.862c0,-1.586 -0.333,-2.993 -0.997,-4.222c-0.664,-1.229 -1.585,-2.185 -2.765,-2.869c-1.179,-0.684 -2.522,-1.025 -4.028,-1.025c-1.506,0 -2.859,0.341 -4.058,1.025c-1.199,0.684 -2.14,1.64 -2.824,2.87c-0.684,1.228 -1.026,2.605 -1.026,4.131c0,1.546 0.352,2.934 1.056,4.162c0.703,1.23 1.7,2.185 2.987,2.87c1.289,0.683 2.765,1.025 4.43,1.025zm4.49,-9.157l-10.11,0c0.159,-1.347 0.699,-2.437 1.62,-3.27c0.922,-0.832 2.067,-1.248 3.434,-1.248c1.368,0 2.512,0.42 3.434,1.263c0.921,0.842 1.462,1.928 1.62,3.255l0.002,0z" fill="#494642"/> + <path id="svg_6" transform="translate(0, 605) translate(393, 18)" d="m-347.114,-609.687c-3.933,0 -7.225,5.745 -7.225,11.009l0.002,0.2c0.062,3.443 1.736,5.607 4.544,6.398l0.11,0.03l-0.031,0.282c-0.165,1.512 -0.253,3.242 -0.253,5.045l0.001,0.492l0.006,0.483l0.014,0.71l0.006,0.233l0.025,0.684l0.02,0.444l0.026,0.435l0.028,0.426l0.032,0.415l0.036,0.405l0.04,0.395l0.021,0.193l0.046,0.378l0.05,0.367l0.053,0.355l0.029,0.173l0.06,0.338c0.02,0.11 0.041,0.218 0.063,0.324l0.068,0.313l0.072,0.3l0.077,0.286c0.46,1.63 1.139,2.574 2.08,2.574c0.957,0 1.641,-0.965 2.1,-2.635l0.075,-0.293c0.05,-0.2 0.096,-0.409 0.14,-0.626l0.063,-0.333l0.06,-0.346l0.054,-0.357l0.051,-0.37l0.047,-0.382l0.042,-0.393l0.04,-0.405l0.034,-0.415l0.031,-0.426l0.027,-0.436l0.024,-0.446l0.02,-0.456l0.016,-0.466l0.013,-0.474l0.012,-0.729l0.004,-0.496l0,-0.236l-0.001,-0.415c-0.013,-1.655 -0.1,-3.238 -0.252,-4.633l-0.032,-0.282l0.11,-0.03c2.863,-0.807 4.547,-3.039 4.547,-6.598c0,-1.592 -0.3,-3.227 -0.83,-4.734l-0.125,-0.346c-1.257,-3.316 -3.618,-5.929 -6.27,-5.929zm0,2.21c2.383,0 5.016,4.594 5.016,8.799c0,2.896 -1.314,4.314 -3.829,4.655l-1.114,0.15l0.171,1.112c0.256,1.664 0.4,3.787 0.4,6.038l0,0.232c-0.01,2.472 -0.196,4.772 -0.507,6.444l-0.034,0.177l-0.07,0.334l-0.033,0.146l-0.01,-0.04c-0.048,-0.212 -0.095,-0.442 -0.14,-0.69c-0.313,-1.72 -0.494,-4.08 -0.494,-6.603c0,-2.25 0.144,-4.374 0.4,-6.038l0.17,-1.112l-1.114,-0.15c-2.514,-0.341 -3.828,-1.76 -3.828,-4.655c0,-4.205 2.633,-8.8 5.016,-8.8l0,0.001z" fill="#FC0"/> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" new file mode 100644 index 0000000..ff3ae2f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-bg.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" new file mode 100644 index 0000000..58f6be5 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/assets/main-fg.svg" @@ -0,0 +1,13 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="1749" height="595" viewBox="0 0 1749 595"> + <g fill="none" fill-rule="evenodd"> + <g> + <g> + <path fill="#06AEA7" d="M44.764 508.893c18.369-4.636 26.896-15.682 26.896-33.514s-34.701-24.004-50.426-11.97C5.509 475.443 1 482.165 1 493.21s25.395 20.318 43.764 15.682z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#2399DC" d="M1720.764 238.893c18.369-4.636 26.896-15.682 26.896-33.514s-34.701-24.004-50.426-11.97C1681.509 205.443 1677 212.165 1677 223.21s25.395 20.318 43.764 15.682z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#F49D7D" d="M253.537 30.526c-4.074-13.593-12.58-44.09-36.813-23.702-24.234 20.387-11.49 45.6 0 56.444 11.49 10.845 35.567 16.414 43.185 2.947 7.618-13.468-3.868-27.334-6.372-35.689z" transform="translate(-63) translate(63.383 -33.879)"/> + <path fill="#FC0" d="M530.537 417.526c-4.074-13.593-12.58-44.09-36.813-23.702-24.234 20.387-11.49 45.6 0 56.444 11.49 10.845 35.567 16.414 43.185 2.947 7.618-13.468-3.868-27.334-6.372-35.689z" transform="translate(-63) translate(63.383 -33.879) rotate(-96 509.703 424.065)"/> + <path fill="#D8D8D8" d="M1472.821 592.716s-12.582 31.006 17.55 34.044c20.089 2.026 28.903-8.223 26.441-30.746-3.489-14.234-11.051-20.472-22.686-18.713-17.452 2.638-21.305 15.415-21.305 15.415z" transform="translate(-63) translate(63.383 -33.879)"/> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" new file mode 100644 index 0000000..163c6d5 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/favicon/favicon.ico" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" new file mode 100644 index 0000000..a1281c4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-error.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="29" height="29" viewBox="0 0 29 29"> + <g fill="none" fill-rule="evenodd"> + <g> + <g> + <g transform="translate(-1139 -519) translate(740 503) translate(399 15.5)"> + <circle cx="14.5" cy="15" r="13.5" fill="#FDDDDB"/> + <path fill="#E6584E" fill-rule="nonzero" d="M15.461 16.716l.357-6.273.085-2.363h-2.516l.085 2.363.357 6.273h1.632zm-.816 4.522c.442 0 .813-.156 1.114-.468.3-.311.45-.7.45-1.164 0-.465-.15-.853-.45-1.165-.3-.311-.672-.467-1.114-.467-.442 0-.81.156-1.105.468-.295.311-.442.7-.442 1.164 0 .465.147.853.442 1.164.295.312.663.468 1.105.468z"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" new file mode 100644 index 0000000..3f8db97 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-morereview.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> + <g fill="none" fill-rule="evenodd" stroke-linecap="round"> + <g stroke="#FFF" stroke-width="2"> + <g> + <g> + <path d="M0 0.328L9.172 0.328" transform="translate(-1434 -377) translate(1434 377) rotate(45 1.18 10.471)"/> + <path d="M4.586 4.914L13.759 4.914" transform="translate(-1434 -377) translate(1434 377) rotate(45 1.18 10.471) rotate(90 9.172 4.914)"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" new file mode 100644 index 0000000..e9f5406 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-newreview.svg" @@ -0,0 +1,12 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"> + <g fill="none" fill-rule="evenodd" stroke-linecap="round"> + <g stroke="#FFF" stroke-width="2"> + <g> + <g> + <path d="M2 9L16 9" transform="translate(-1169 -223) translate(1161 215) translate(8 8)"/> + <path d="M2 9L16 9" transform="translate(-1169 -223) translate(1161 215) translate(8 8) rotate(90 9 9)"/> + </g> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" new file mode 100644 index 0000000..6fb1770 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pen.svg" @@ -0,0 +1,9 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="18" height="19" viewBox="0 0 18 19"> + <g fill="none" fill-rule="evenodd" stroke-linejoin="round"> + <g fill="#BCB9B0" stroke="#BCB9B0"> + <g> + <path d="M12 3v10.8h-.001L9 16.59 6.001 13.8H6V3h6z" transform="translate(-614 -167) translate(614 168) rotate(45 9 9.795)"/> + </g> + </g> + </g> +</svg> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" new file mode 100644 index 0000000..501b810 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/icons/ic-pin.svg" @@ -0,0 +1,7 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="25" height="25"><rect id="backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none"/> + +<g class="currentLayer" style=""><title>Layer 1</title><g fill="none" fill-rule="evenodd" id="svg_1" class=""> + <g fill="#FC0" id="svg_2"> + <path d="M-467.5,-1636.4549560546875 c4.694,0 8.5,3.806 8.5,8.5 c0,3.13 -2.833,7.6 -8.5,13.41 C-473.167,-1620.3549560546876 -476,-1624.8249560546874 -476,-1627.9549560546875 C-476,-1632.6489560546875 -472.194,-1636.4549560546875 -467.5,-1636.4549560546875 zm0,3.579 c-2.224,0 -4.026,1.803 -4.026,4.026 c0,2.224 1.802,4.027 4.026,4.027 c2.224,0 4.026,-1.803 4.026,-4.027 c0,-2.223 -1.802,-4.026 -4.026,-4.026 z" transform="translate(480,1638) " id="svg_3"/> + </g> + </g></g></svg> \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" new file mode 100644 index 0000000..118deb4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/style.css" @@ -0,0 +1,756 @@ +:root { + --border: #e3e1dc; + --max-width: 1100px; + --max-content-width: 1000px; + --body-background: #fcfcfc; + --site-header-background: rgba(255, 255, 255, 0.76); + --navbar: #2f2c28; + --site-footer: #bcb9b0; + --site-footer-background: #2f2c28; + --account-link: #ffcc00; + --content-list-contet-date: #bcb9b0; + --main-header-background: #fff; + --main-header-height: 565px; + --main-header-border: #f0efec; + --main-header: #fff; + --content-list-sub-heading: #7b776b; + --content-list-pagination-current: #fff; + --content-list-pagination-current-bg: #ffcc00; + --review-detail-date: #bcb9b0; + --review-detail-side-padding: 8px; + --profile-header-edit: #7b776b; + --file-content-border: #cccac3; + --file-content-background: #fff; +} + +/* site */ + +body { + display: flex; + min-height: 100vh; + flex-direction: column; + margin: 0; + background-color: var(--body-background); + word-break: keep-all; +} + +body > .site-body { + flex: 1 1; +} + +.site-header.only-logo { + margin: 18px auto; +} + +.site-header.navbar { + background-color: var(--site-header-background); + border-bottom: solid 1px var(--border); + position: sticky; + top: 0; + left: 0; + right: 0; + z-index: 2; +} + +.site-header .content, +.site-footer .content { + margin: 0 auto; + padding: 0 10px; +} + +.site-header .content { + display: flex; + height: 70px; + justify-content: space-between; + align-items: center; +} + +.site-header .logo { + width: 110px; +} + +ul.navbar { + display: flex; + margin: 0; + padding: 0; + list-style: none; +} + +ul.navbar li ~ li { + margin-left: 65px; +} + +ul.navbar li { + font-size: 17px; + letter-spacing: -0.26px; + color: var(--navbar); +} + +.site-body { + width: 100%; +} + +.site-footer { + color: var(--site-footer); + background-color: var(--site-footer-background); +} + +.site-footer .content { + display: flex; + justify-content: space-between; + align-items: center; + min-height: 95px; +} + +.max-width { + max-width: var(--max-width); + width: 100%; +} + +.max-content-width { + max-width: var(--max-content-width); + width: 100%; +} + +/* content-list */ + +.content-list { + margin: 72px auto 340px; +} + +.content-list .header { + display: flex; + justify-content: space-between; + align-items: center; + margin: 25px 10px 25px 25px; +} + +.content-list .header h2 { + font-size: 22px; + color: var(--content-list-sub-heading); + margin: 0; +} + +.content-list .contents { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 46px 40px; +} + +@media (max-width: 640px) { + .content-list .contents { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } +} + +.content-list .contents .empty { + margin: 120px auto; + font-weight: bold; + font-size: 20px; + grid-column: span 2; +} + +.content-list .contents > a:hover, +.content-list .contents > a:active { + text-decoration: none; +} + +.content-list .content { + min-width: auto; +} + +.content-list .content .thumb { + display: block; + height: 167px; + border-radius: 18px; + background-position: center; + background-size: cover; +} + +.content-list .content .body { + padding: 30px 25px; +} + +.content-list .content .title { + font-size: 22px; + font-weight: normal; + line-height: 33px; + letter-spacing: -0.33px; + margin: 11px 0 5px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.content-list .content a { + text-decoration: none; +} + +.content-list .content .date { + font-size: 14px; + letter-spacing: -0.21px; + color: var(--content-list-contet-date); +} + +.content-list .content .metadata { + margin-top: 48px; + display: flex; + justify-content: space-between; + align-items: center; +} + +.content-list .pagination { + display: flex; + justify-content: center; + margin: 40px 0; + padding: 0; + list-style: none; +} + +.content-list .pagination li ~ .content-list .pagination li { + margin-left: 5px; +} + +.content-list .pagination li { + min-width: 40px; + height: 40px; + line-height: 40px; + text-align: center; +} + +.content-list .pagination li.current { + border-radius: 9px; + background-color: var(--content-list-pagination-current-bg); + color: var(--content-list-pagination-current); +} + +.content-list .wrap-pagination { + display: flex; + align-items: center; +} + +.content-list .wrap-pagination .backbutton { + width: 220px; +} + +.content-list .wrap-pagination .backbutton:only-child { + margin-top: 40px; +} + +.content-list .wrap-pagination .backbutton ~ .pagination { + margin-right: 220px; + flex-grow: 1; +} + +/* main-header */ + +.main-header { + margin-top: -70px; + border-bottom: 1px solid var(--main-header-border); + background-color: var(--main-header-background); + position: relative; +} + +.main-header .content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + max-width: 1000px; + width: 100%; + margin: 0 auto; + background-size: contain; + background-repeat: no-repeat; + background-position: top; + background-image: url("../assets/main-bg.jpg"); +} + +.main-header .content > h1 { + margin: 220px 10px 437px; + text-shadow: 0 5px 5px rgba(0, 0, 0, 0.5); + font-size: 40px; + letter-spacing: 15.4px; + text-align: center; + word-break: keep-all; + color: var(--main-header); + position: relative; + z-index: 1; +} + +.main-header .fg { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 0; + background-repeat: no-repeat; + background-position: top; + background-size: 1749px; + background-image: url("../assets/main-fg.svg"); +} + +/* review-detail */ + +.review-detail { + margin: 80px auto 340px; +} + +.review-detail .review-info { + display: grid; + grid-template: repeat(3, auto) / repeat(3, auto); + grid-auto-flow: row; + justify-content: space-between; +} + +.review-detail .review-info > .restaurant-name { + grid-column: span 3; + margin: 0; +} + +.review-detail .review-info > .title, +.review-detail .review-info > .date { + margin-left: var(--review-detail-side-padding); +} + +.review-detail .review-info > .author, +.review-detail .review-info > .review-rating { + margin-right: var(--review-detail-side-padding); +} + +.review-detail .review-info > .title { + margin-top: 8px; + margin-bottom: 5px; + grid-column: span 2; + font-size: 22px; + font-weight: normal; +} + +.review-detail .review-info > .date { + grid-column: span 2; + font-size: 14px; + color: var(--review-detail-date); +} + +.review-detail .review-info > .author { + display: flex; + justify-content: flex-end; +} + +.review-detail .content { + margin: 45px 0 80px; +} + +.review-detail .content .thumb { + display: block; + width: 100%; + height: 100%; + object-fit: cover; + max-width: 1000px; + max-height: 645px; + margin: 0 auto; + border-radius: 18px; +} + +.review-detail .content .thumb:not(:last-child) { + margin-bottom: 30px; +} + +.review-detail .content .content { + margin: 30px var(--review-detail-side-padding) 28px; + line-height: 1.82; +} + +.review-detail .content .location { + display: inline-flex; + align-items: center; + margin: var(--review-detail-side-padding); + font-size: 18px; + font-weight: bold; +} + +.review-detail .content .location > img { + margin-right: 5px; +} + +.review-detail .footer { + display: flex; + justify-content: space-between; + align-items: center; + padding: 28px 0; + border-top: 1px solid var(--border); +} + +.review-detail .back-link { + font-size: 20px; +} + +.review-detail .footer .buttons > :not(:last-child) { + margin-right: 8px; +} + +/* review-form */ + +.review-form { + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 25px 14px; + margin: 85px auto 410px; +} + +.review-form > .title, +.review-form > .rating, +.review-form > .content, +.review-form > .file, +.review-form > .buttons { + grid-column: span 2; +} + +.review-form > .restaurant-name, +.review-form > .restaurant-link { + grid-column: span 1; +} + +.review-form > .rating label { + margin: 0; + display: inline-flex; + align-items: center; +} + +.review-form > .rating label > input { + margin: 0 5px 0 0; +} + +.review-form > .rating label:not(:first-child) { + margin-left: 14px; +} + +.review-form > .rating label:first-child { + margin-left: 5px; +} + +.review-form .content textarea { + height: 526px; + resize: none; +} + +.review-form .file-content { + display: flex; + align-items: center; + line-height: 2; + font-size: 17px; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--file-content-border); + background-color: var(--file-content-background); + border-radius: 7px; +} + +.review-form .file-content input { + font-size: 17px; +} + +.review-form .file-content > img { + width : 200px; + height: 150px; + object-fit: cover; + border-radius: 8px; + margin-right: 10px; +} + +.review-form .buttons { + display: flex; + max-width: 600px; + width: 100%; + margin: 0 auto; +} + +.review-form .buttons > .cancel { + flex-grow: 1; +} + +.review-form .buttons > button[type="submit"] { + flex-grow: 6; + margin-left: 9px; +} + +/* review-confirm-delete */ + +.review-confirm-delete { + display: flex; + align-items: center; + max-width: 740px; + width: 100%; + margin: 65px auto; +} + +.review-confirm-delete > :not(:last-child) { + margin-right: 15px; +} + +.review-confirm-delete .content { + flex-grow: 1; +} + +/* profile-header */ + +.profile-header { + padding: 46px 10px 60px; + border-bottom: 1px solid var(--main-header-border); + background-color: var(--main-header-background); + position: relative; +} + +.profile-header .content { + display: flex; + margin: 0 auto; + overflow: hidden; + align-items: center; +} + +.profile-header .content > :not(:last-child) { + margin-right: 24px; +} + +.profile-header .profile-pic { + flex-shrink: 0; +} + +.profile-header .info { + flex-grow: 1; + overflow: hidden; +} + +.profile-header .username { + font-size: 22px; + margin: 7px 0; +} + +.profile-header .edit { + display: inline-block; + font-size: 15px; + color: var(--profile-header-edit); + margin-bottom: 16px; +} + +.profile-header .intro { + margin: 0; + max-width: 100%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +/* account */ + +.account-background { + flex-grow: 1; +} +.account-background::before { + content: " "; + position: absolute; + left: 0; + top: 0; + right: 0; + bottom: 0; + z-index: -1; + background-image: url("../assets/main-fg.svg"); + background-repeat: no-repeat; + background-size: contain; + background-position: top; + opacity: 0.5; +} + +.account { + margin: 200px auto; + max-width: 450px; + width: 100%; +} + +.account .title { + margin: 24px auto; + text-align: center; +} + +.account .logo { + width: 200px; +} + +.account .form-error { + text-align: center; +} + +.account .info { + width: max-content; + margin: 25px auto; +} + +.account button[type="submit"] { + display: block; + width: 100%; + margin: 0; +} + +.account .info .item { + display: inline-block; + min-width: 140px; + padding: 0 21px; +} + +.account .info .item + .item { + border-left: 1px solid var(--border); +} + +.account .info .link { + margin-left: 13px; + color: var(--account-link); +} + +.account form { + display: flex; + flex-direction: column; +} + +.account form > :not(:last-child) { + margin-bottom: 20px; +} + +.account form .checkbox { + padding: 4px; + text-align: right; +} + +/* account-password */ + +.account-password { + margin: 100px auto; + padding: 68px 150px; + max-width: 740px; + width: 100%; +} + +.account-password .title { + margin: 24px auto; + text-align: center; +} + +.account-password .heading { + font-size: 25px; + font-weight: normal; +} + +.account-password form > :not(:last-child) { + margin-bottom: 20px; +} + +.account-password button[type="submit"] { + display: block; + width: 100%; + margin: 20px 0 25px; +} + +.account-password-dialog { + margin: 100px auto; + text-align: center; + width: 100%; +} + +.account-password-dialog .button { + margin-top: 5px; +} + +/* profile-form */ + +.profile-form { + margin: 100px auto; + max-width: 440px; + width: 100%; +} + +.profile-form .logo { + margin: auto; + width: 110px; +} + +.profile-form .welcome-message { + margin: 5px auto 30px; + text-align: center; + font-size: 24px; +} + +.profile-form form > :not(:last-child) { + margin-bottom: 20px; +} + +.profile-form .profile { + display: flex; + align-items: center; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--file-content-border); + background-color: var(--file-content-background); + border-radius: 7px; +} + +.profile-form .profile .profile-pic { + margin-right: 10px; + flex-shrink: 0; +} + +.profile-form .profile .file { + line-height: 2; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.profile-form .profile .file > input { + max-width: 240px; +} + +.profile-form .content > textarea { + height: 188px; + resize: none; +} + +.profile-form .buttons { + display: flex; + width: 100%; +} + +.profile-form .buttons > button[type="submit"] { + flex-grow: 4; +} + +.profile-form .buttons > .cancel { + flex-grow: 1; +} + +.profile-form .buttons > :not(:last-child) { + margin-right: 9px; +} + +/* review-author */ + +.review-author { + display: flex; + align-items: center; + font-size: 15px; +} + +.review-author > :not(:last-child) { + margin-right: 10px; +} + +/* review-rating */ + +.review-rating { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.review-rating .text { + margin-left: 8px; + font-size: 17px; +} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" new file mode 100644 index 0000000..42197b7 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/static/coplate/styles/theme.css" @@ -0,0 +1,339 @@ +@import url(//spoqa.github.io/spoqa-han-sans/css/SpoqaHanSansNeo.css); +* { + font-family: "Spoqa Han Sans Neo", sans-serif; +} + +:root { + --text: #2f2c28; + --link: #ffcc00; + --button-text: #fff; + --button-primary-background: #ffcc00; + --button-primary-hover-background: #ffe680; + --button-warn-background: #f9592c; + --button-secondary-background: #bcb9b0; + --ic-button-circle: #ffcc00; + --input-background: #fff; + --input-border: #cccac3; + --input-placeholder: #bcb9b0; + --input-focus-border: #ffcc00; + --input-focus-background: #fffdf3; + --input-error: #e6584e; + --input-error-border: #e6584e; + --chip-border: #e3e1dc; + --chip-text: #2f2c28; + --chip-green-background: #effaf9; + --chip-green-text: #79c9c5; + --chip-green-border: #06aea7; + --avatar-placeholder: #e3e1dc; + --stars: #ffcc00; + --dialog-border: #e3e1dc; + --dialog-background: #f6f5f3; + --dialog-info: #e1811b; + --box-border: #e3e1dc; +} + +* { + box-sizing: border-box; +} + +/* Texts */ + +body, +a, +a:hover { + color: var(--text); +} + +a { + text-decoration: none; +} + +a:hover, +a:focus { + text-decoration: underline; +} + +.cp-link { + color: var(--link); + font-weight: 500; +} + +/* Button */ + +a.cp-button { + display: inline-block; + text-decoration: none; + text-align: center; +} + +.cp-button { + border: none; + outline: none; + padding: 14px 28px; + border-radius: 9999px; + font-size: 19px; + font-weight: 400; + letter-spacing: -0.32px; + cursor: pointer; + background-color: var(--button-primary-background); + color: var(--button-text); +} + +.cp-button:hover, +.cp-button:active { + color: var(--button-text); + background-color: var(--button-primary-hover-background); + transition: background-color 0.2s ease, opacity 0.2s ease; +} + +.cp-button.secondary { + background-color: var(--button-secondary-background); +} + +.cp-button.warn { + background-color: var(--button-warn-background); +} + +.cp-button.secondary:hover, +.cp-button.secondary:active, +.cp-button.warn:hover, +.cp-button.warn:active { + opacity: 0.6; +} + +.cp-button.inverted { + padding: 5px 17px; + font-size: 17px; + font-weight: 300; + background-color: transparent; + color: #e1811b; + border: 1px solid #e1811b; +} + +/* Icon Button */ + +.cp-ic-button { + display: inline-flex; + outline: none; + border: none; + background: none; + align-items: center; +} + +.cp-ic-button:hover, +.cp-ic-button:active { + text-decoration: underline; + cursor: pointer; +} + +.cp-ic-button:not(.after)::before { + content: " "; + margin-right: 7px; + display: inline-block; + width: 18px; + height: 18px; + background-position: center; + background-size: 18px 18px; + background-repeat: no-repeat; +} + +.cp-ic-button.setting::before { + background-image: url("../icons/ic-setting.svg"); +} + +.cp-ic-button.newreview::before { + background-image: url("../icons/ic-newreview.svg"); +} + +.cp-ic-button.backbutton::before { + background-image: url("../icons/ic-morereview.svg"); + transform: scaleX(-1); +} + +.cp-ic-button.after::after { + content: " "; + margin-left: 7px; + display: inline-block; + width: 18px; + height: 18px; + background-position: center; + background-size: 18px 18px; + background-repeat: no-repeat; +} + +.cp-ic-button.after.morereview::after { + background-image: url("../icons/ic-morereview.svg"); +} + + +.cp-ic-button.circle { + font-size: 20px; + font-weight: bold; +} + +.cp-ic-button.circle::before, +.cp-ic-button.circle::after { + width: 34px; + height: 34px; + border-radius: 50%; + background-color: var(--ic-button-circle); +} + +/* Input */ + +div.cp-input { + display: inline-block; + position: relative; +} + +input.cp-input, +textarea.cp-input, +.cp-input input { + width: 100%; + font-size: 17px; + letter-spacing: -0.3px; + padding: 16px 24px; + border: 1px solid var(--input-border); + background-color: var(--input-background); + outline: none; + border-radius: 7px; +} + +input.cp-input:focus, +textarea.cp-input:focus, +.cp-input input:focus { + background-color: var(--input-focus-background); + border-color: var(--input-focus-border); + transition: background-color 0.2s ease, border-color 0.2s ease; +} + +input.cp-input:placeholder, +textarea.cp-input:placholder, +.cp-input input:placeholder { + color: var(--input-placeholder); +} + +textarea.cp-input { + line-height: 1.82; +} + +.cp-input.error { + padding-right: 46px; + border: 1px solid var(--input-error-border); + background-position: top 13px right 13px; + background-image: url("../icons/ic-error.svg"); + background-size: 29px; + background-repeat: no-repeat; +} + +.error-message { + color: var(--input-error); + font-size: 14px; + line-height: 1.7; +} + +.cp-input:not(.error) ~ .error-message { + display: none; +} + +.cp-input.error ~ .error-message { + display: block; + width: 100%; + text-align: right; +} + +/* Star rating */ + +.cp-stars { + color: var(--stars); + font-size: 21px; + line-height: 21px; +} + +/* Chip */ + +.cp-chip { + display: inline-block; + padding: 0 17px; + font-size: 15px; + line-height: 32px; + color: var(--chip-text); + border: 1px solid var(--chip-border); + border-radius: 9999px; +} + +.cp-chip.green { + padding: 0 13px; + line-height: 27px; + color: var(--chip-green-text); + background-color: var(--chip-green-background); + border-color: var(--chip-green-border); +} + +/* Avatar */ + +.cp-avatar { + display: inline-block; + width: 30px; + height: 30px; + border-radius: 50%; + background-color: var(--avatar-placeholder); + background-size: cover; + background-position: center; +} + +.cp-avatar.large { + width: 100px; + height: 100px; +} + +/* Card */ + +.cp-card { + border-radius: 21px; + box-shadow: 0 3px 16px 0 #f1ece2; + background-color: #ffffff; + will-change: box-shadow; +} + +/* Dialog */ + +.cp-dialog { + padding: 21px 55px 21px 40px; + font-size: 20px; + font-weight: 300; + letter-spacing: -0.35px; + border-radius: 6px; + border: solid 1px var(--dialog-border); + background-color: var(--dialog-background); +} + +.cp-dialog.info { + color: var(--dialog-info); + border-color: transparent; + background-color: transparent; +} + +/* Box */ + +.cp-box { + padding: 68px 145px; + border-radius: 6px; + border: solid 2px var(--box-border); +} + +/* Icon */ + +.cp-icon { + display: inline-block; + width: 25px; + height: 25px; + background-size: contain; + background-repeat: no-repeat; + background-position: center; +} + +.cp-icon.small { + width: 18px; + height: 18px; +} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" new file mode 100644 index 0000000..c2512a7 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_message.txt" @@ -0,0 +1,9 @@ +안녕하세요 {{ user }} 회원님, + +아래 링크를 통해 이메일을 인증을 완료해 주세요. + +{{ activate_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" new file mode 100644 index 0000000..8e2cce2 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_message.txt" @@ -0,0 +1,11 @@ +안녕하세요 {{ user }} 회원님, + +Coplate를 이용해 주셔서 감사합니다! + +정상적인 서비스 이용을 위해서는 이메일 인증이 필요합니다. 아래 링크를 통해 이메일을 인증해 주세요. + +{{ activate_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" new file mode 100644 index 0000000..2dd14f3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_signup_subject.txt" @@ -0,0 +1 @@ +Coplate 이메일 인증 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" new file mode 100644 index 0000000..2dd14f3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/email_confirmation_subject.txt" @@ -0,0 +1 @@ +Coplate 이메일 인증 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" new file mode 100644 index 0000000..e1b2be3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_message.txt" @@ -0,0 +1,9 @@ +안녕하세요 {{ user }} 회원님, + +아래 링크를 통해 계정의 비밀번호를 재설정하실 수 있습니다. + +{{ password_reset_url }} + +감사합니다. + +Coplate \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" new file mode 100644 index 0000000..0d161c0 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email/password_reset_key_subject.txt" @@ -0,0 +1 @@ +Coplate 비밀번호 재설정 \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" new file mode 100644 index 0000000..ed721fb --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_done.html" @@ -0,0 +1,12 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>이메일 인증이 완료되었습니다. 감사합니다.</p> + {% if user.is_authenticated %} + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> + {% else %} + <a class="cp-button inverted button" href="{% url 'account_login' %}">로그인 하기</a> + {% endif %} +</div> +{% endblock content %} \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" new file mode 100644 index 0000000..421aa32 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/email_confirmation_required.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>리뷰를 작성하려면 이메일 인증이 필요합니다. {{ user.email }}으로 발송된 이메일을 확인하시고 이메일 인증을 완료해 주세요.</p> + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/login.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/login.html" new file mode 100644 index 0000000..97c10b4 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/login.html" @@ -0,0 +1,43 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}로그인 | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="account"> + <div class="title"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + </div> + + <form method="post"> + {% csrf_token %} + {% for error in form.non_field_errors %} + <div class="form-error error-message">{{ error }}</div> + {% endfor %} + <div> + {{ form.login|add_class:"cp-input"|attr:"placeholder:이메일"|add_error_class:"error" }} + {% for error in form.login.errors %} + <div class="form-error error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password|add_class:"cp-input"|attr:"placeholder:비밀번호"|add_error_class:"error" }} + {% for error in form.password.errors %} + <div class="form-error error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">로그인</button> + </form> + + <div class="info"> + <a class="item" href="{% url 'account_reset_password' %}">비밀번호 찾기</a> + <a class="item" href="{% url 'account_signup' %}">회원가입</a> + </div> + </main> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/cannot_delete_primary_email.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/cannot_delete_primary_email.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmation_sent.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmation_sent.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmed.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_confirmed.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_deleted.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/email_deleted.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_in.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_in.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_out.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/logged_out.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/password_changed.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/password_changed.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/password_set.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/password_set.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/primary_email_set.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/primary_email_set.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/unverified_primary_email.txt" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/messages/unverified_primary_email.txt" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" new file mode 100644 index 0000000..ad8cb5a --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_change.html" @@ -0,0 +1,36 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 변경 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 변경</h1> + </div> + + <form method="post"> + {% csrf_token %} + <div> + {{ form.oldpassword|add_class:"cp-input"|attr:"placeholder:현재 비밀번호"|add_error_class:"error" }} + {% for error in form.oldpassword.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:새 비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:새 비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">완료</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" new file mode 100644 index 0000000..13a64bc --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset.html" @@ -0,0 +1,24 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 찾기 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 찾기</h1> + </div> + + <form method="post"> + {% csrf_token %} + <div> + {{ form.email|add_class:"cp-input"|attr:"placeholder:가입시 등록한 이메일을 입력해 주세요."|add_error_class:"error" }} + {% for error in form.email.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button account-button" type="submit">이메일 보내기</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" new file mode 100644 index 0000000..fac0a14 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_done.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>비밀번호 재설정 메일이 전송되었습니다. 이메일을 확인하시고 안내를 따라주세요.</p> + <a class="cp-button inverted button" href="{% url 'index' %}">홈으로 이동</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" new file mode 100644 index 0000000..4d4811b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key.html" @@ -0,0 +1,30 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}비밀번호 재설정 | Coplate{% endblock title %} + +{% block content %} +<main class="cp-box account-password"> + <div class="title"> + <h1 class="heading">비밀번호 재설정</h1> + </div> + + <form method="post"> + {% csrf_token %} + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:새 비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:새 비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">완료</button> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" new file mode 100644 index 0000000..390284b --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/password_reset_from_key_done.html" @@ -0,0 +1,8 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% block content %} +<div class="cp-dialog info account-password-dialog"> + <p>비밀번호가 재설정되었습니다.</p> + <a class="cp-button inverted button" href="{% url 'account_login' %}">로그인</a> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/signup.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/signup.html" new file mode 100644 index 0000000..441261a --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/account/signup.html" @@ -0,0 +1,51 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}회원가입 | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="account"> + <div class="title"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + </div> + + <form method="post"> + {% csrf_token %} + <div> + {{ form.email|add_class:"cp-input"|attr:"placeholder:이메일"|add_error_class:"error" }} + {% for error in form.email.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + {% comment %} <div> + {{ form.nickname|add_class:"cp-input"|attr:"placeholder:닉네임 (Coplate에서 사용되는 이름입니다)"|add_error_class:"error" }} + {% for error in form.nickname.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> {% endcomment %} + <div> + {{ form.password1|add_class:"cp-input"|attr:"placeholder:비밀번호"|add_error_class:"error" }} + {% for error in form.password1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div> + {{ form.password2|add_class:"cp-input"|attr:"placeholder:비밀번호 확인"|add_error_class:"error" }} + {% for error in form.password2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <button class="cp-button" type="submit">회원가입</button> + </form> + + <div class="info"> + 이미 회원이신가요?<a class="link" href="{% url 'account_login' %}">로그인</a> + </div> + </main> +</div> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" new file mode 100644 index 0000000..d87e550 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/index.html" @@ -0,0 +1,72 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% block content %} +<main class="site-body"> + <div class="main-header"> + <div class="content"> + <div class="fg"></div> + <h1>오늘은 어디서 먹을까?</h1> + </div> + </div> + + <div class="content-list max-content-width"> + <div class="header"> + <h2>리뷰 목록</h2> + <a class="cp-ic-button circle newreview" href="{% url 'review-create' %}">리뷰 작성</a> + </div> + + <div class="contents"> + {% for review in reviews %} + <a href="{% url 'review-detail' review.id %}"> + <section class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor%} + </span> + </div> + <div class="review-author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </section> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + + {% if is_paginated %} + <footer> + <ul class="pagination"> + {% if page_obj.has_previous %} + <li><a href="?page=1">처음</a></li> + <li><a href="?page={{ page_obj.previous_page_number }}">이전</a></li> + {% endif %} + + {% for num in page_obj.paginator.page_range %} + {% if page_obj.number == num %} + <li class="current">{{ num }}</li> + {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %} + <li><a href="?page={{ num }}">{{ num }}</a></li> + {% endif %} + {% endfor %} + + {% if page_obj.has_next %} + <li><a href="?page={{ page_obj.next_page_number }}">다음</a></li> + <li><a href="?page={{ page_obj.paginator.num_pages }}">마지막</a></li> + {% endif %} + </ul> + </footer> + {% endif %} + </article> + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" new file mode 100644 index 0000000..099c0f9 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile.html" @@ -0,0 +1,71 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load static %} + +{% block title %}{{ profile_user.nickname }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <div class="profile-header"> + <div class="content max-content-width"> + <div class="cp-avatar large profile-pic" style="background-image: url('{{ profile_user.profile_pic.url }}')"></div> + <div class="info"> + <h1 class="username">{{ profile_user.nickname }}</h1> + <a class="edit" href="{% url 'profile-update' %}"> + {% if profile_user == user %} + <img class="cp-icon small" src="{% static 'coplate/icons/ic-pen.svg' %}" alt="Pen Icon"> + 프로필 수정 + </a> + · + <a class="edit" href="{% url 'account_change_password' %}"> + 비밀번호 변경 + </a> + {% endif %} + {% if profile_user.intro %} + <div> + <p class="cp-chip intro">{{ profile_user.intro }}</p> + </div> + {% endif %} + </div> + </div> + </div> + + <div class="content-list max-content-width"> + <div class="header"> + <h2>{{ profile_user.nickname }}님의 최신 리뷰</h2> + {% if user_reviews %} + <a class="cp-ic-button after circle morereview" href="{% url 'user-review-list' profile_user.id %}"> + 리뷰 전체보기 + </a> + {% endif %} + </div> + <div class="contents"> + {% for review in user_reviews %} + <a href="{% url 'review-detail' review.id %}"> + <div class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="review-author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </div> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" new file mode 100644 index 0000000..f660145 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_set_form.html" @@ -0,0 +1,44 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} +{% load widget_tweaks %} + +{% block title %}환영합니다! | Coplate{% endblock title %} + +{% block content %} +<div class="account-background"> + <main class="profile-form"> + <div class="logo"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </div> + <p class="welcome-message"> + 환영합니다! <strong>프로필</strong>을 작성해주세요 + </p> + <form method="post" enctype="multipart/form-data" autocomplete="off"> + {% csrf_token %} + <div class="profile"> + <div class="profile-pic cp-avatar large" style="background-image: url('{{ user.profile_pic.url }}')"></div> + <div class="file"> + {{ form.profile_pic }} + </div> + </div> + <div class="nickname"> + {{ form.nickname|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:닉네임" }} + {% for error in form.nickname.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.intro|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:자신을 소개해 주세요!" }} + {% for error in form.intro.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="buttons"> + <button class="cp-button" type="submit">완료</button> + </div> + </form> + </main> +</div> +{% endblock content %} + \ No newline at end of file diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" new file mode 100644 index 0000000..74ff8a6 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/profile_update_form.html" @@ -0,0 +1,35 @@ +{% extends "coplate_base/base_with_header.html" %} + +{% load widget_tweaks %} + +{% block title %}프로필 수정 | Coplate{% endblock title %} + +{% block content %} +<main class="profile-form"> + <form method="post" enctype="multipart/form-data" autocomplete="off"> + {% csrf_token %} + <div class="profile"> + <div class="profile-pic cp-avatar large" style="background-image: url('{{ user.profile_pic.url }}')"></div> + <div class="file"> + {{ form.profile_pic }} + </div> + </div> + <div class="nickname"> + {{ form.nickname|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:닉네임" }} + {% for error in form.nickname.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.intro|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:자신을 소개해 주세요!" }} + {% for error in form.intro.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="buttons"> + <a class="cp-button secondary cancel" href="{% url 'profile' user.id %}">취소</a> + <button class="cp-button" type="submit">완료</button> + </div> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" new file mode 100644 index 0000000..42a1351 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_confirm_delete.html" @@ -0,0 +1,14 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% block title %}{{ review.title }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <form class="cp-dialog review-confirm-delete" method="post"> + {% csrf_token %} + <span class="content">정말 리뷰를 삭제하시겠습니까?</span> + <button class="cp-button warn" type="submit">삭제</button> + <a class="cp-button secondary" href="{% url 'review-detail' review.id %}">취소</a> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" new file mode 100644 index 0000000..7120b2d --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_detail.html" @@ -0,0 +1,57 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load static %} + +{% block title %}{{ review.title }} | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <article class="review-detail max-content-width"> + <div class="review-info"> + <div class="restaurant-name"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + </div> + <h1 class="title">{{ review.title }}</h1> + <div class="author"> + <a class="review-author" href="{% url 'profile' review.author.id %}"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </a> + </div> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %} + ★ + {% endfor %} + </span> + </div> + </div> + + <div class="content"> + <img class="thumb" src="{{ review.image1.url }}"> + {% if review.image2 %} + <img class="thumb" src="{{ review.image2.url }}"> + {% endif %} + {% if review.image3 %} + <img class="thumb" src="{{ review.image3.url }}"> + {% endif %} + <p class="content">{{ review.content|linebreaksbr }}</p> + <a class="location" target="_blank" href="{{ review.restaurant_link}}"> + <img class="cp-icon" src="{% static 'coplate/icons/ic-pin.svg' %}" alt="Pin Icon"> + <span>위치보기</span> + </a> + </div> + + <div class="footer"> + <a class="back-link" href="{% url 'index' %}">< 목록으로</a> + {% if review.author == user %} + <div class="buttons"> + <a class="cp-button warn" href="{% url 'review-delete' review.id %}">삭제</a> + <a class="cp-button secondary" href="{% url 'review-update' review.id %}">수정</a> + </div> + {% endif %} + </div> + </article> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" new file mode 100644 index 0000000..c24a193 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/review_form.html" @@ -0,0 +1,101 @@ +{% extends "coplate_base/base_with_navbar.html" %} + +{% load widget_tweaks %} + +{% block title %} + {% if review %} + {{ review.title }} + {% else %} + 새 포스트 작성 + {% endif %} | Coplate +{% endblock title %} + +{% block content %} +<main class="site-body"> + <form class="review-form max-content-width" method="post" autocomplete="off" enctype="multipart/form-data"> + {% csrf_token %} + <div class="title"> + {{ form.title|add_class:"cp-input"|attr:"placeholder:제목" }} + {% for error in form.title.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + {{ form.restaurant_name|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:음식점 이름" }} + {% for error in form.restaurant_name.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="restaurant-link"> + {{ form.restaurant_link|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:네이버 또는 카카오 플레이스 주소" }} + {% for error in form.restaurant_link.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="rating"> + <div class="cp-stars"> + {% for radio in form.rating %} + {{radio}} + {% endfor %} + </div> + {% for error in form.rating.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="content"> + {{ form.content|add_class:"cp-input"|add_error_class:"error"|attr:"placeholder:리뷰를 작성해 주세요." }} + {% for error in form.title.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + <div class="file"> + <div class="file-content"> + {% if review.image1 %} + <img src="{{ review.image1.url }}"> + {% endif %} + <div> + {{ form.image1 }} + {% for error in form.image1.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + <div class="file"> + <div class="file-content"> + {% if review.image2 %} + <img src="{{ review.image2.url }}"> + {% endif %} + <div> + {{form.image2}} + {% for error in form.image2.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + <div class="file"> + <div class="file-content"> + {% if review.image3 %} + <img src="{{ review.image3.url }}"> + {% endif %} + <div> + {{form.image3}} + {% for error in form.image3.errors %} + <div class="error-message">{{ error }}</div> + {% endfor %} + </div> + </div> + </div> + + <div class="buttons"> + <a + class="cp-button secondary cancel" + href="{% if review %}{% url 'review-detail' review.id %}{% else %}{% url 'index' %}{% endif %}" + > + 취소 + </a> + <button class="cp-button submit" type="submit">완료</button> + </div> + </form> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" new file mode 100644 index 0000000..c78e37a --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate/user_review_list.html" @@ -0,0 +1,67 @@ +{% extends "coplate_base/base_with_navbar.html" %} +{% load static %} + +{% block title %}{{ profile_user.nickname }}님의 리뷰 | Coplate{% endblock title %} + +{% block content %} +<main class="site-body"> + <div class="content-list max-content-width"> + <div class="header"> + <h2>{{ profile_user.nickname }}님의 리뷰 ({{ paginator.count }})</h2> + </div> + + <div class="contents"> + {% for review in user_reviews %} + <a href="{% url 'review-detail' review.id %}"> + <div class="cp-card content"> + <div class="thumb" style="background-image: url('{{ review.image1.url }}');"></div> + <div class="body"> + <span class="cp-chip green">{{ review.restaurant_name }}</span> + <h2 class="title">{{ review.title }}</h2> + <date class="date">{{ review.dt_created|date:"Y년 n월 j일" }}</date> + <div class="metadata"> + <div class="review-rating"> + <span class="cp-stars"> + {% for i in ""|ljust:review.rating %}★{% endfor %} + </span> + </div> + <div class="review-author"> + <div class="cp-avatar" style="background-image: url('{{ review.author.profile_pic.url }}')"></div> + <span>{{ review.author.nickname }}</span> + </div> + </div> + </div> + </div> + </a> + {% empty %} + <p class="empty">아직 리뷰가 없어요 :(</p> + {% endfor %} + </div> + + <div class="wrap-pagination"> + <a class="cp-ic-button circle backbutton" href="{% url 'profile' profile_user.id %}">프로필로 돌아가기</a> + {% if is_paginated %} + <ul class="pagination"> + {% if page_obj.has_previous %} + <li><a href="?page=1">처음</a></li> + <li><a href="?page={{ page_obj.previous_page_number }}">이전</a></li> + {% endif %} + + {% for num in page_obj.paginator.page_range %} + {% if page_obj.number == num %} + <li class="current">{{ num }}</li> + {% elif num > page_obj.number|add:'-3' and num < page_obj.number|add:'3' %} + <li><a href="?page={{ num }}">{{ num }}</a></li> + {% endif %} + {% endfor %} + + {% if page_obj.has_next %} + <li><a href="?page={{ page_obj.next_page_number }}">다음</a></li> + <li><a href="?page={{ page_obj.paginator.num_pages }}">마지막</a></li> + {% endif %} + </ul> + {% endif %} + </div> + </div> +</main> +{% endblock content %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" new file mode 100644 index 0000000..d875aa3 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base.html" @@ -0,0 +1,20 @@ +{% load static %} + +<!DOCTYPE html> +<html lang="en" dir="ltr"> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + + <link rel="stylesheet" type="text/css" href="{% static 'coplate/styles/style.css' %}"> + <link rel="stylesheet" type="text/css" href="{% static 'coplate/styles/theme.css' %}"> + <link rel="shortcut icon" type="image/png" href="{% static 'coplate/favicon/favicon.ico' %}"> + + <title>{% block title %}Coplate{% endblock title %}</title> + </head> + <body> + {% block header %}{% endblock header %} + {% block content %}{% endblock content %} + {% block footer %}{% endblock footer %} + </body> +</html> diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" new file mode 100644 index 0000000..d689334 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_header.html" @@ -0,0 +1,11 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} + +{% block header %} +<header class="site-header only-logo max-content-width"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> +</header> +{% endblock header %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" new file mode 100644 index 0000000..4ae9bd5 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/templates/coplate_base/base_with_navbar.html" @@ -0,0 +1,33 @@ +{% extends "coplate_base/base.html" %} + +{% load static %} + +{% block header %} +<header class="site-header navbar"> + <div class="content max-width"> + <a href="{% url 'index' %}"> + <img class="logo" src="{% static 'coplate/assets/coplate-logo.svg' %}" alt="Coplate Logo"> + </a> + <nav> + <ul class="navbar"> + {% if user.is_authenticated %} + <li><a href="{% url 'profile' user.id %}">내 프로필</a></li> + <li><a href="{% url 'account_logout' %}">로그아웃</a></li> + {% else %} + <li><a href="{% url 'account_login' %}">로그인</a></li> + <li><a href="{% url 'account_signup' %}">회원가입</a></li> + {% endif %} + </ul> + </nav> + </div> +</header> +{% endblock header %} + +{% block footer %} +<footer class="site-footer"> + <div class="max-content-width content"> + <div></div> + <div>COPLATE</div> + </div> +</footer> +{% endblock footer %} diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/tests.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/tests.py" new file mode 100644 index 0000000..7ce503c --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/tests.py" @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/urls.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/urls.py" new file mode 100644 index 0000000..a9193ba --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/urls.py" @@ -0,0 +1,32 @@ +from django.urls import path +from . import views + +urlpatterns = [ + # review urls + path("", views.IndexView.as_view(), name="index"), + path( + "reviews/<int:review_id>/", + views.ReviewDetailView.as_view(), + name="review-detail", + ), + path("reviews/new/", views.ReviewCreateView.as_view(), name="review-create"), + path( + "reviews/<int:review_id>/edit/", + views.ReviewUpdateView.as_view(), + name="review-update", + ), + path( + "reviews/<int:review_id>/delete/", + views.ReviewDeleteView.as_view(), + name="review-delete", + ), + # profile urls + path("users/<int:user_id>/", views.ProfileView.as_view(), name="profile"), + path( + "users/<int:user_id>/reviews/", + views.UserReviewListView.as_view(), + name="user-review-list", + ), + path("set-profile/", views.ProfileSetView.as_view(), name="profile-set"), + path("edit-profile/", views.ProfileUpdateView.as_view(), name="profile-update"), +] diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/validators.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/validators.py" new file mode 100644 index 0000000..30816e8 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/validators.py" @@ -0,0 +1,55 @@ +import string +from django.core.exceptions import ValidationError + + +def contains_special_character(value): + for char in value: + if char in string.punctuation: + return True + return False + + +def contains_uppercase_letter(value): + for char in value: + if char.isupper(): + return True + return False + + +def contains_lowercase_letter(value): + for char in value: + if char.islower(): + return True + return False + + +def contains_number(value): + for char in value: + if char.isdigit(): + return True + return False + + +class CustomPasswordValidator: + def validate(self, password, user=None): + if ( + len(password) < 8 + or not contains_uppercase_letter(password) + or not contains_lowercase_letter(password) + or not contains_number(password) + or not contains_special_character(password) + ): + raise ValidationError("8자 이상의 영문 대/소문자, 숫자, 특수문자 조합이어야 합니다.") + + def get_help_text(self): + return "8자 이상의 영문 대/소문자, 숫자, 특수문자 조합을 입력해 주세요." + + +def validate_no_special_characters(value): + if contains_special_character(value): + raise ValidationError("특수문자를 포함할 수 없습니다.") + + +def validate_rastaurant_link(value): + if "place.naver.com" not in value and "place.map.kakao.com" not in value: + raise ValidationError("place.naver.com 또는 place.map.kakao.com이 들어가야 합니다.") diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/views.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/views.py" new file mode 100644 index 0000000..e2809ae --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate/views.py" @@ -0,0 +1,140 @@ +from re import template +from django.shortcuts import render, get_object_or_404 +from django.urls import reverse +from django.views.generic import ( + ListView, + DetailView, + CreateView, + UpdateView, + DeleteView, +) +from braces.views import LoginRequiredMixin, UserPassesTestMixin +from allauth.account.models import EmailAddress +from allauth.account.views import PasswordChangeView +from coplate.models import Review, User +from coplate.forms import ReviewForm, ProfileForm +from coplate.functions import confirmation_required_redirect + +# Create your views here. +class IndexView(ListView): + model = Review + template_name = "coplate/index.html" + context_object_name = "reviews" + paginate_by = 4 + ordering = ["-dt_created"] + + +class ReviewDetailView(DetailView): + model = Review + template_name = "coplate/review_detail.html" + pk_url_kwarg = "review_id" + + +class ReviewCreateView(LoginRequiredMixin, UserPassesTestMixin, CreateView): + model = Review + form_class = ReviewForm + template_name = "coplate/review_form.html" + + redirect_unauthenticated_users = True + raise_exception = confirmation_required_redirect + + def form_valid(self, form): + form.instance.author = self.request.user + return super().form_valid(form) + + def get_success_url(self): + return reverse("review-detail", kwargs={"review_id": self.object.id}) + + def test_func(self, user): + return EmailAddress.objects.filter(user=user, verified=True).exists() + + +class ReviewUpdateView(LoginRequiredMixin, UserPassesTestMixin, UpdateView): + model = Review + form_class = ReviewForm + template_name = "coplate/review_form.html" + pk_url_kwarg = "review_id" + + raise_exception = True + + def get_success_url(self): + return reverse("review-detail", kwargs={"review_id": self.object.id}) + + def test_func(self, user): + review = self.get_object() + return review.author == user + + +class ReviewDeleteView(LoginRequiredMixin, UserPassesTestMixin, DeleteView): + model = Review + template_name = "coplate/review_confirm_delete.html" + pk_url_kwarg = "review_id" + + raise_exception = True + + def get_success_url(self): + return reverse("index") + + def test_func(self, user): + review = self.get_object() + return review.author == user + + +class ProfileView(DetailView): + model = User + template_name = "coplate/profile.html" + pk_url_kwarg = "user_id" + context_object_name = "profile_user" + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + user_id = self.kwargs.get("user_id") + context["user_reviews"] = Review.objects.filter(author__id=user_id).order_by( + "-dt_created" + )[:4] + return context + + +class UserReviewListView(ListView): + model = Review + template_name = "coplate/user_review_list.html" + context_object_name = "user_reviews" + paginate_by = 4 + + def get_queryset(self): + user_id = self.kwargs.get("user_id") + return Review.objects.filter(author__id=user_id).order_by("-dt_created") + + def get_context_data(self, **kwargs): + context = super().get_context_data(**kwargs) + context["profile_user"] = get_object_or_404(User, id=self.kwargs.get("user_id")) + return context + + +class ProfileSetView(LoginRequiredMixin, UpdateView): + model = User + form_class = ProfileForm + template_name = "coplate/profile_set_form.html" + + def get_object(self, queryset=None): + return self.request.user + + def get_success_url(self): + return reverse("index") + + +class ProfileUpdateView(LoginRequiredMixin, UpdateView): + model = User + form_class = ProfileForm + template_name = "coplate/profile_update_form.html" + + def get_object(self, queryset=None): + return self.request.user + + def get_success_url(self): + return reverse("profile", kwargs={"user_id": self.request.user.id}) + + +class CustomPasswordChangeView(LoginRequiredMixin, PasswordChangeView): + def get_success_url(self): + return reverse("profile", kwargs={"user_id": self.request.user.id}) diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/__init__.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/settings.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/settings.py" new file mode 100644 index 0000000..543c2d9 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/settings.py" @@ -0,0 +1,159 @@ +""" +Django settings for coplate_project project. + +Generated by 'django-admin startproject' using Django 2.2. + +For more information on this file, see +https://docs.djangoproject.com/en/2.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/2.2/ref/settings/ +""" + +import os + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = "x(fbek-yky2g#*wuuo--)&kifdj5w#r(^*o()_w&5qy3$(^2l#" + +# 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", + "django.contrib.sites", + "coplate", + "widget_tweaks", + "allauth", + "allauth.account", + "allauth.socialaccount", +] + +SITE_ID = 1 + +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", + "coplate.middleware.ProfileSetupMiddleware", +] + +ROOT_URLCONF = "coplate_project.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 = "coplate_project.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/2.2/ref/settings/#databases + +DATABASES = { + "default": { + "ENGINE": "django.db.backends.sqlite3", + "NAME": os.path.join(BASE_DIR, "db.sqlite3"), + } +} + + +# Password validation +# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "coplate.validators.CustomPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/2.2/topics/i18n/ + +LANGUAGE_CODE = "ko" + +TIME_ZONE = "UTC" + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/2.2/howto/static-files/ + +STATIC_URL = "/static/" +MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_URL = "/uploads/" + +# Auth settings + +AUTH_USER_MODEL = "coplate.User" + +AUTHENTICATION_BACKENDS = [ + # Needed to login by username in Django admin, regardless of `allauth` + "django.contrib.auth.backends.ModelBackend", + # `allauth` specific authentication methods, such as login by e-mail + "allauth.account.auth_backends.AuthenticationBackend", +] + +ACCOUNT_SIGNUP_REDIRECT_URL = "profile-set" +LOGIN_REDIRECT_URL = "index" +LOGIN_URL = "account_login" +ACCOUNT_LOGOUT_ON_GET = True +ACCOUNT_AUTHENTICATION_METHOD = "email" +ACCOUNT_EMAIL_REQUIRED = True +ACCOUNT_USERNAME_REQUIRED = False +# ACCOUNT_SIGNUP_FORM_CLASS = "coplate.forms.SignupForm" +ACCOUNT_SESSION_REMEMBER = True +ACCOUNT_PASSWORD_INPUT_RENDER_VALUE = True +ACCOUNT_CONFIRM_EMAIL_ON_GET = True +ACCOUNT_EMAIL_CONFIRMATION_AUTHENTICATED_REDIRECT_URL = ( + "account_email_confirmation_done" +) +ACCOUNT_EMAIL_CONFIRMATION_ANONYMOUS_REDIRECT_URL = "account_email_confirmation_done" +ACCOUNT_EMAIL_SUBJECT_PREFIX = "" + +# Email settings + +EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend" +EMAIL_HOST = "smtp.gmail.com" +EMAIL_POST = 587 +EMAIL_USE_TLS = True +EMAIL_HOST_USER = "<email.id>" +EMAIL_HOST_PASSWORD = "<password>" diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/urls.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/urls.py" new file mode 100644 index 0000000..b4a1d32 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/urls.py" @@ -0,0 +1,47 @@ +"""coplate_project URL Configuration + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/2.2/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 +from django.conf import settings +from django.conf.urls.static import static +from django.views.generic import TemplateView +from coplate.views import CustomPasswordChangeView + +urlpatterns = [ + # admin + path("admin/", admin.site.urls), + # coplate + path("", include("coplate.urls")), + # allauth + path( + "email-confirmation-required/", + TemplateView.as_view(template_name="account/email_confirmation_required.html"), + name="account_email_confirmation_required", + ), + path( + "email-confirmation-done/", + TemplateView.as_view(template_name="account/email_confirmation_done.html"), + name="account_email_confirmation_done", + ), + path( + "password/change/", + CustomPasswordChangeView.as_view(), + name="account_change_password", + ), + path("", include("allauth.urls")), +] + +urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/wsgi.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/wsgi.py" new file mode 100644 index 0000000..6f3a39f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/coplate_project/wsgi.py" @@ -0,0 +1,16 @@ +""" +WSGI config for coplate_project 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/2.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'coplate_project.settings') + +application = get_wsgi_application() diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/db.sqlite3" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/db.sqlite3" new file mode 100644 index 0000000..875292f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/db.sqlite3" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/manage.py" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/manage.py" new file mode 100644 index 0000000..c599836 --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/manage.py" @@ -0,0 +1,21 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'coplate_project.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() diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/default_profile_pic.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/default_profile_pic.jpg" new file mode 100644 index 0000000..9805553 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/default_profile_pic.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile.png" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile.png" new file mode 100644 index 0000000..17e8949 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile.png" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile_JMIBmlb.png" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile_JMIBmlb.png" new file mode 100644 index 0000000..17e8949 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/user_profile_JMIBmlb.png" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/woojae.jpeg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/woojae.jpeg" new file mode 100644 index 0000000..2693659 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/profile_pics/woojae.jpeg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger.png" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger.png" new file mode 100644 index 0000000..cc22f11 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger.png" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger_99IJR7N.png" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger_99IJR7N.png" new file mode 100644 index 0000000..cc22f11 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/burger_99IJR7N.png" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" new file mode 100644 index 0000000..3558aae Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza1.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" new file mode 100644 index 0000000..1c56721 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/pizza2.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" new file mode 100644 index 0000000..e74399f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1088058026.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" new file mode 100644 index 0000000..33f327a Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1145667110.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" new file mode 100644 index 0000000..8bead47 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1160816530.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" new file mode 100644 index 0000000..21c4f31 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_135625958.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" new file mode 100644 index 0000000..9ff77ec Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1561160462.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" new file mode 100644 index 0000000..1aca3f7 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1607007754.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" new file mode 100644 index 0000000..b5f2abd Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1689787342.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" new file mode 100644 index 0000000..7d5ea7f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1703328628.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" new file mode 100644 index 0000000..edd5c0f Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1711035298.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" new file mode 100644 index 0000000..8dc9f8e Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1828229984.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" new file mode 100644 index 0000000..483cdd2 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_1921203926.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" new file mode 100644 index 0000000..93659d6 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_308133647.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" new file mode 100644 index 0000000..4d07d2b Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_406893664.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" new file mode 100644 index 0000000..ba8bf27 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_754732342.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" new file mode 100644 index 0000000..daba5b0 Binary files /dev/null and "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/media/review_pics/shutterstock_758142004.jpg" differ diff --git "a/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/reviews.json" "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/reviews.json" new file mode 100644 index 0000000..eca231f --- /dev/null +++ "b/GalaxyDimension/Round2/Django \354\234\240\354\240\200 \352\270\260\353\212\245 \352\265\254\355\230\204\355\225\230\352\270\260/coplate_project/reviews.json" @@ -0,0 +1,172 @@ +[ +{ + "model": "coplate.review", + "pk": 2, + "fields": { + "title": "\ubca0\uc774\ucee8 \ubc84\uac70\uac00 \uc544\uc8fc \ub9db\uc788\uc5c8\ub358 \ucf54\uc2a4\ubc84\uac70", + "restaurant_name": "\ucf54\uc2a4\ubc84\uac70", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 5, + "image1": "review_pics/shutterstock_406893664.jpg", + "image2": "review_pics/shutterstock_308133647.jpg", + "image3": "", + "content": "\ub54c \ub0b4\uc77c \uc4f8\uc4f8\ud568\uacfc \uac70\uc678\ub2e4. \uba40\ub9ac \ucd94\uc5b5\uacfc \ud558\ub098 \ub458 \uac70\uc678\ub2e4. \uc18c\ub140\ub4e4\uc758 \ud558\ub298\uc5d0\ub294 \uc5b8\ub355 \uac83\uc740 \ubcc4\uc774 \uc774\ub7f0 \ubc8c\ub808\ub294 \ud759\uc73c\ub85c \ubb3b\ud78c \uc788\uc2b5\ub2c8\ub2e4. \uac00\uc744 \uae4c\ub2ed\uc774\uc694, \uc5b8\ub355 \ubb34\uc131\ud560 \ubd05\ub2c8\ub2e4. \uc544\ubb34 \ud558\ub298\uc5d0\ub294 \uc5c6\uc774 \uacc4\uc808\uc774 \ub54c \uc774\ub984\uacfc, \ub9b4\ucf00 \ubd05\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ubb34\ub364 \uc2dc\uc640 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ud558\ub098\uc5d0 \ubcc4 \ub458 \uc704\uc5d0\ub3c4 \ub098\ub294 \uc774\ub984\uc744 \ub77c\uc774\ub108 \ub0a8\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc18c\ud559\uad50 \uac15\uc544\uc9c0, \ubc8c\ub808\ub294 \uc5c6\uc774 \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8 \ub4ef\ud569\ub2c8\ub2e4. \ud53c\uc5b4\ub098\ub4ef\uc774 \uba40\ub9ac \ubb34\uc131\ud560 \uc2dc\uc640 \ubc8c\ub808\ub294 \uc5b4\uba38\ub2d8, \uadf8\ub9ac\uace0 \uc2ac\ud37c\ud558\ub294 \uacc4\uc808\uc774 \ubd05\ub2c8\ub2e4. \uc18d\uc758 \ud328, \ud480\uc774 \uc625 \ubcc4 \uc774\ub984\uacfc, \uc544\uce68\uc774 \uc774\ub7f0 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ubb34\uc5c7\uc778\uc9c0 \ud30c\ub780 \ub098\uc758 \uc18c\ub140\ub4e4\uc758 \ubcc4 \uc704\uc5d0\ub3c4 \ub4ef\ud569\ub2c8\ub2e4. \ub098\ub294 \uc18c\ud559\uad50 \ubcc4 \uacc4\uc2ed\ub2c8\ub2e4. \ubcc4 \uacc4\uc808\uc774 \uc5c6\uc774 \ubd81\uac04\ub3c4\uc5d0 \uc6b0\ub294 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ucc45\uc0c1\uc744 \uba40\ub9ac \uc5b4\uba38\ub2c8, \ubcc4 \uc624\ub294 \uc6b0\ub294 \ubcc4 \uac70\uc678\ub2e4. \uc2dc\uc640 \ubd88\ub7ec \ub178\uc0c8, \ubb34\uc131\ud560 \uac70\uc678\ub2e4. \uc368 \ub9c8\ub9ac\uc544 \uc544\ubb34 \ud5e4\uc77c \uc774\ub984\uacfc, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud5e4\uc77c \ub41c \uac00\ub4dd \uc625 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ubd88\ub7ec \uc774\uad6d \uc18c\ub140\ub4e4\uc758 \uac00\ub4dd \ub108\ubb34\ub098 \uae4c\ub2ed\uc774\uc694, \ud558\ub098 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud53c\uc5b4\ub098\ub4ef\uc774 \ub458 \ubcc4 \uba40\ub9ac \ud558\ub098\uc758 \uc774\ub984\uacfc, \ubd05\ub2c8\ub2e4. \ub108\ubb34\ub098 \ud480\uc774 \ud328, \ubb34\ub364 \ub178\ub8e8, \ud558\ub098\uc5d0 \uc774\ub984\uc790\ub97c \ubb34\uc131\ud560 \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud759\uc73c\ub85c \ubb34\uc5c7\uc778\uc9c0 \uc6b0\ub294 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc0ac\ub78c\ub4e4\uc758 \uc2dc\uc778\uc758 \uc774\ub7f0 \ub54c \ud558\ub098\uc5d0 \ubcc4 \uc774\uc6c3 \uc774\ub984\uacfc \ub2e4 \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uc774\ub984\uacfc \ubb3b\ud78c \ubcc4\uc774 \ub9c8\ub9ac\uc544 \uc704\uc5d0\ub3c4 \ud55c \uc560\uae30 \uc18c\ud559\uad50 \uc788\uc2b5\ub2c8\ub2e4. \uc7a0, \uadf8\ub7ec\ub098 \ubc24\uc744 \ubb34\ub364 \uc788\uc2b5\ub2c8\ub2e4. \uc2ac\ud37c\ud558\ub294 \ud1a0\ub07c, \ubcc4\uc774 \ubcc4 \uc0c8\uc6cc \ub4ef\ud569\ub2c8\ub2e4. \uc774\uc6c3 \ubcc4 \uc5b4\uba38\ub2c8, \uc54a\uc740 \ubc24\uc744 \uc624\uba74 \ub9ce\uc740 \ud328, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc18c\ud559\uad50 \ud558\ub098\uc5d0 \ud55c \uc0ac\ub78c\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \ub458 \ub41c \uc788\uc2b5\ub2c8\ub2e4. \uc54a\uc740 \uc774\uc6c3 \ubcc4 \uacc4\uc2ed\ub2c8\ub2e4. \ub0b4 \ud504\ub791\uc2dc\uc2a4 \uc2dc\uc778\uc758 \uac00\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ud5e4\uc77c \uc624\uba74 \ud480\uc774 \uc774\ub984\uc790\ub97c \ud558\ub098\uc5d0 \uc5b8\ub355 \uccad\ucd98\uc774 \ub178\uc0c8, \ub4ef\ud569\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc774 \ud5e4\uc77c \uc0ac\ub78c\ub4e4\uc758 \uc54a\uc740 \uc788\uc2b5\ub2c8\ub2e4.", + "dt_created": "2021-04-12T08:43:40Z", + "dt_updated": "2021-04-13T10:15:29.536Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 3, + "fields": { + "title": "\uce74\ub808 \ub9db\uc9d1 \ucf54\uce58\ubc18 \uc18c\uac1c", + "restaurant_name": "\ucf54\uce58\ubc18", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 5, + "image1": "review_pics/shutterstock_1828229984.jpg", + "image2": "review_pics/shutterstock_1561160462.jpg", + "image3": "", + "content": "\ubd81\uac04\ub3c4\uc5d0 \ubcc4 \uadf8\ub7ec\ub098 \ubd88\ub7ec \ucd94\uc5b5\uacfc \uac70\uc678\ub2e4. \uc2dc\uc778\uc758 \ubcc4 \ud558\ub098\uc5d0 \uc18c\ud559\uad50 \uc774\ub984\uacfc, \ucc45\uc0c1\uc744 \ubcc4\ub4e4\uc744 \ub9c8\ub514\uc529 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubb3b\ud78c \uc0c8\uc6cc \ud558\ub098\uc5d0 \ubd88\ub7ec \ub178\uc0c8, \ubc8c\ub808\ub294 \ub77c\uc774\ub108 \ub108\ubb34\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc774 \ubcc4 \ub534\uc740 \ub098\uc758 \uc774\ub984\uacfc \ubcc4\uc744 \uc704\uc5d0 \uc7a0, \ub9d0 \uc788\uc2b5\ub2c8\ub2e4. \uacbd, \uac00\uc2b4\uc18d\uc5d0 \ub2e4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uba40\ub4ef\uc774, \ud558\ub098\uc5d0 \ubd81\uac04\ub3c4\uc5d0 \uba40\ub9ac \ubd05\ub2c8\ub2e4. \ubcc4 \uadf8\ub9ac\uc6cc \uc704\uc5d0 \uacc4\uc2ed\ub2c8\ub2e4. \uc704\uc5d0 \ubcc4 \uc774\ub984\uc790 \uac83\uc740 \uc544\uc9c1 \uae4c\ub2ed\uc774\uc694, \uc774\ub7f0 \ub4ef\ud569\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \ubb34\uc5c7\uc778\uc9c0 \uac83\uc740 \uadf8\ub7ec\ub098 \ubcf4\uace0, \uacc4\uc9d1\uc560\ub4e4\uc758 \uc0ac\ub791\uacfc \uc26c\uc774 \uc5c6\uc774 \ub4ef\ud569\ub2c8\ub2e4. \uc794\ub514\uac00 \ud588\ub358 \ucc28 \ubc8c\uc368 \uac83\uc740 \uac70\uc678\ub2e4. \ubcc4 \ubc24\uc744 \uc774\ub7f0 \ub9d0 \ubcc4\ub4e4\uc744 \ubc8c\uc368 \uac00\uc2b4\uc18d\uc5d0 \uac00\ub09c\ud55c \uac70\uc678\ub2e4.\r\n\r\n\ud30c\ub780 \ub77c\uc774\ub108 \uc774\uad6d \uac15\uc544\uc9c0, \uc774 \ub3d9\uacbd\uacfc \ud1a0\ub07c, \uc18c\ud559\uad50 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ucc45\uc0c1\uc744 \ub2e4 \uc774\ub124\ub4e4\uc740 \ub9d0 \ud328, \uc5b8\ub355 \uba40\ub4ef\uc774, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub458 \uc0c8\uaca8\uc9c0\ub294 \uac83\uc740 \uae4c\ub2ed\uc774\uc694, \uc5b8\ub355 \uaca8\uc6b8\uc774 \ud30c\ub780 \uc0ac\ub78c\ub4e4\uc758 \uc0ac\ub791\uacfc \uac70\uc678\ub2e4. \uac00\uc744 \uc5b8\ub355 \ubcc4 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ub458 \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8 \ubcc4 \uac70\uc678\ub2e4. \ucc45\uc0c1\uc744 \ub2e4\ud558\uc9c0 \uc2dc\uc640 \uc794\ub514\uac00 \ubcc4 \ubcc4 \ub4ef\ud569\ub2c8\ub2e4. \uc5b8\ub355 \ub178\ub8e8, \ud588\ub358 \ubcc4 \uc774\ub984\uacfc \ucc28 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcf4\uace0, \uac19\uc774 \uc625 \ub178\uc0c8, \ubc24\uc774 \ud1a0\ub07c, \ub2e4 \uc5b4\uba38\ub2c8, \ud558\ub098\uc5d0 \ubd05\ub2c8\ub2e4. \ud558\ub298\uc5d0\ub294 \ub36e\uc5b4 \uc5b4\uba38\ub2d8, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uac00\ub09c\ud55c \uc774\ub984\uc744 \uae4c\ub2ed\uc774\uc694, \ub2f9\uc2e0\uc740 \uc624\ub294 \uac83\uc740 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uce68\uc774 \uc774\uad6d \uba40\ub9ac \uc5b4\uba38\ub2d8, \uc774\ub984\uacfc \ucd94\uc5b5\uacfc \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\uc5b4\uba38\ub2d8, \ud558\ub098 \uc774\ub984\uacfc, \ubd04\uc774 \uacbd, \ubd05\ub2c8\ub2e4. \uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uac00\ub4dd \uccad\ucd98\uc774 \uc774\ub984\uc744 \uc2ac\ud37c\ud558\ub294 \ubd05\ub2c8\ub2e4. \uc774\ub984\uacfc \ubcf4\uace0, \ud558\ub098\uc5d0 \ubb34\uc5c7\uc778\uc9c0 \ud5e4\ub294 \ub458 \uc788\uc2b5\ub2c8\ub2e4. \uac00\ub4dd \uc5b4\uba38\ub2d8, \ub2e4\ud558\uc9c0 \ud504\ub791\uc2dc\uc2a4 \uc5b8\ub355 \uac19\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uaca8\uc6b8\uc774 \ud558\ub098\uc5d0 \ud55c \uc774\ub984\uc790 \ubcc4\uc774 \uc0ac\ub791\uacfc \ubcc4 \ub4ef\ud569\ub2c8\ub2e4. \uc18c\ud559\uad50 \ubcc4\ub4e4\uc744 \uaca8\uc6b8\uc774 \ub9c8\ub9ac\uc544 \uc2dc\uc640 \ubd88\ub7ec \uadf8\ub9ac\uace0 \uc788\uc2b5\ub2c8\ub2e4. \ubd80\ub044\ub7ec\uc6b4 \ub0b4 \ucd94\uc5b5\uacfc \uc6b0\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \uc544\uc2a4\ub77c\ud788 \uc544\ub984\ub2e4\uc6b4 \ubb34\uc5c7\uc778\uc9c0 \uc0c8\uc6cc \uac00\uc2b4\uc18d\uc5d0 \ub77c\uc774\ub108 \uac70\uc678\ub2e4. \uc54a\uc740 \uba40\ub9ac \uc704\uc5d0 \uc704\uc5d0 \ubb34\uc131\ud560 \ud558\ub098 \uc774 \uc6b0\ub294 \ubcc4 \ubd05\ub2c8\ub2e4.", + "dt_created": "2021-04-13T08:46:34Z", + "dt_updated": "2021-04-13T08:50:08.813Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 4, + "fields": { + "title": "\ucd08\ubc25\uc774 \ub561\uae38 \ub54c \uac08\ub9cc\ud55c \uacf3", + "restaurant_name": "\ucf54\ub374\uc2a4\uc2dc", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 3, + "image1": "review_pics/shutterstock_758142004.jpg", + "image2": "", + "image3": "", + "content": "\ud558\ub098\uc5d0 \ubcc4\ub4e4\uc744 \uc774\ub984\uc744 \uc0ac\ub791\uacfc \uacc4\uc808\uc774 \uac00\ub4dd \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \uc9c0\ub098\uace0 \ud558\ub298\uc5d0\ub294 \ub458 \uc774\ub984\uacfc, \uc624\uba74 \uc544\uc9c1 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubc8c\uc368 \ubc24\uc774 \uc774\ub124\ub4e4\uc740 \ud558\ub098\uc5d0 \ub178\ub8e8, \ub2e4 \ub098\uc758 \uba40\ub9ac \uc790\ub791\ucc98\ub7fc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \ud5e4\ub294 \ubcc4\uc744 \ud30c\ub780 \ubcc4 \ud558\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc704\uc5d0 \uc544\ubb34 \ub458 \ubcc4 \ud558\ub098\uc5d0 \uc544\uc2a4\ub77c\ud788 \uacbd, \uc774\ub984\uacfc, \uacc4\uc2ed\ub2c8\ub2e4. \uac00\ub4dd \ubcc4 \uc774\ub984\uacfc, \uc0ac\ub78c\ub4e4\uc758 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ubcc4\uc744 \uacbd, \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uc4f8\uc4f8\ud568\uacfc \uc0ac\ub78c\ub4e4\uc758 \ud480\uc774 \uac00\uc744 \ubb34\uc5c7\uc778\uc9c0 \uc9c0\ub098\uace0 \uc26c\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \ub098\uc758 \uc774\ub984\uc744 \ud5e4\ub294 \uc18d\uc758 \ud504\ub791\uc2dc\uc2a4 \uac00\ub4dd \uadf8\ub9ac\uace0 \ubcc4\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud328, \uc774\ub124\ub4e4\uc740 \uc18d\uc758 \uac83\uc740 \ub0b4 \ud558\ub098\uc5d0 \uc7a0, \ub0b4\ub9b0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ud55c \uc4f8\uc4f8\ud568\uacfc \ud558\ub098\uc758 \ub098\uc758 \ubb3b\ud78c \ud558\ub098\uc5d0 \uc774\ub984\uc744 \uc704\uc5d0\ub3c4 \uc26c\uc774 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ubd04\uc774 \uba40\ub9ac \ube44\ub458\uae30, \ub098\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ub0a8\uc740 \uacbd, \ubb34\ub364 \uac71\uc815\ub3c4 \uc2dc\uc640 \ub9b4\ucf00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub3d9\uacbd\uacfc \ub9ce\uc740 \uc544\uc2a4\ub77c\ud788 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uae4c\ub2ed\uc774\uc694, \uacc4\uc9d1\uc560\ub4e4\uc758 \uacbd, \uc7a0, \uc18d\uc758 \ud558\ub098\uc5d0 \uc624\uba74 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub178\ub8e8, \ubd88\ub7ec \uac00\uc2b4\uc18d\uc5d0 \uc4f8\uc4f8\ud568\uacfc \uc774\ub7f0 \uc544\ub984\ub2e4\uc6b4 \ub4ef\ud569\ub2c8\ub2e4. \ub9d0 \uc5b4\uba38\ub2d8, \uc704\uc5d0 \uba40\ub9ac \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uac19\uc774 \uc5b4\uba38\ub2c8 \ubc8c\ub808\ub294 \uc704\uc5d0 \ubd05\ub2c8\ub2e4. \uc0c8\uaca8\uc9c0\ub294 \uc18c\ud559\uad50 \uba40\ub4ef\uc774, \uc26c\uc774 \ub41c \uadf8\ub7ec\ub098 \uc5b8\ub355 \ubc8c\uc368 \uc5b4\uba38\ub2c8, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ud5e4\uc77c \uc774\uad6d \ubcf4\uace0, \ub098\ub294 \uc5b4\uba38\ub2d8, \ub534\uc740 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubabb \uc788\uc2b5\ub2c8\ub2e4. \uc790\ub791\ucc98\ub7fc \uc5b4\uba38\ub2c8, \ubd88\ub7ec \uc26c\uc774 \ubcc4 \ubc24\uc744 \uba40\ub9ac \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n\uae4c\ub2ed\uc774\uc694, \ub098\ub294 \ub178\ub8e8, \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ubd88\ub7ec \uc5c6\uc774 \ub098\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uac19\uc774 \ubcc4\ub4e4\uc744 \uc624\ub294 \uc5b4\uba38\ub2d8, \uc790\ub791\ucc98\ub7fc \uc6b0\ub294 \ubd05\ub2c8\ub2e4. \uc18c\ud559\uad50 \uc774\ub124\ub4e4\uc740 \ubd88\ub7ec \ud53c\uc5b4\ub098\ub4ef\uc774 \uc544\uce68\uc774 \uac70\uc678\ub2e4. \ubd81\uac04\ub3c4\uc5d0 \uac00\ub4dd \uc624\uba74 \uc774\ub984\uc744 \ucc28 \uae4c\ub2ed\uc774\uc694, \uc625 \uc704\uc5d0 \ubd05\ub2c8\ub2e4. \uc624\ub294 \ubc8c\ub808\ub294 \uc774\ub124\ub4e4\uc740 \uc0ac\ub791\uacfc \ubb34\uc5c7\uc778\uc9c0 \uc774\ub984\uc790 \ubd04\uc774 \uac83\uc740 \uc774\ub7f0 \uac70\uc678\ub2e4. \uc5b8\ub355 \uc4f8\uc4f8\ud568\uacfc \uc774\ub984\uacfc, \uac00\uc744 \ub2f9\uc2e0\uc740 \ubd80\ub044\ub7ec\uc6b4 \uacc4\uc2ed\ub2c8\ub2e4. \ubcc4\uc744 \uc774\ub124\ub4e4\uc740 \ubd04\uc774 \ub9c8\ub514\uc529 \ubb3b\ud78c \ub9d0 \ub178\ub8e8, \ubd88\ub7ec \ubd05\ub2c8\ub2e4. \ubd88\ub7ec \ud558\ub098\uc5d0 \uac00\ub09c\ud55c \ubcc4 \ubcc4\uc774 \ub77c\uc774\ub108 \uae4c\ub2ed\uc785\ub2c8\ub2e4.", + "dt_created": "2021-03-26T08:51:04Z", + "dt_updated": "2021-04-13T12:05:57.839Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 5, + "fields": { + "title": "\uba39\uc5b4\ubcf8 \ucc1c\ub2ed \uc911 \ucd5c\uc545\uc774\uc5c8\uc5b4\uc694", + "restaurant_name": "\ucf54\ub529\ucc1c\ub2ed", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 1, + "image1": "review_pics/shutterstock_1088058026.jpg", + "image2": "", + "image3": "", + "content": "\uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uc5b4\uba38\ub2c8, \ubd05\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \uc774\ub984\uc790 \uc774\ub984\uacfc, \ud558\ub098 \ud328, \ub9b4\ucf00 \ub098\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4\ub9b0 \uac00\ub09c\ud55c \ud759\uc73c\ub85c \ud5e4\ub294 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \ub9c8\ub514\uc529 \ub9d0 \uba40\ub9ac \ubcc4\uc744 \uac00\ub09c\ud55c \ubc24\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uacbd, \ubcc4\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \uac71\uc815\ub3c4 \ub2e4 \uc544\uce68\uc774 \ub098\uc758 \ud504\ub791\uc2dc\uc2a4 \ubc24\uc774 \ub0a8\uc740 \uacbd, \uc544\uc2a4\ub77c\ud788 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ub9b4\ucf00 \ubc24\uc774 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uc544\ubb34 \uc794\ub514\uac00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9d0 \uae4c\ub2ed\uc774\uc694, \uc774\ub984\uc790\ub97c \ub9ce\uc740 \uac70\uc678\ub2e4. \ub458 \uc5b4\uba38\ub2d8, \ub54c \uc0c8\uc6cc \uadf8\ub7ec\ub098 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc744 \ubcc4 \uc5b8\ub355 \uc544\uc774\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \uac00\ub09c\ud55c \uc774\ub984\uc790 \ubd05\ub2c8\ub2e4. \ub0b4\uc77c \ub098\ub294 \ube44\ub458\uae30, \uc774\ub984\uc790\ub97c \uc625 \ub2f9\uc2e0\uc740 \ud1a0\ub07c, \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ud558\ub098\uc5d0 \uc5b4\uba38\ub2d8, \ud1a0\ub07c, \uac00\ub09c\ud55c \ubd88\ub7ec \ubd81\uac04\ub3c4\uc5d0 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ubcc4 \uc2ac\ud37c\ud558\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc625 \uc0c8\uc6cc \ub9ce\uc740 \uc774\ub124\ub4e4\uc740 \ub534\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc5d0 \ud5e4\uc77c \uc774\ub984\uc744 \ubb3b\ud78c \uc624\uba74 \ubb34\uc131\ud560 \ud480\uc774 \uc5b8\ub355 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\uc774\ub4e4\uc758 \uc774\uc81c \uccad\ucd98\uc774 \uc624\uba74 \uba40\ub9ac \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ub458 \uc544\uc774\ub4e4\uc758 \ud5e4\uc77c \uc2ac\ud37c\ud558\ub294 \ub534\uc740 \ub3d9\uacbd\uacfc \uac15\uc544\uc9c0, \uc624\ub294 \uaca8\uc6b8\uc774 \uac70\uc678\ub2e4. \ub0a8\uc740 \ubd80\ub044\ub7ec\uc6b4 \ubd88\ub7ec \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8, \ubcc4\uc744 \ub098\uc758 \uac70\uc678\ub2e4. \uadf8\ub9ac\uace0 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubcc4 \ubd88\ub7ec \uba40\ub9ac \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uac00\ub09c\ud55c \uac00\uc744 \ub2f9\uc2e0\uc740 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\uc5c7\uc778\uc9c0 \uc774\ub7f0 \ubabb \ub0b4\ub9b0 \uadf8\ub7ec\ub098 \ubcc4\ube5b\uc774 \uc774\ub984\uc744 \uc774\ub984\uc744 \ud328, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud558\ub298\uc5d0\ub294 \uc544\uc2a4\ub77c\ud788 \uc774\ub124\ub4e4\uc740 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc794\ub514\uac00 \uac00\ub4dd \ubc8c\uc368 \uacc4\uc2ed\ub2c8\ub2e4.\r\n\r\n\uaca8\uc6b8\uc774 \uc2ac\ud37c\ud558\ub294 \uc9c0\ub098\uace0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc744 \uc4f8\uc4f8\ud568\uacfc \ubd05\ub2c8\ub2e4. \uba40\ub4ef\uc774, \uc2dc\uc640 \uc26c\uc774 \uc774\uc81c \ubd05\ub2c8\ub2e4. \uc624\uba74 \uc2dc\uc778\uc758 \uc774\uc81c \uaca8\uc6b8\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub0b4\ub9b0 \uc774\ub984\uacfc, \uac00\uc744\ub85c \uc774\ub984\uacfc, \uc7a0, \uc544\uc9c1 \uc774\ub124\ub4e4\uc740 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \ub098\ub294 \uadf8\ub9ac\uace0 \uac83\uc740 \uc544\uc774\ub4e4\uc758 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc544\uc774\ub4e4\uc758 \uac71\uc815\ub3c4 \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \ub178\ub8e8, \uac19\uc774 \ubd04\uc774 \uadf8\ub7ec\ub098 \ub0a8\uc740 \ub0b4\uc77c \ub0b4 \uc788\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ub178\ub8e8, \ubb34\ub364 \uc794\ub514\uac00 \uccad\ucd98\uc774 \uc5b4\uba38\ub2c8, \uc774 \ubcc4 \uc788\uc2b5\ub2c8\ub2e4.", + "dt_created": "2021-04-10T08:54:26Z", + "dt_updated": "2021-04-13T08:54:30.890Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 6, + "fields": { + "title": "\uac00\uc131\ube44 \uad1c\ucc2e\uc740 \uce58\ud0a8\uc9d1", + "restaurant_name": "CFC", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 3, + "image1": "review_pics/shutterstock_1145667110.jpg", + "image2": "", + "image3": "", + "content": "\uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uc5b4\uba38\ub2c8, \ubd05\ub2c8\ub2e4. \ucc45\uc0c1\uc744 \uc774\ub984\uc790 \uc774\ub984\uacfc, \ud558\ub098 \ud328, \ub9b4\ucf00 \ub098\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4\ub9b0 \uac00\ub09c\ud55c \ud759\uc73c\ub85c \ud5e4\ub294 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \ub9c8\ub514\uc529 \ub9d0 \uba40\ub9ac \ubcc4\uc744 \uac00\ub09c\ud55c \ubc24\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uacbd, \ubcc4\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \uac71\uc815\ub3c4 \ub2e4 \uc544\uce68\uc774 \ub098\uc758 \ud504\ub791\uc2dc\uc2a4 \ubc24\uc774 \ub0a8\uc740 \uacbd, \uc544\uc2a4\ub77c\ud788 \uc788\uc2b5\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ub9b4\ucf00 \ubc24\uc774 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uc544\ubb34 \uc794\ub514\uac00 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9d0 \uae4c\ub2ed\uc774\uc694, \uc774\ub984\uc790\ub97c \ub9ce\uc740 \uac70\uc678\ub2e4. \ub458 \uc5b4\uba38\ub2d8, \ub54c \uc0c8\uc6cc \uadf8\ub7ec\ub098 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc744 \ubcc4 \uc5b8\ub355 \uc544\uc774\ub4e4\uc758 \ubcc4\uc5d0\ub3c4 \uac00\ub09c\ud55c \uc774\ub984\uc790 \ubd05\ub2c8\ub2e4. \ub0b4\uc77c \ub098\ub294 \ube44\ub458\uae30, \uc774\ub984\uc790\ub97c \uc625 \ub2f9\uc2e0\uc740 \ud1a0\ub07c, \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ud558\ub098\uc5d0 \uc5b4\uba38\ub2d8, \ud1a0\ub07c, \uac00\ub09c\ud55c \ubd88\ub7ec \ubd81\uac04\ub3c4\uc5d0 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ubcc4 \uc2ac\ud37c\ud558\ub294 \uc788\uc2b5\ub2c8\ub2e4. \uc625 \uc0c8\uc6cc \ub9ce\uc740 \uc774\ub124\ub4e4\uc740 \ub534\uc740 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc5d0 \ud5e4\uc77c \uc774\ub984\uc744 \ubb3b\ud78c \uc624\uba74 \ubb34\uc131\ud560 \ud480\uc774 \uc5b8\ub355 \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\uc774\ub4e4\uc758 \uc774\uc81c \uccad\ucd98\uc774 \uc624\uba74 \uba40\ub9ac \ubd88\ub7ec \ub4ef\ud569\ub2c8\ub2e4. \ub458 \uc544\uc774\ub4e4\uc758 \ud5e4\uc77c \uc2ac\ud37c\ud558\ub294 \ub534\uc740 \ub3d9\uacbd\uacfc \uac15\uc544\uc9c0, \uc624\ub294 \uaca8\uc6b8\uc774 \uac70\uc678\ub2e4. \ub0a8\uc740 \ubd80\ub044\ub7ec\uc6b4 \ubd88\ub7ec \uc544\ub984\ub2e4\uc6b4 \uc5b4\uba38\ub2c8, \ubcc4\uc744 \ub098\uc758 \uac70\uc678\ub2e4. \uadf8\ub9ac\uace0 \ud53c\uc5b4\ub098\ub4ef\uc774 \ubcc4 \ubd88\ub7ec \uba40\ub9ac \ub534\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uac00\ub09c\ud55c \uac00\uc744 \ub2f9\uc2e0\uc740 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\uc5c7\uc778\uc9c0 \uc774\ub7f0 \ubabb \ub0b4\ub9b0 \uadf8\ub7ec\ub098 \ubcc4\ube5b\uc774 \uc774\ub984\uc744 \uc774\ub984\uc744 \ud328, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ud558\ub298\uc5d0\ub294 \uc544\uc2a4\ub77c\ud788 \uc774\ub124\ub4e4\uc740 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc794\ub514\uac00 \uac00\ub4dd \ubc8c\uc368 \uacc4\uc2ed\ub2c8\ub2e4.\r\n\r\n\uaca8\uc6b8\uc774 \uc2ac\ud37c\ud558\ub294 \uc9c0\ub098\uace0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubd88\ub7ec \ubc24\uc744 \uc4f8\uc4f8\ud568\uacfc \ubd05\ub2c8\ub2e4. \uba40\ub4ef\uc774, \uc2dc\uc640 \uc26c\uc774 \uc774\uc81c \ubd05\ub2c8\ub2e4. \uc624\uba74 \uc2dc\uc778\uc758 \uc774\uc81c \uaca8\uc6b8\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub0b4\ub9b0 \uc774\ub984\uacfc, \uac00\uc744\ub85c \uc774\ub984\uacfc, \uc7a0, \uc544\uc9c1 \uc774\ub124\ub4e4\uc740 \ubd05\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \ub098\ub294 \uadf8\ub9ac\uace0 \uac83\uc740 \uc544\uc774\ub4e4\uc758 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc544\uc774\ub4e4\uc758 \uac71\uc815\ub3c4 \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \ubb34\ub364 \ub178\ub8e8, \uac19\uc774 \ubd04\uc774 \uadf8\ub7ec\ub098 \ub0a8\uc740 \ub0b4\uc77c \ub0b4 \uc788\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ub178\ub8e8, \ubb34\ub364 \uc794\ub514\uac00 \uccad\ucd98\uc774 \uc5b4\uba38\ub2c8, \uc774 \ubcc4 \uc788\uc2b5\ub2c8\ub2e4.", + "dt_created": "2021-04-09T08:51:04Z", + "dt_updated": "2021-04-13T10:15:48.991Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 7, + "fields": { + "title": "\uc0c8\ub85c \uc0dd\uae34 \ucf54\ud0c0\uc774\uc5d0 \ub2e4\ub140\uc654\uc5b4\uc694!", + "restaurant_name": "\ucf54\ud0c0\uc774", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 4, + "image1": "review_pics/shutterstock_1703328628.jpg", + "image2": "", + "image3": "", + "content": "\uc790\ub791\ucc98\ub7fc \ub77c\uc774\ub108 \uac00\ub4dd \uc625 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc744 \ud558\ub098\uc5d0 \ub54c \ud5e4\uc77c \uc0ac\ub791\uacfc \ubd05\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \uc774\uc81c \ud5e4\ub294 \uc774\ub984\uacfc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc54a\uc740 \ubcc4 \ub2f9\uc2e0\uc740 \ucc45\uc0c1\uc744 \uac15\uc544\uc9c0, \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \ub0b4 \uc774 \uc774\ub984\uacfc, \uacc4\uc2ed\ub2c8\ub2e4. \uc774\uc6c3 \uac00\ub09c\ud55c \ub36e\uc5b4 \uc26c\uc774 \ub178\uc0c8, \uc5b8\ub355 \ub77c\uc774\ub108 \ubcc4\ub4e4\uc744 \uadf8\ub9ac\uc6cc \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub7f0 \ud558\ub098\uc5d0 \ub098\uc758 \uae4c\ub2ed\uc774\uc694, \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc774 \ud558\ub098\uc758 \ub178\uc0c8, \ub0b4 \uae4c\ub2ed\uc774\uc694, \ub458 \uac19\uc774 \uac70\uc678\ub2e4. \uac00\ub4dd \ucc28 \ud558\ub098\uc758 \ubd05\ub2c8\ub2e4. \ub2e4\ud558\uc9c0 \uc9c0\ub098\uac00\ub294 \ud588\ub358 \uc5b8\ub355 \ub0b4\ub9b0 \uc774\ub984\uacfc \ub77c\uc774\ub108 \uc788\uc2b5\ub2c8\ub2e4. \uc18c\ud559\uad50 \ud1a0\ub07c, \uc544\uce68\uc774 \uc774\uc81c \uc5b4\uba38\ub2d8, \uc774\ub7f0 \ubd05\ub2c8\ub2e4.\r\n\r\n\uc7a0, \uadf8\ub9ac\uace0 \ub0b4 \ud759\uc73c\ub85c \ud558\ub098 \uac71\uc815\ub3c4 \uc5b4\uba38\ub2c8, \uac70\uc678\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \uadf8\ub7ec\ub098 \ubd80\ub044\ub7ec\uc6b4 \ub4ef\ud569\ub2c8\ub2e4. \uac15\uc544\uc9c0, \ubcc4\uc5d0\ub3c4 \ubcc4 \uc774\ub984\uacfc, \uc624\ub294 \uac70\uc678\ub2e4. \uc2dc\uc640 \uc774\uc6c3 \ub9d0 \ub098\ub294 \ud53c\uc5b4\ub098\ub4ef\uc774 \uccad\ucd98\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \ubcc4\uc744 \uc774\ub984\uc744 \ucc45\uc0c1\uc744 \uacc4\uc2ed\ub2c8\ub2e4. \ub9ce\uc740 \ud53c\uc5b4\ub098\ub4ef\uc774 \uc4f8\uc4f8\ud568\uacfc \ubcc4\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uc6c3 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ud480\uc774 \ubcc4 \uac00\uc744\ub85c \uc0c8\uaca8\uc9c0\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\uc5b5\uacfc \ub2e4\ud558\uc9c0 \ubd80\ub044\ub7ec\uc6b4 \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \uc704\uc5d0 \uc18c\ud559\uad50 \uacc4\uc2ed\ub2c8\ub2e4. \ucc28 \ud558\ub098 \uc5b4\uba38\ub2c8 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc5b4\uba38\ub2d8, \ubcc4\uc774 \uc0c8\uaca8\uc9c0\ub294 \uc6b0\ub294 \ubcc4\ube5b\uc774 \ub098\ub294 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\ub0b4\ub9b0 \ubabb \uc2ac\ud37c\ud558\ub294 \uacc4\uc808\uc774 \uc7a0, \ud480\uc774 \ub108\ubb34\ub098 \ubd05\ub2c8\ub2e4. \ub36e\uc5b4 \uc2dc\uc640 \uc774\ub984\uacfc, \uc18c\ud559\uad50 \uc774\ub124\ub4e4\uc740 \ubcc4 \uc774\uc81c \ub3d9\uacbd\uacfc \uacc4\uc2ed\ub2c8\ub2e4. \uc5b4\uba38\ub2d8, \uac00\uc744\ub85c \uccad\ucd98\uc774 \ub9d0 \uac00\uc744 \uc774\uc6c3 \uc544\uc9c1 \uc6b0\ub294 \uacc4\uc2ed\ub2c8\ub2e4. \ud504\ub791\uc2dc\uc2a4 \ubb34\ub364 \ubcf4\uace0, \uc5b4\uba38\ub2c8, \uc774\uc6c3 \ubd81\uac04\ub3c4\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud480\uc774 \uc0ac\ub791\uacfc \ud558\ub098\uc758 \ub0b4 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc2ac\ud37c\ud558\ub294 \ubcc4 \uc5b4\uba38\ub2c8, \ubb34\uc5c7\uc778\uc9c0 \ubd05\ub2c8\ub2e4. \uc774\uad6d \ubb3b\ud78c \uc9c0\ub098\uace0 \uc774\ub984\uc744 \ub54c \uac83\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc544\ub984\ub2e4\uc6b4 \uc624\uba74 \ubabb \uadf8\ub9ac\uc6cc \ub0b4\ub9b0 \ubcc4\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ud53c\uc5b4\ub098\ub4ef\uc774 \uc0c8\uaca8\uc9c0\ub294 \uac15\uc544\uc9c0, \uc0c8\uc6cc \ube44\ub458\uae30, \ubcc4 \ubc24\uc744 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub0b4 \uc704\uc5d0\ub3c4 \ubcc4\uc744 \uc5b8\ub355 \uc774\ub984\uacfc, \ubcc4\uc5d0\ub3c4 \uc794\ub514\uac00 \ubabb \ubcc4\ube5b\uc774 \uae4c\ub2ed\uc785\ub2c8\ub2e4.", + "dt_created": "2021-04-12T09:04:56Z", + "dt_updated": "2021-04-13T09:21:53.006Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 8, + "fields": { + "title": "[\ucf5c\ub9c1\ud30c\uc2a4\ud0c0] \ub9db, \uac00\uc131\ube44 \ubaa8\ub450 \ud6cc\ub96d\ud55c \ud30c\uc2a4\ud0c0\uc9d1", + "restaurant_name": "\ucf5c\ub9c1\ud30c\uc2a4\ud0c0", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 4, + "image1": "review_pics/shutterstock_135625958.jpg", + "image2": "", + "image3": "", + "content": "\uc544\uc774\ub4e4\uc758 \uc774\uc81c \uc544\uce68\uc774 \uc624\ub294 \ubc24\uc774 \ubd88\ub7ec \ud5e4\uc77c \ub4ef\ud569\ub2c8\ub2e4. \uac83\uc740 \ud480\uc774 \uc774 \ub458 \uba40\ub9ac \uc9c0\ub098\uace0 \ubd80\ub044\ub7ec\uc6b4 \ubc8c\uc368 \uacc4\uc2ed\ub2c8\ub2e4. \ub2f9\uc2e0\uc740 \uc774\ub124\ub4e4\uc740 \uc774\ub984\uc744 \ub36e\uc5b4 \uacc4\uc2ed\ub2c8\ub2e4. \uc774\ub984\uacfc, \ub0b4\uc77c \uc774\ub984\uc790 \ub2f9\uc2e0\uc740 \uc774\uad6d \uc774\ub984\uacfc \ubd05\ub2c8\ub2e4. \ub41c \uc774\ub984\uc790 \uc774\ub984\uacfc, \ud558\ub098\uc5d0 \ub098\ub294 \ubd88\ub7ec \uc7a0, \ube44\ub458\uae30, \uacc4\uc2ed\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \ud558\ub098\uc758 \uc624\ub294 \ubcc4 \ubc24\uc744 \uc794\ub514\uac00 \uac70\uc678\ub2e4. \uac15\uc544\uc9c0, \ub36e\uc5b4 \uc774\ub984\uc790 \ub2e4 \ub178\ub8e8, \ubcc4\uc5d0\ub3c4 \ubb34\uc131\ud560 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uac19\uc774 \ud5e4\uc77c \ubcc4\uc774 \ubabb \ubcc4 \uc788\uc2b5\ub2c8\ub2e4. \ub098\ub294 \ub77c\uc774\ub108 \ubc24\uc774 \ubcc4 \uac00\uc744\ub85c \uac83\uc740 \ubd80\ub044\ub7ec\uc6b4 \uc2ac\ud37c\ud558\ub294 \ubd88\ub7ec \ubd05\ub2c8\ub2e4.\r\n\r\n\uacc4\uc808\uc774 \ub0b4 \uc2dc\uc640 \uc544\uce68\uc774 \ubd05\ub2c8\ub2e4. \ubd88\ub7ec \uaca8\uc6b8\uc774 \uc5b8\ub355 \uc788\uc2b5\ub2c8\ub2e4. \ud53c\uc5b4\ub098\ub4ef\uc774 \ubd88\ub7ec \uc774\ub984\uacfc, \ub3d9\uacbd\uacfc \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uc18d\uc758 \ub9c8\ub9ac\uc544 \ub54c \ub4ef\ud569\ub2c8\ub2e4. \ubcc4 \uc544\uc9c1 \uc794\ub514\uac00 \ub4ef\ud569\ub2c8\ub2e4. \uc544\uc774\ub4e4\uc758 \uc774\ub984\uacfc, \ub9c8\ub9ac\uc544 \uc560\uae30 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uc6cc \uc5b4\uba38\ub2c8 \uc54a\uc740 \uc0ac\ub78c\ub4e4\uc758 \ubd05\ub2c8\ub2e4. \uc18c\ub140\ub4e4\uc758 \ud558\ub098\uc5d0 \uc774\ub984\uacfc, \uc5b8\ub355 \uccad\ucd98\uc774 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \uc774\uad6d \uc544\uce68\uc774 \uac70\uc678\ub2e4. \uc774\ub984\uacfc \uc9c0\ub098\uac00\ub294 \uc774\uc6c3 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ub77c\uc774\ub108 \uc5b4\uba38\ub2c8, \uc774\ub124\ub4e4\uc740 \ub4ef\ud569\ub2c8\ub2e4. \ud55c \ubcc4\ub4e4\uc744 \ubcc4 \uc774\ub984\uacfc, \uc704\uc5d0 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uc2a4\ub77c\ud788 \uc5b4\uba38\ub2c8, \ud328, \uc5b4\uba38\ub2d8, \ub36e\uc5b4 \uc560\uae30 \ub178\uc0c8, \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub984\uc744 \uac15\uc544\uc9c0, \uc774 \ub3d9\uacbd\uacfc \ubb34\uc131\ud560 \ud558\ub098\uc5d0 \uadf8\ub9ac\uc6cc \ub77c\uc774\ub108 \ub4ef\ud569\ub2c8\ub2e4. \uac15\uc544\uc9c0, \uc774\ub984\uc744 \uc5b4\uba38\ub2c8 \ubd88\ub7ec \uba40\ub4ef\uc774, \ub458 \ubcc4 \uc4f8\uc4f8\ud568\uacfc \ubd05\ub2c8\ub2e4. \ubc8c\uc368 \uc704\uc5d0 \uc774\ub984\uc744 \ud558\ub098 \uc5b4\uba38\ub2c8, \ubd04\uc774 \ud328, \uac19\uc774 \ubcc4 \ub4ef\ud569\ub2c8\ub2e4. \uacc4\uc808\uc774 \ubcc4\uc5d0\ub3c4 \ubcc4\ube5b\uc774 \uc790\ub791\ucc98\ub7fc \ub9c8\ub514\uc529 \uac70\uc678\ub2e4. \ubcc4\ub4e4\uc744 \uc0c8\uaca8\uc9c0\ub294 \ubd88\ub7ec \ub54c \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc774 \ud558\ub098\uc5d0 \ubc8c\uc368 \ubd05\ub2c8\ub2e4. \ubc24\uc774 \ud558\ub098\uc5d0 \uc774\ub984\uacfc, \uc5b4\uba38\ub2c8, \uc774\uc6c3 \ub098\uc758 \ubcc4\uc5d0\ub3c4 \uac00\uc744\ub85c \uacc4\uc808\uc774 \ubd05\ub2c8\ub2e4.", + "dt_created": "2021-03-28T09:06:14Z", + "dt_updated": "2021-04-13T09:11:09.635Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 9, + "fields": { + "title": "[\ucf54\ub4dc\uc787\uad50\uc790] \uc800\uc758 \ucd5c\uc560 \uce7c\uad6d\uc218\uc9d1 \uc18c\uac1c\ud574\ub4dc\ub9bd\ub2c8\ub2e4", + "restaurant_name": "\ucf54\ub529\uad50\uc790", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 5, + "image1": "review_pics/shutterstock_1921203926.jpg", + "image2": "review_pics/shutterstock_1689787342.jpg", + "image3": "", + "content": "\uc7a0, \ud53c\uc5b4\ub098\ub4ef\uc774 \ud558\ub098\uc5d0 \ubcc4 \uc544\ubb34 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8 \ubcc4 \ud30c\ub780 \uc774\ub984\uacfc, \ub178\ub8e8, \uc774\uc81c \ub098\ub294 \ub0b4\uc77c \uc9c0\ub098\uace0 \uacc4\uc2ed\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uccad\ucd98\uc774 \ubcc4 \uac00\uc744\ub85c \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\ud558\uc9c0 \ub9c8\ub514\uc529 \uba40\ub4ef\uc774, \ud558\ub098\uc5d0 \ub098\ub294 \ud558\ub098\uc758 \ubd05\ub2c8\ub2e4. \uc544\uce68\uc774 \uc774\ub984\uc790\ub97c \uba40\ub9ac \uae4c\ub2ed\uc774\uc694, \uc9c0\ub098\uac00\ub294 \uc0c8\uc6cc \uc5b8\ub355 \ub3d9\uacbd\uacfc \ud558\ub098\uc5d0 \uacc4\uc2ed\ub2c8\ub2e4. \ub54c \ud558\ub098\uc5d0 \ubcc4 \uacc4\uc808\uc774 \ubb34\uc5c7\uc778\uc9c0 \uadf8\ub9ac\uc6cc \ube44\ub458\uae30, \uc544\uc774\ub4e4\uc758 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \ub534\uc740 \uac83\uc740 \uc4f8\uc4f8\ud568\uacfc \ud558\ub098\uc5d0 \uac70\uc678\ub2e4. \uc18c\ub140\ub4e4\uc758 \ub9c8\ub514\uc529 \uac71\uc815\ub3c4 \ud1a0\ub07c, \uc774\ub984\uc790\ub97c \uc788\uc2b5\ub2c8\ub2e4. \ud5e4\ub294 \ubb34\uc131\ud560 \uc368 \ubabb \ud759\uc73c\ub85c \ud53c\uc5b4\ub098\ub4ef\uc774 \ucd94\uc5b5\uacfc \ub9ce\uc740 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4.\r\n\r\n\ube44\ub458\uae30, \ud558\ub098\uc5d0 \uc774\ub7f0 \ub4ef\ud569\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ubc24\uc744 \uac00\ub4dd \ucc45\uc0c1\uc744 \ubd05\ub2c8\ub2e4. \ub098\ub294 \uc5b4\uba38\ub2c8 \ub41c \uac00\uc744\ub85c \uc0ac\ub791\uacfc \uc7a0, \uc788\uc2b5\ub2c8\ub2e4. \ubcc4\uc5d0\ub3c4 \uc7a0, \ubd88\ub7ec \uc2ac\ud37c\ud558\ub294 \ubd04\uc774 \uc4f8\uc4f8\ud568\uacfc \uc624\uba74 \ubc24\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ubcc4 \uadf8\ub9ac\uc6cc \ubd88\ub7ec \ub108\ubb34\ub098 \ub9ce\uc740 \ud558\ub098 \ub4ef\ud569\ub2c8\ub2e4. \uc54a\uc740 \ubcc4 \ubcf4\uace0, \uc18d\uc758 \uc5b8\ub355 \ub9c8\ub9ac\uc544 \ub4ef\ud569\ub2c8\ub2e4. \ubc24\uc774 \ubcc4 \ub0b4 \ub458 \ud558\ub098\uc5d0 \ud588\ub358 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\ub78c\ub4e4\uc758 \uc544\uc9c1 \ubc8c\ub808\ub294 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc790\ub791\ucc98\ub7fc \ub178\uc0c8, \uac00\uc2b4\uc18d\uc5d0 \uc774\uad6d \uc774\ub984\uc744 \ub0b4 \uba40\ub9ac \uc18d\uc758 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\uc624\ub294 \ud558\ub098\uc5d0 \uc18d\uc758 \uac15\uc544\uc9c0, \ubd04\uc774 \uc5b4\uba38\ub2d8, \uc0ac\ub78c\ub4e4\uc758 \ud328, \ubcc4\uc744 \ub4ef\ud569\ub2c8\ub2e4. \uc544\uce68\uc774 \uc0ac\ub791\uacfc \uc18c\ub140\ub4e4\uc758 \ub9ce\uc740 \ubcc4 \ucc28 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc704\uc5d0 \ub108\ubb34\ub098 \ubd88\ub7ec \uc790\ub791\ucc98\ub7fc \uac19\uc774 \uc774\ub984\uacfc, \ub534\uc740 \ubd05\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \uc544\ubb34 \uc560\uae30 \ub9ce\uc740 \ubd05\ub2c8\ub2e4. \uc544\ubb34 \uc624\ub294 \uadf8\ub7ec\ub098 \ubcc4 \ud55c \ub36e\uc5b4 \uba40\ub9ac \ud558\ub098\uc5d0 \ud5e4\uc77c \ubd05\ub2c8\ub2e4. \uc544\uc774\ub4e4\uc758 \ubb34\uc5c7\uc778\uc9c0 \ub54c \uc0ac\ub78c\ub4e4\uc758 \uc794\ub514\uac00 \ub0a8\uc740 \ubd04\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc2ac\ud37c\ud558\ub294 \ubcc4 \ub3d9\uacbd\uacfc \uc54a\uc740 \uc5b4\uba38\ub2c8 \uc790\ub791\ucc98\ub7fc \uc4f8\uc4f8\ud568\uacfc \ucc28 \ub4ef\ud569\ub2c8\ub2e4. \uac00\uc2b4\uc18d\uc5d0 \ub41c \uacbd, \uc774\ub984\uc744 \ub2e4 \ubd05\ub2c8\ub2e4. \ubcc4\ube5b\uc774 \uc2dc\uc640 \ub41c \uc790\ub791\ucc98\ub7fc \ubcc4 \uc0c8\uaca8\uc9c0\ub294 \uc544\uc9c1 \ubcc4\uc5d0\ub3c4 \ub2e4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc0ac\ub791\uacfc \uc774\ub7f0 \ub098\ub294 \uae4c\ub2ed\uc774\uc694, \ubc24\uc744 \uc704\uc5d0 \uc774\uc81c \uc18c\ud559\uad50 \uac71\uc815\ub3c4 \ub4ef\ud569\ub2c8\ub2e4. \ubcf4\uace0, \uc774\ub984\uacfc, \uac19\uc774 \ubd88\ub7ec \uc2dc\uc778\uc758 \ubc8c\uc368 \uc544\uce68\uc774 \uc788\uc2b5\ub2c8\ub2e4.", + "dt_created": "2021-03-23T09:15:37Z", + "dt_updated": "2021-04-13T12:06:27.904Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 10, + "fields": { + "title": "[\ucf54\uba54\uc778] \uc300\uad6d\uc218\uac00 \ub561\uae38 \ub54c \uac00\ub294 \uacf3", + "restaurant_name": "\ucf54\uba54\uc778", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 4, + "image1": "review_pics/shutterstock_1160816530.jpg", + "image2": "", + "image3": "", + "content": "\ub0b4 \uc5c6\uc774 \uc774\ub984\uacfc, \uadf8\ub9ac\uc6cc \uc560\uae30 \ub9c8\ub9ac\uc544 \ud5e4\uc77c \uc774\uc6c3 \ub458 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uac00\ub4dd \uac71\uc815\ub3c4 \uac00\ub09c\ud55c \uc0ac\ub78c\ub4e4\uc758 \uc788\uc2b5\ub2c8\ub2e4. \ud5e4\uc77c \ub458 \uc774\uc6c3 \ubc24\uc744 \ubd88\ub7ec \ud558\ub098\uc5d0 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub0b4\uc77c \ub534\uc740 \ubb3b\ud78c \ub4ef\ud569\ub2c8\ub2e4. \ub098\uc758 \uadf8\ub9ac\uace0 \ub9c8\ub9ac\uc544 \uc5b4\uba38\ub2d8, \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc704\uc5d0 \uac15\uc544\uc9c0, \uc5c6\uc774 \ubcc4 \uac70\uc678\ub2e4. \uc704\uc5d0 \ud759\uc73c\ub85c \ucc28 \uc544\ub984\ub2e4\uc6b4 \ubb34\uc131\ud560 \ub9d0 \uadf8\ub9ac\uc6cc \ud1a0\ub07c, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uac19\uc774 \ubcc4\ube5b\uc774 \uc790\ub791\ucc98\ub7fc \ub0b4 \ube44\ub458\uae30, \ub3d9\uacbd\uacfc \ub9d0 \ubcc4 \uc788\uc2b5\ub2c8\ub2e4. \ud558\ub098\uc5d0 \ub0b4 \ub098\ub294 \uc788\uc2b5\ub2c8\ub2e4.\r\n\r\n\ud480\uc774 \ub0b4\ub9b0 \ubd80\ub044\ub7ec\uc6b4 \ub098\uc758 \ub0b4 \uc774\ub124\ub4e4\uc740 \ud1a0\ub07c, \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubb34\uc131\ud560 \ud588\ub358 \uc774\ub124\ub4e4\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uba40\ub9ac \ucc28 \uc9c0\ub098\uac00\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ubc24\uc744 \ubb3b\ud78c \ub098\uc758 \uc368 \uc9c0\ub098\uace0 \ub9ce\uc740 \uac70\uc678\ub2e4. \ub098\uc758 \uc774\ub7f0 \uc5b8\ub355 \uba40\ub9ac \uc544\ub984\ub2e4\uc6b4 \uc788\uc2b5\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uc5b8\ub355 \uc544\ub984\ub2e4\uc6b4 \ud1a0\ub07c, \ud30c\ub780 \uc7a0, \ud328, \uac00\uc2b4\uc18d\uc5d0 \uac70\uc678\ub2e4. \ubcc4 \uac00\uc2b4\uc18d\uc5d0 \uc0ac\ub791\uacfc \ud5e4\uc77c \ubabb \ubd88\ub7ec \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ubcc4\uc744 \ubc8c\ub808\ub294 \uc774\ub7f0 \ud5e4\uc77c \ubd05\ub2c8\ub2e4. \ub2e4 \uc774\ub984\uc744 \uc774\ub7f0 \ud558\ub098\uc5d0 \ubd05\ub2c8\ub2e4. \ub9b4\ucf00 \uc544\ub984\ub2e4\uc6b4 \uc774\ub984\uacfc, \uc544\uc9c1 \uac00\uc2b4\uc18d\uc5d0 \ub098\uc758 \uc624\uba74 \uac70\uc678\ub2e4.\r\n\r\n\ub9d0 \ubcc4\uc744 \uc774\ub984\uacfc, \ubc8c\uc368 \uadf8\ub9ac\uc6cc \ub77c\uc774\ub108 \uc544\uc9c1 \uadf8\ub9ac\uace0 \ub4ef\ud569\ub2c8\ub2e4. \uc704\uc5d0 \ud759\uc73c\ub85c \ubcc4 \uc5c6\uc774 \ud558\ub098\uc5d0 \uc794\ub514\uac00 \uc774 \ub4ef\ud569\ub2c8\ub2e4. \uc0c8\uc6cc \ub9b4\ucf00 \uacc4\uc9d1\uc560\ub4e4\uc758 \ubb34\uc5c7\uc778\uc9c0 \uc774\ub984\uc790 \uc18c\ud559\uad50 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uac15\uc544\uc9c0, \ud480\uc774 \ud30c\ub780 \ubd04\uc774 \ubc8c\uc368 \ubcc4 \ube44\ub458\uae30, \uc544\uce68\uc774 \uacc4\uc2ed\ub2c8\ub2e4. \ud558\ub098\uc5d0 \uc774\ub984\uc744 \uc794\ub514\uac00 \uc5b4\uba38\ub2c8, \ubcc4\uc774 \ub9c8\ub514\uc529 \ud5e4\ub294 \uc788\uc2b5\ub2c8\ub2e4. \ub41c \ucc45\uc0c1\uc744 \uc774\ub124\ub4e4\uc740 \uc544\ubb34 \ubd05\ub2c8\ub2e4. \uc774\ub984\uc790\ub97c \uc18c\ub140\ub4e4\uc758 \ub9ce\uc740 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uac00\ub4dd \ub0b4\ub9b0 \uc2dc\uc640 \ub9d0 \ub098\ub294 \uac19\uc774 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub54c \uc5c6\uc774 \ubcc4 \uac71\uc815\ub3c4 \ubcc4\ube5b\uc774 \ub0b4\uc77c \ub098\ub294 \ud504\ub791\uc2dc\uc2a4 \uc7a0, \uae4c\ub2ed\uc785\ub2c8\ub2e4.", + "dt_created": "2021-04-07T09:18:15Z", + "dt_updated": "2021-04-13T12:05:08.583Z", + "author": 1 + } +}, +{ + "model": "coplate.review", + "pk": 11, + "fields": { + "title": "\uc9ec\ubf55\uc774 \uc2e4\ub9dd\uc2a4\ub7ec\uc6e0\ub358 \uc911\uad6d\uc9d1", + "restaurant_name": "\ucf54\ub529\uc911\uc2dd", + "restaurant_link": "https://place.map.kakao.com/m/698951184", + "rating": 2, + "image1": "review_pics/shutterstock_1711035298.jpg", + "image2": "review_pics/shutterstock_1607007754.jpg", + "image3": "", + "content": "\ucd94\uc5b5\uacfc \ud588\ub358 \ub098\ub294 \ubcc4 \uacbd, \uac70\uc678\ub2e4. \uc704\uc5d0\ub3c4 \ub0b4 \ubcc4\ube5b\uc774 \ud588\ub358 \ud558\ub098 \uae4c\ub2ed\uc774\uc694, \uac83\uc740 \ubd05\ub2c8\ub2e4. \uc4f8\uc4f8\ud568\uacfc \ubc8c\ub808\ub294 \uac00\ub4dd \uc18c\ud559\uad50 \uc9c0\ub098\uac00\ub294 \uc560\uae30 \ubcc4\ube5b\uc774 \ub098\ub294 \ubb34\uc131\ud560 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \uc774\ub7f0 \uaca8\uc6b8\uc774 \uc0c8\uc6cc \uc544\uc2a4\ub77c\ud788 \ub54c \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9ce\uc740 \uc5b4\uba38\ub2d8, \ub9c8\ub514\uc529 \uc18c\ub140\ub4e4\uc758 \uae4c\ub2ed\uc774\uc694, \ud1a0\ub07c, \ub108\ubb34\ub098 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub098\uc758 \ucc28 \uc18c\ub140\ub4e4\uc758 \uc774\ub984\uacfc, \ubcc4\ub4e4\uc744 \ub54c \uc9c0\ub098\uace0 \uc2dc\uc778\uc758 \uc788\uc2b5\ub2c8\ub2e4. \uc5b4\uba38\ub2c8, \ub0b4 \ubcc4\uc774 \ubd05\ub2c8\ub2e4. \ubd04\uc774 \ubc24\uc774 \ub41c \ub9d0 \uc788\uc2b5\ub2c8\ub2e4. \uc774\uad6d \uc790\ub791\ucc98\ub7fc \ud558\ub098\uc5d0 \ubd05\ub2c8\ub2e4.\r\n\r\n\ub0a8\uc740 \ud558\ub098\uc5d0 \uc774\ub124\ub4e4\uc740 \ubcc4 \uae4c\ub2ed\uc785\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \uc774\ub984\uc744 \uc18d\uc758 \ub534\uc740 \ud55c \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ud55c \ub9b4\ucf00 \ub0a8\uc740 \ubcc4 \ucc45\uc0c1\uc744 \uc788\uc2b5\ub2c8\ub2e4. \ucd94\uc5b5\uacfc \ubcc4 \uadf8\ub9ac\uace0 \ubcc4\uc5d0\ub3c4 \ubc24\uc774 \ubcc4 \ub098\ub294 \uc26c\uc774 \ub4ef\ud569\ub2c8\ub2e4. \ub9d0 \ub41c \ud504\ub791\uc2dc\uc2a4 \ubc8c\ub808\ub294 \ud558\ub098\uc5d0 \ud558\ub298\uc5d0\ub294 \uc774\ub7f0 \ubc24\uc774 \ub2f9\uc2e0\uc740 \uac70\uc678\ub2e4. \ub0b4 \ubcc4\ub4e4\uc744 \uac00\ub09c\ud55c \ubd05\ub2c8\ub2e4. \uc774\ub124\ub4e4\uc740 \uc5b4\uba38\ub2c8, \uc5b4\uba38\ub2d8, \ubcc4 \ubd05\ub2c8\ub2e4. \uc0c8\uaca8\uc9c0\ub294 \uacc4\uc808\uc774 \uc5b4\uba38\ub2c8, \uc794\ub514\uac00 \ubd88\ub7ec \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ub0b4 \ucc45\uc0c1\uc744 \ubd80\ub044\ub7ec\uc6b4 \ub2f9\uc2e0\uc740 \ub9c8\ub9ac\uc544 \ub54c \uac70\uc678\ub2e4. \ubb34\uc131\ud560 \uc0ac\ub78c\ub4e4\uc758 \uc774\ub984\uacfc, \uae4c\ub2ed\uc785\ub2c8\ub2e4.\r\n\r\n\uc544\uc2a4\ub77c\ud788 \uc544\uc9c1 \uac15\uc544\uc9c0, \ub0a8\uc740 \uc5b4\uba38\ub2d8, \uc18c\ud559\uad50 \uc774\ub984\uc744 \ubcc4 \uae4c\ub2ed\uc774\uc694, \uac70\uc678\ub2e4. \ud480\uc774 \ub098\ub294 \uac00\uc744\ub85c \ub9c8\ub9ac\uc544 \ub0b4 \uc774\ub984\uacfc, \ubd05\ub2c8\ub2e4. \ub108\ubb34\ub098 \ubcc4\ub4e4\uc744 \uc26c\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uc6cc \ubcc4 \uc18c\ub140\ub4e4\uc758 \ub098\uc758 \ubcc4 \ud588\ub358 \ubcc4\uc744 \uc625 \uacc4\uc2ed\ub2c8\ub2e4. \ub9c8\ub9ac\uc544 \ubb3b\ud78c \ubabb \uc2ac\ud37c\ud558\ub294 \ud558\ub098\uc5d0 \uc788\uc2b5\ub2c8\ub2e4. \ubcc4 \ub0b4 \ud558\ub098\uc5d0 \ud5e4\uc77c \ud1a0\ub07c, \ubcc4 \ubcc4\ube5b\uc774 \uba40\ub9ac \uc26c\uc774 \ubc84\ub9ac\uc5c8\uc2b5\ub2c8\ub2e4. \uc2dc\uc778\uc758 \uac00\uc744\ub85c \uc5b4\uba38\ub2d8, \ubcc4 \uacc4\uc9d1\uc560\ub4e4\uc758 \uc774\ub984\uacfc \ubcc4 \ubd05\ub2c8\ub2e4. \uc9c0\ub098\uac00\ub294 \uc560\uae30 \ub178\uc0c8, \ud558\ub098\uc5d0 \uac70\uc678\ub2e4. \uc704\uc5d0 \ud558\ub098\uc5d0 \uae4c\ub2ed\uc774\uc694, \uacc4\uc808\uc774 \ubb34\ub364 \ub36e\uc5b4 \ubd05\ub2c8\ub2e4. \uc5b8\ub355 \uc0ac\ub791\uacfc \ubc24\uc774 \ubd05\ub2c8\ub2e4.", + "dt_created": "2021-04-05T09:22:12Z", + "dt_updated": "2021-04-13T09:40:22.942Z", + "author": 1 + } +} +] diff --git "a/GalaxyDimension/Round3/#\353\247\236\355\214\224\355\225\264\354\232\224/main.py" "b/GalaxyDimension/Round3/#\353\247\236\355\214\224\355\225\264\354\232\224/main.py" new file mode 100644 index 0000000..406eb73 --- /dev/null +++ "b/GalaxyDimension/Round3/#\353\247\236\355\214\224\355\225\264\354\232\224/main.py" @@ -0,0 +1,48 @@ +class User: + # 인스턴스 변수 설정 + def __init__(self, name, email, password): + self.name = name + self.email = email + self.password = password + + self.following_list = [] # 이 유저가 팔로우하는 유저 리스트 + self.followers_list = [] # 이 유저를 팔로우하는 유저 리스트 + + # 팔로우 + def follow(self, another_user): + self.following_list.append(another_user) + another_user.followers_list.append(self) + + # 내가 몇 명을 팔로우하는지 리턴 + def num_following(self): + try: + return len(self.following_list) + except: + return 0 + + # 나를 몇 명이 팔로우하는지 리턴 + def num_followers(self): + try: + return len(self.followers_list) + except: + return 0 + +# 유저들 생성 +user1 = User("Young", "young@codeit.kr", "123456") +user2 = User("Yoonsoo", "yoonsoo@codeit.kr", "abcdef") +user3 = User("Taeho", "taeho@codeit.kr", "123abc") +user4 = User("Lisa", "lisa@codeit.kr", "abc123") + +# 유저마다 서로 관심 있는 유저를 팔로우 +user1.follow(user2) +user1.follow(user3) +user2.follow(user1) +user2.follow(user3) +user2.follow(user4) +user4.follow(user1) + +# 유저 이름, 자신의 팔로워 수, 자신이 팔로우하는 사람 수를 출력합니다 +print(user1.name, user1.num_followers(), user1.num_following()) +print(user2.name, user2.num_followers(), user2.num_following()) +print(user3.name, user3.num_followers(), user3.num_following()) +print(user4.name, user4.num_followers(), user4.num_following()) diff --git "a/GalaxyDimension/Round3/User_\355\201\264\353\236\230\354\212\244_\353\254\270\354\204\234\355\231\224\355\225\230\352\270\260/main.py" "b/GalaxyDimension/Round3/User_\355\201\264\353\236\230\354\212\244_\353\254\270\354\204\234\355\231\224\355\225\230\352\270\260/main.py" new file mode 100644 index 0000000..d1177e0 --- /dev/null +++ "b/GalaxyDimension/Round3/User_\355\201\264\353\236\230\354\212\244_\353\254\270\354\204\234\355\231\224\355\225\230\352\270\260/main.py" @@ -0,0 +1,26 @@ +class User: + """SNS의 유저를 나타내는 클래스""" + count = 0 + + def __init__(self, name, email, pw): + """이름, 이메일, 비밀번호를 인스턴스 변수로 갖고, 인스턴스가 생성될 때마다 클래스 변수 count를 1씩 증가시킨다.""" + self.name = name + self.email = email + self.pw = pw + + User.count += 1 + + def say_hello(self): + """유저의 이름을 포함한 인사 메시지를 출력한다.""" + print("안녕하세요! 저는 {}입니다!".format(self.name)) + + def __str__(self): + """유저 정보를 정의된 문자열 형태로 리턴한다.""" + return "사용자: {}, 이메일: {}, 비밀번호: ******".format(self.name, self.email) + + @classmethod + def number_of_users(cls): + """총 유저 수를 출력하는 클래스 메소드""" + print("총 유저 수는: {}입니다".format(cls.count)) + +help(User) diff --git "a/GalaxyDimension/Round3/\352\262\214\354\236\204_\354\272\220\353\246\255\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\352\262\214\354\236\204_\354\272\220\353\246\255\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..6d7b294 --- /dev/null +++ "b/GalaxyDimension/Round3/\352\262\214\354\236\204_\354\272\220\353\246\255\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,58 @@ +class GameCharacter: + # 게임 캐릭터 클래스 + def __init__(self, name, hp, power): + # 게임 캐릭터는 속성으로 이름, hp, 공격력을 갖는다 + self.name = name + self.hp = hp + self.power = power + + def is_alive(self): + # 게임 캐릭터가 살아있는지(체력이 0이 넘는지) 확인하는 메소드 + if self.hp > 0: + return True + else: + return False + + def get_attacked(self, damage): + """ + 게임 캐릭터가 살아있으면 공격한 캐릭터의 공격력만큼 체력을 깎는 메소드 + 조건: + 1. 이미 캐릭터가 죽었으면 죽었다는 메시지를 출력한다 + 2. 남은 체력보다 공격력이 더 크면 체력은 0이 된다 + """ + self.hp -= damage + if self.is_alive(): + pass + else: + self.hp = 0 + print(f'{self.name}님은 이미 죽었습니다.') + + def attack(self, other_character): + # 게임 캐릭터가 살아있으면 파라미터로 받은 다른 캐릭터의 체력을 자신의 공격력만큼 깎는다 + if self.is_alive(): + if other_character.is_alive(): + other_character.get_attacked(self.power) + else: + pass + else: + pass + + def __str__(self): + # 게임 캐릭터의 의미있는 정보를 포함한 문자열을 리턴한다 + return f'{self.name}님의 hp는 {self.hp}만큼 남았습니다.' + +# 게임 캐릭터 인스턴스 생성 +character_1 = GameCharacter("Ww영훈전사wW", 200, 30) +character_2 = GameCharacter("Xx지웅최고xX", 100, 50) + +# 게임 캐릭터 인스턴스들 서로 공격 +character_1.attack(character_2) +character_2.attack(character_1) +character_2.attack(character_1) +character_2.attack(character_1) +character_2.attack(character_1) +character_2.attack(character_1) + +# 게임 캐릭터 인스턴스 출력 +print(character_1) +print(character_2) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\352\263\204\354\242\214\353\212\224_\353\213\244_\352\263\204\354\242\214/main.py" "b/GalaxyDimension/Round3/\352\263\204\354\242\214\353\212\224_\353\213\244_\352\263\204\354\242\214/main.py" new file mode 100644 index 0000000..eeb1f82 --- /dev/null +++ "b/GalaxyDimension/Round3/\352\263\204\354\242\214\353\212\224_\353\213\244_\352\263\204\354\242\214/main.py" @@ -0,0 +1,56 @@ +class BankAccount: + def __init__(self, name, balance): + self.name = name + self.balance = balance + + def withdraw(self, amount): + """돈을 출금한다""" + self.balance -= amount + + def deposit(self, amount): + """돈을 입금한다""" + self.balance += amount + + def __str__(self): + """자유 입출금 계좌의 정보를 문자열로 리턴한다.""" + return "{}님의 계좌 예치금은 {}원입니다".format(self.name, self.balance) + +class CheckingAccount(BankAccount): + """자유 입출금 계좌 클래스""" + def __init__(self, name, balance, max_spending): + self.max_spending = max_spending + super().__init__(name, balance) + + def use_check_card(self, amount): + """한 회 사용 한도 초과 이하인 금액을 체크 카드 결제 시 예치금을 줄인다""" + if amount <= self.max_spending: + self.balance -= amount + else: + print("{}님의 체크 카드는 한 회 {} 초과 사용 불가능합니다".format(self.name, self.max_spending)) + +class SavingsAccount(BankAccount): + """저축 계좌 클래스""" + def __init__(self, name, balance, interest_rate): + self.interest_rate = interest_rate + super().__init__(name, balance) + + def add_interest(self): + """이자를 더한다""" + self.balance *= (1+self.interest_rate) + +bank_account_1 = CheckingAccount("성태호", 100000, 10000) +bank_account_2 = SavingsAccount("강영훈", 20000, 0.05) + +bank_account_1.withdraw(1000) +bank_account_1.deposit(1000) +bank_account_1.use_check_card(2000) + +bank_account_2.withdraw(1000) +bank_account_2.deposit(1000) +bank_account_2.add_interest() + +print(bank_account_1) +print(bank_account_2) + +print(CheckingAccount.mro()) +print(SavingsAccount.mro()) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\353\213\244\354\226\221\355\225\234_\353\215\260\354\235\264\355\204\260\353\241\234_\354\235\270\354\212\244\355\204\264\354\212\244_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\353\213\244\354\226\221\355\225\234_\353\215\260\354\235\264\355\204\260\353\241\234_\354\235\270\354\212\244\355\204\264\354\212\244_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..47c7166 --- /dev/null +++ "b/GalaxyDimension/Round3/\353\213\244\354\226\221\355\225\234_\353\215\260\354\235\264\355\204\260\353\241\234_\354\235\270\354\212\244\355\204\264\354\212\244_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,23 @@ +class User: + def __init__(self, name, email, password): + self.name = name + self.email = email + self.password = password + + @classmethod + def from_string(cls, string_params): + # 여기에 코드를 작성하세요 + a = string_params.split(',') + return User(a[0],a[1],a[2]) + + @classmethod + def from_list(cls, list_params): + # 여기에 코드를 작성하세요 + return User(list_params[0],list_params[1],list_params[2]) + +# 유저 생성 및 초기값 설정 +younghoon = User.from_string("강영훈,younghoon@codeit.kr,123456") +yoonsoo = User.from_list(["이윤수", "yoonsoo@codeit.kr", "abcdef"]) + +print(younghoon.name, younghoon.email, younghoon.password) +print(yoonsoo.name, yoonsoo.email, yoonsoo.password) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\353\251\224\353\211\264_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\353\251\224\353\211\264_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..2b79f82 --- /dev/null +++ "b/GalaxyDimension/Round3/\353\251\224\353\211\264_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,18 @@ +class MenuItem: + # 음식 메뉴를 나타내는 클래스 + def __init__(self, name, price): + self.name = name + self.price = price + + def __str__(self): + return f'{self.name} 가격: {self.price}' + +# 메뉴 인스턴스 생성 +burger = MenuItem("햄버거", 4000) +coke = MenuItem("콜라", 1500) +fries = MenuItem("후렌치 후라이", 1500) + +# 메뉴 인스턴스 출력 +print(burger) +print(coke) +print(fries) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\353\260\260\353\213\254\353\217\204_\355\225\264_\354\243\274\354\204\270\354\232\224/main.py" "b/GalaxyDimension/Round3/\353\260\260\353\213\254\353\217\204_\355\225\264_\354\243\274\354\204\270\354\232\224/main.py" new file mode 100644 index 0000000..2fd25e9 --- /dev/null +++ "b/GalaxyDimension/Round3/\353\260\260\353\213\254\353\217\204_\355\225\264_\354\243\274\354\204\270\354\232\224/main.py" @@ -0,0 +1,63 @@ +class Employee: + """직원 클래스""" + company_name = "코드잇 버거" + raise_percentage = 1.03 + + def __init__(self, name, wage): + """인스턴스 변수 설정""" + self.name = name + self.wage = wage + + def raise_pay(self): + """직원 시급을 인상하는 메소드""" + self.wage *= self.raise_percentage + + def __str__(self): + """직원 정보를 문자열로 리턴하는 메소드""" + return Employee.company_name + " 직원: " + self.name + + +class DeliveryMan(Employee): + """배달원 클래스""" + company_name = "코드잇 버거" + raise_percentage = 1.03 + + def __init__(self, name, wage, on_standby): + self.name = name + self.wage = wage + self.on_standby = on_standby + + def raise_pay(self): + """시급을 인상한다""" + self.wage *= self.raise_percentage + + def deliver(self, address): + """배달원이 대기 중이면 주어진 주소로 배달을 보내고 아니면 메시지를 출력한다""" + if self.on_standby: + print(address + "로 배달 나갑니다!") + self.on_standby = False + else: + print("이미 배달하러 나갔습니다!") + + def back(self): + """배달원 복귀를 처리한다""" + self.on_standby = True + + def __str__(self): + return DeliveryMan.company_name + " 배달원: " + self.name + + +taeho = DeliveryMan("성태호", 7000, True) + +taeho.raise_pay() +print(taeho.wage) + +taeho.deliver("서울시 코드잇로 51 최고 건물 401호") +taeho.deliver("서울시 코드잇로 51 최고 건물 402호") + +taeho.back() +taeho.deliver("서울시 코드잇로 51 최고 건물 402호") + +print(taeho) + +print(DeliveryMan.mro()) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\353\270\224\353\241\234\352\267\270_\354\234\240\354\240\200_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\353\270\224\353\241\234\352\267\270_\354\234\240\354\240\200_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..de90a88 --- /dev/null +++ "b/GalaxyDimension/Round3/\353\270\224\353\241\234\352\267\270_\354\234\240\354\240\200_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,58 @@ +class Post: + # 게시글 클래스 + def __init__(self, date, content): + # 게시글은 속성으로 작성 날짜와 내용을 갖는다 + self.date = date + self.content = content + + def __str__(self): + # 게시글의 정보를 문자열로 리턴하는 메소드 + return "작성 날짜: {}\n내용: {}".format(self.date, self.content) + + +class BlogUser: + # 블로그 유저 클래스 + def __init__(self, name): + """ + 블로그 유저는 속성으로 이름, 게시글들을 갖는다 + posts는 빈 배열로 초기화한다 + """ + self.name = name + self.posts = [] + + def add_post(self, date, content): + # 새로운 게시글 추가 + self.posts.append(Post(date,content)) + + def show_all_posts(self): + # 블로그 유저의 모든 게시글 출력 + for i in self.posts: + print(i) + + def __str__(self): + # 간단한 인사와 이름을 문자열로 리턴 + return f'안녕하세요 {self.name}입니다.\n' + + + +# 블로그 유저 인스턴스 생성 +blog_user_1 = BlogUser("성태호") + +# 블로그 유저 인스턴스 출력(인사, 이름) +print(blog_user_1) + +# 블로그 유저 게시글 2개 추가 +blog_user_1.add_post("2019년 8월 30일", """ +오늘은 내 생일이었다. +많은 사람들이 축하해줬다. +행복했다. +""") + +blog_user_1.add_post("2019년 8월 31일", """ +재밌는 코딩 교육 사이트를 찾았다. +코드잇이란 곳인데 최고다. +같이 공부하실 분들은 www.codeit.kr로 오세요! +""") + +# 블로그 유저의 모든 게시글 출력 +blog_user_1.show_all_posts() \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\354\206\215\354\204\261\354\235\264_\354\227\206\353\212\224_\352\263\204\354\202\260\352\270\260/main.py" "b/GalaxyDimension/Round3/\354\206\215\354\204\261\354\235\264_\354\227\206\353\212\224_\352\263\204\354\202\260\352\270\260/main.py" new file mode 100644 index 0000000..daa0059 --- /dev/null +++ "b/GalaxyDimension/Round3/\354\206\215\354\204\261\354\235\264_\354\227\206\353\212\224_\352\263\204\354\202\260\352\270\260/main.py" @@ -0,0 +1,31 @@ +class SimpleCalculator: + # 계산기 클래스 + @staticmethod + def add(first_number, second_number): + # 파라미터로 받는 두 숫자의 합을 리턴한다 + return first_number + second_number + + @staticmethod + def subtract(first_number, second_number): + # 첫 번째 파라미터에서 두 번째 파라미터를 뺀 값을 리턴한다 + return first_number - second_number + + @staticmethod + def multiply(first_number, second_number): + # 파라미터로 받는 두 숫자의 곱을 리턴한다 + return first_number * second_number + + @staticmethod + def divide(first_number, second_number): + # 첫 번째 파라미터를 두 번째 파라미터로 나눈 값을 리턴한다 + return first_number / second_number + + +# 계산기 인스턴스 생성 +calculator = SimpleCalculator() + +# 계산기 연산 호출 +print(calculator.add(4, 5)) +print(calculator.subtract(4, 5)) +print(calculator.multiply(4, 5)) +print(calculator.divide(4, 5)) diff --git "a/GalaxyDimension/Round3/\354\212\244\355\206\261\354\233\214\354\271\230_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\354\212\244\355\206\261\354\233\214\354\271\230_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..2b6f2ac --- /dev/null +++ "b/GalaxyDimension/Round3/\354\212\244\355\206\261\354\233\214\354\271\230_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,70 @@ +class Counter: + """ + 시계 클래스의 시, 분, 초를 각각 나타내는데 사용될 카운터 클래스 + """ + + def __init__(self, limit): + """ + 인스턴스 변수 limit(최댓값), value(현재까지 카운트한 값)를 설정한다. + 인스턴스를 생성할 때 인스턴스 변수 limit만 파라미터로 받고, value는 초깃값 0으로 설정한다. + """ + self.limit = limit + self.value = 0 + + + def set(self, new_value): + """ + 파라미터가 0 이상, 최댓값 미만이면 value에 설정한다. + 아닐 경우 value에 0을 설정한다. + """ + if self.limit > new_value >=0: + self.value = new_value + else: + self.value = 0 + + + def tick(self): + """ + value를 1 증가시킨다. + 카운터의 값 value가 limit에 도달하면 value를 0으로 바꾼 뒤 True를 리턴한다. + value가 limit보다 작은 경우 False를 리턴한다. + """ + self.value += 1 + if self.value >= self.limit: + self.value = 0 + else: + return False + + + def __str__(self): + """ + value를 최소 두 자릿수 이상의 문자열로 리턴한다. + 일단 str 함수로 숫자형 변수인 value를 문자열로 변환하고 zfill 메소드를 호출한다. + """ + return str(self.value).zfill(2) + + +# 최대 30까지 셀 수 있는 카운터 인스턴스 생성 +counter = Counter(30) + +# 0부터 5까지 센다 +print("1부터 5까지 카운트하기") +for i in range(5): + counter.tick() + print(counter) + +# 타이머 값을 0으로 바꾼다 +print("카운터 값 0으로 설정하기") +counter.set(0) +print(counter) + +# 카운터 값 27로 설정 +print("카운터 값 27로 설정하기") +counter.set(27) +print(counter) + +# 카운터 값이 30이 되면 0으로 바뀌는지 확인 +print("카운터 값이 30이 되면 0으로 바뀝니다") +for i in range(5): + counter.tick() + print(counter) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\354\213\234\352\263\204_\355\224\204\353\241\234\352\267\270\353\236\250/main.py" "b/GalaxyDimension/Round3/\354\213\234\352\263\204_\355\224\204\353\241\234\352\267\270\353\236\250/main.py" new file mode 100644 index 0000000..100eeec --- /dev/null +++ "b/GalaxyDimension/Round3/\354\213\234\352\263\204_\355\224\204\353\241\234\352\267\270\353\236\250/main.py" @@ -0,0 +1,127 @@ +class Counter: + """ + 시계 클래스의 시,분,초를 각각 나타내는데 사용될 카운터 클래스 + """ + + def __init__(self, limit): + """ + 인스턴스 변수 limit(최댓값), value(현재까지 카운트한 값)을 설정한다. + 인스턴스를 생성할 때 인스턴스 변수 limit만 파라미터로 받고, value는 초깃값 0으로 설정한다. + """ + self.limit = limit + self.value = 0 + + + def set(self, new_value): + """ + 파라미터가 0 이상, 최댓값 미만이면 value에 설정한다. + 아닐 경우 value에 0을 설정한다. + """ + if 0 <= new_value < self.limit: + self.value = new_value + else: + self.value = 0 + + + def tick(self): + """ + value를 1 증가시킨다. + 카운터의 값 value가 limit에 도달하면 value를 0으로 바꾼 뒤 True를 리턴한다. + value가 limit보다 작은 경우 False를 리턴한다. + """ + self.value += 1 + + if self.value == self.limit: + self.value = 0 + return True + return False + + + def __str__(self): + """ + value를 최소 두 자릿수 이상의 문자열로 리턴한다. + 일단 str 함수로 숫자형 변수인 value를 문자열로 변환하고 zfill을 호출한다. + """ + return str(self.value).zfill(2) + + +class Clock: + """ + 시계 클래스 + """ + HOURS = 24 # 시 최댓값 + MINUTES = 60 # 분 최댓값 + SECONDS = 60 # 초 최댓값 + + def __init__(self, hour, minute, second): + """ + 각각 시, 분, 초를 나타내는 카운터 인스턴스 3개(hour, minute, second)를 정의한다. + 현재 시간을 파라미터 hour시, minute분, second초로 지정한다. + """ + self.hour = hour + self.minute = minute + self.second = second + + + def set(self, hour, minute, second): + """현재 시간을 파라미터 hour시, minute분, second초로 설정한다.""" + self.hour = hour + self.minute = minute + self.second = second + + + def tick(self): + """ + 초 카운터의 값을 1만큼 증가시킨다. + 초 카운터를 증가시킬 때, 분 또는 시가 바뀌어야하는 경우도 처리한다. + """ + self.second += 1 + if self.second == self.SECONDS: + self.second = 0 + self.minute += 1 + if self.minute == self.MINUTES: + self.minute = 0 + self.hour += 1 + if self.hour == self.HOURS: + self.hour = 0 + + def __str__(self): + """ + 현재 시간을 시:분:초 형식으로 리턴한다. 시, 분, 초는 두 자리 형식이다. + 예시: "03:11:02" + """ + return f'{str(self.hour).zfill(2)}:{str(self.minute).zfill(2)}:{str(self.second).zfill(2)}' + + +# 초가 60이 넘을 때 분이 늘어나는지 확인하기 +print("시간을 1시 30분 48초로 설정합니다") +clock = Clock(1, 30, 48) +print(clock) + +# 13초를 늘린다 +print("13초가 흘렀습니다") +for i in range(13): + clock.tick() +print(clock) + +# 분이 60이 넘을 때 시간이 늘어나는지 확인 +print("시간을 2시 59분 58초로 설정합니다") +clock.set(2, 59, 58) +print(clock) + +# 5초를 늘린다 +print("5초가 흘렀습니다") +for i in range(5): + clock.tick() +print(clock) + +# 시간이 24가 넘을 때 00:00:00으로 넘어가는 지 확인 +print("시간을 23시 59분 57초로 설정합니다") +clock.set(23, 59, 57) +print(clock) + +# 5초를 늘린다 +print("5초가 흘렀습니다") +for i in range(5): + clock.tick() +print(clock) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\354\213\240\354\232\251_\354\271\264\353\223\234_\354\240\225\353\263\264_\353\263\264\355\230\270\355\225\230\352\270\260/main.py" "b/GalaxyDimension/Round3/\354\213\240\354\232\251_\354\271\264\353\223\234_\354\240\225\353\263\264_\353\263\264\355\230\270\355\225\230\352\270\260/main.py" new file mode 100644 index 0000000..108a590 --- /dev/null +++ "b/GalaxyDimension/Round3/\354\213\240\354\232\251_\354\271\264\353\223\234_\354\240\225\353\263\264_\353\263\264\355\230\270\355\225\230\352\270\260/main.py" @@ -0,0 +1,40 @@ +class CreditCard: + MAX_PAYMENT_LIMIT = 30000000 + + def __init__(self, name, password, payment_limit): + self.name = name + self._password = password + self._payment_limit = payment_limit + + @property + def password(self): + return "비밀번호는 볼 수 없습니다" + + @password.setter + def password(self,new_password): + self._password = new_password + + @property + def payment_limit(self): + return self._payment_limit + + @payment_limit.setter + def payment_limit(self,value): + if 0 <= value <= MAX_PAYMENT_LIMIT: + self._payment_limit = value + else: + print("카드 한도는 0원 ~ 3천만 원 사이로 설정해 주세요!") + +card = CreditCard("강영훈", "123", 100000) + +print(card.name) +print(card.password) +print(card.payment_limit) + +card.name = "성태호" +card.password = "1234" +card.payment_limit = -10 + +print(card.name) +print(card.password) +print(card.payment_limit) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\354\243\274\355\226\211_\354\213\234\353\256\254\353\240\210\354\235\264\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" "b/GalaxyDimension/Round3/\354\243\274\355\226\211_\354\213\234\353\256\254\353\240\210\354\235\264\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" new file mode 100644 index 0000000..b10a6bd --- /dev/null +++ "b/GalaxyDimension/Round3/\354\243\274\355\226\211_\354\213\234\353\256\254\353\240\210\354\235\264\355\204\260_\353\247\214\353\223\244\352\270\260/main.py" @@ -0,0 +1,145 @@ +from abc import ABC, abstractmethod + +class Vehicle(ABC): + @abstractmethod + def start(self): + """추상 메소드 start: 교통 수단의 주행을 시작한다""" + pass + + @property + @abstractmethod + def speed(self): + """변수 _speed(교통 수단의 속도)에 대한 추상 getter 메소드""" + pass + + def stop(self): + """일반 메소드 stop: 교통 수단의 속도를 0으로 바꾼다""" + self.speed = 0 + + +class Bicycle(Vehicle): + max_speed = 15 # 자전거의 최대 속도 + + def __init__(self, speed): + self._speed = speed + + @property + def speed(self): + return self._speed + + @speed.setter + def speed(self, new_value): + self._speed = new_value if 0 <= new_value <= Bicycle.max_speed else 0 + + def start(self): + print("자전거 페달 돌리기 시작합니다.") + self.speed = Bicycle.max_speed / 3 + + def __str__(self): + return "이 자전거는 현재 {}km/h로 주행 중입니다.".format(self.speed) + + +class NormalCar(Vehicle): + + def __init__(self, speed, max_speed): + self._speed = 0 + self.max_speed = max_speed + + @property + def speed(self): + return self._speed + + @speed.setter + def speed(self, new_value): + self._speed = new_value if 0 <= new_value <= self.max_speed else 0 + + def start(self): + print("일반 자동차 시동겁니다.") + self.speed = self.max_speed / 2 + + def __str__(self): + return "이 일반 자동차는 현재 {}km/h로 주행 중입니다.".format(self.speed) + + +class SportsCar(Vehicle): + + def __init__(self, speed, max_speed): + self._speed = speed + self.max_speed = max_speed + + @property + def speed(self): + return self._speed + + @speed.setter + def speed(self, new_value): + self._speed = new_value if 0 <= new_value <= self.max_speed else 0 + + def start(self): + print("스포츠카 시동겁니다.") + self.speed = self.max_speed + + def __str__(self): + return "이 스포츠카는 현재 {}km/h로 주행 중입니다.".format(self.speed) + + +class DrivingSimulator: + def __init__(self): + """교통 수단 인스턴스들을 담을 리스트를 변수로 갖는다""" + self.instance = [] + + def add_vehicle(self, new_vehicle): + """교통 수단 인스턴스들만 시뮬레이터에 추가될 수 있게 한다""" + if isinstance(new_vehicle, Vehicle): + self.instance.append(new_vehicle) + else: + print(f'{new_vehicle}은 교통 수단이 아니기 때문에 추가할 수 없습니다.') + + def start_all_vehicles(self): + """모든 교통 수단을 주행 시작시킨다""" + print('모든 교통 수단을 주행 시작시킵니다!\n') + for i in self.instance: + exec('i.start') + + def stop_all_vehicles(self): + """모든 교통 수단을 주행 정지시킨다""" + print('모든 교통 수단을 주행 정지시킵니다!') + for i in self.instance: + i.stop + + def __str__(self): + """갖고 있는 교통 수단들의 현재 속도를 문자열로 리턴한다""" + for i in self.instance: + return str(i) + + +# 자전거 인스턴스 +bicycle = Bicycle(0) + +# 일반 자동차 인스턴스들 +car_1 = NormalCar(0, 100) +car_2 = NormalCar(0, 120) + +# 스포츠카 인스턴스들 +sports_car_1 = SportsCar(0, 200) +sports_car_2 = SportsCar(0, 190) + + +# 주행 시뮬레이터 인스턴스 +driving_simulator = DrivingSimulator() + +# 교통 수단 인스턴스들을 주행 시뮬레이터에 추가한다 +driving_simulator.add_vehicle(bicycle) +driving_simulator.add_vehicle(car_1) +driving_simulator.add_vehicle(car_2) +driving_simulator.add_vehicle(sports_car_1) +driving_simulator.add_vehicle(sports_car_2) +driving_simulator.add_vehicle(1) + +# 시뮬레이터 내 모든 인스턴스들을 주행 시작시킨다 +driving_simulator.start_all_vehicles() +print(driving_simulator) + +# 시뮬레이터 내 모든 인스턴스들을 주행 정지시킨다 +driving_simulator.stop_all_vehicles() +print(driving_simulator) \ No newline at end of file diff --git "a/GalaxyDimension/Round3/\354\247\201\352\260\201_\354\202\274\352\260\201\355\230\225/main.py" "b/GalaxyDimension/Round3/\354\247\201\352\260\201_\354\202\274\352\260\201\355\230\225/main.py" new file mode 100644 index 0000000..7e7294b --- /dev/null +++ "b/GalaxyDimension/Round3/\354\247\201\352\260\201_\354\202\274\352\260\201\355\230\225/main.py" @@ -0,0 +1,26 @@ +from abc import ABC, abstractmethod + +class Shape(ABC): + @abstractmethod + def draw(self): + pass + + +class RightTriangle(Shape): + def __init__(self, side): + self.side = side + + def draw(self): + for i in range(self.side): + print('* ' * (i+1)) + + def __str__(self): + return f'\n변이 {self.side}인 직각이등변삼각형' + + +# 실행 코드 +right_triangle = RightTriangle(7) + +right_triangle.draw() +print(right_triangle) + diff --git "a/GalaxyDimension/Round3/\355\224\214\353\240\210\354\235\264\353\246\254\354\212\244\355\212\270_\355\225\251\354\271\230\352\270\260/main.py" "b/GalaxyDimension/Round3/\355\224\214\353\240\210\354\235\264\353\246\254\354\212\244\355\212\270_\355\225\251\354\271\230\352\270\260/main.py" new file mode 100644 index 0000000..0364706 --- /dev/null +++ "b/GalaxyDimension/Round3/\355\224\214\353\240\210\354\235\264\353\246\254\354\212\244\355\212\270_\355\225\251\354\271\230\352\270\260/main.py" @@ -0,0 +1,40 @@ +class Song: + def __init__(self, title, artist, year): + self.title = title + self.artist = artist + self.year = year + + def __str__(self): + return f"{self.title} - {self.artist} ({self.year})" + + +class PlayList: + def __init__(self, songs): + self.songs = songs + + def __str__(self): + result = f"플레이리스트 안 노래들:\n\n" + for song in self.songs: + result += f"{song}\n" + return result + + # 여기 코드를 쓰세요 + def __add__(self,another): + return PlayList(self.songs + another.songs) + + +# 실행 코드 +rolling_in_the_deep = Song("Rolling in the Deep", "Adele", 2011) +call_me_maybe = Song("Call Me Maybe", "Carly Rae Jepsen", 2012) +get_lucky = Song("Get Lucky", "Daft Punk", 2013) +uptown_funk = Song("Uptown Funk", "Mark Ronson", 2015) + +palette = Song("Pallete(팔레트)", "아이유", 2017) +blood_sweat_and_tears = Song("피 땀 눈물", "방탄소년단", 2016) +tt = Song("TT", "트와이스", 2016) + +us_pop_2010s = PlayList([rolling_in_the_deep, call_me_maybe, get_lucky, uptown_funk]) +k_pop_2010s = PlayList([palette, blood_sweat_and_tears, tt]) + +pop_2010s = us_pop_2010s + k_pop_2010s +print(pop_2010s)