diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/.gitignore" "b/[4\354\243\274\354\260\250]/yaeran/liongram/.gitignore" new file mode 100644 index 0000000..bd193e7 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/.gitignore" @@ -0,0 +1 @@ +.hw2venv \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/__init__.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/asgi.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/asgi.py" new file mode 100644 index 0000000..787b362 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/asgi.py" @@ -0,0 +1,16 @@ +""" +ASGI config for config project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_asgi_application() diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/settings.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/settings.py" new file mode 100644 index 0000000..c63ced7 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/settings.py" @@ -0,0 +1,130 @@ +""" +Django settings for config project. + +Generated by 'django-admin startproject' using Django 4.2.1. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = 'django-insecure-ef0az6p9pr+ga46yqeqi@u21^)w5s28o=h0ggjkcp8k7e9vb^p' + +# 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', # 추가 +] + +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 = 'config.urls' + +TEMPLATES = [ + { + 'BACKEND': 'django.template.backends.django.DjangoTemplates', + 'DIRS': [BASE_DIR/'templates'], # 위치 지정! + '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 = 'config.wsgi.application' + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': BASE_DIR / 'db.sqlite3', + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.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/4.2/topics/i18n/ + +LANGUAGE_CODE = 'ko-kr' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +STATIC_URL = 'static/' +STATICFILES_DIRS = [ + BASE_DIR / 'static' +] + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' + +MEDIA_URL = 'media/' +MEDIA_ROOT = BASE_DIR / 'media' diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/urls.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/urls.py" new file mode 100644 index 0000000..d0eb948 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/urls.py" @@ -0,0 +1,38 @@ +""" +URL configuration for config project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.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.conf import settings +from django.conf.urls.static import static +from django.urls import path, include + +# from config.views import IndexView +from posts.views import url_view, url_parameter_view, function_view, class_view, function_list_view, index + +urlpatterns = [ + path('admin/', admin.site.urls), + # path('', IndexView.as_view(), name='index'), + path('url/', url_view), + path('url//', url_parameter_view), + # path('fbv/list/', function_list_view), + path('fbv/', function_view), + path('cbv/', class_view.as_view()), + + path('', index, name='index'), + path('posts/', include('posts.urls', namespace='posts')), +] + +urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/views.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/views.py" new file mode 100644 index 0000000..a87e6b5 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/views.py" @@ -0,0 +1,4 @@ +from django.views.generic import TemplateView + +class IndexView(TemplateView): + template_name = 'index.html' \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/config/wsgi.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/wsgi.py" new file mode 100644 index 0000000..8ae71e3 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/config/wsgi.py" @@ -0,0 +1,16 @@ +""" +WSGI config for config 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/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings') + +application = get_wsgi_application() diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/Activate.ps1" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/Activate.ps1" new file mode 100644 index 0000000..3e91fac --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/Activate.ps1" @@ -0,0 +1,375 @@ +<# +.Synopsis +Activate a Python virtual environment for the current Powershell session. + +.Description +Pushes the python executable for a virtual environment to the front of the +$Env:PATH environment variable and sets the prompt to signify that you are +in a Python virtual environment. Makes use of the command line switches as +well as the `pyvenv.cfg` file values present in the virtual environment. + +.Parameter VenvDir +Path to the directory that contains the virtual environment to activate. The +default value for this is the parent of the directory that the Activate.ps1 +script is located within. + +.Parameter Prompt +The prompt prefix to display when this virtual environment is activated. By +default, this prompt is the name of the virtual environment folder (VenvDir) +surrounded by parentheses and followed by a single space (ie. '(.venv) '). + +.Example +Activate.ps1 +Activates the Python virtual environment that contains the Activate.ps1 script. + +.Example +Activate.ps1 -Verbose +Activates the Python virtual environment that contains the Activate.ps1 script, +and shows extra information about the activation as it executes. + +.Example +Activate.ps1 -VenvDir C:\Users\MyUser\Common\.venv +Activates the Python virtual environment located in the specified location. + +.Example +Activate.ps1 -Prompt "MyPython" +Activates the Python virtual environment that contains the Activate.ps1 script, +and prefixes the current prompt with the specified string (surrounded in +parentheses) while the virtual environment is active. + + +#> +Param( + [Parameter(Mandatory = $false)] + [String] + $VenvDir, + [Parameter(Mandatory = $false)] + [String] + $Prompt +) + +<# Function declarations --------------------------------------------------- #> + +<# +.Synopsis +Remove all shell session elements added by the Activate script, including the +addition of the virtual environment's Python executable from the beginning of +the PATH variable. + +.Parameter NonDestructive +If present, do not remove this function from the global namespace for the +session. + +#> +function global:deactivate ([switch]$NonDestructive) { + # Revert to original values + + # The prior prompt: + if (Test-Path -Path Function:_OLD_VIRTUAL_PROMPT) { + Copy-Item -Path Function:_OLD_VIRTUAL_PROMPT -Destination Function:prompt + Remove-Item -Path Function:_OLD_VIRTUAL_PROMPT + } + + # The prior PYTHONHOME: + if (Test-Path -Path Env:_OLD_VIRTUAL_PYTHONHOME) { + Copy-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME -Destination Env:PYTHONHOME + Remove-Item -Path Env:_OLD_VIRTUAL_PYTHONHOME + } + + # The prior PATH: + if (Test-Path -Path Env:_OLD_VIRTUAL_PATH) { + Copy-Item -Path Env:_OLD_VIRTUAL_PATH -Destination Env:PATH + Remove-Item -Path Env:_OLD_VIRTUAL_PATH + } + + # Just remove the VIRTUAL_ENV altogether: + if (Test-Path -Path Env:VIRTUAL_ENV) { + Remove-Item -Path env:VIRTUAL_ENV + } + + # Just remove the _PYTHON_VENV_PROMPT_PREFIX altogether: + if (Get-Variable -Name "_PYTHON_VENV_PROMPT_PREFIX" -ErrorAction SilentlyContinue) { + Remove-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Scope Global -Force + } + + # Leave deactivate function in the global namespace if requested: + if (-not $NonDestructive) { + Remove-Item -Path function:deactivate + } +} + +<# +.Description +Get-PyVenvConfig parses the values from the pyvenv.cfg file located in the +given folder, and returns them in a map. + +For each line in the pyvenv.cfg file, if that line can be parsed into exactly +two strings separated by `=` (with any amount of whitespace surrounding the =) +then it is considered a `key = value` line. The left hand string is the key, +the right hand is the value. + +If the value starts with a `'` or a `"` then the first and last character is +stripped from the value before being captured. + +.Parameter ConfigDir +Path to the directory that contains the `pyvenv.cfg` file. +#> +function Get-PyVenvConfig( + [String] + $ConfigDir +) { + Write-Verbose "Given ConfigDir=$ConfigDir, obtain values in pyvenv.cfg" + + # Ensure the file exists, and issue a warning if it doesn't (but still allow the function to continue). + $pyvenvConfigPath = Join-Path -Resolve -Path $ConfigDir -ChildPath 'pyvenv.cfg' -ErrorAction Continue + + # An empty map will be returned if no config file is found. + $pyvenvConfig = @{ } + + if ($pyvenvConfigPath) { + + Write-Verbose "File exists, parse `key = value` lines" + $pyvenvConfigContent = Get-Content -Path $pyvenvConfigPath + + $pyvenvConfigContent | ForEach-Object { + $keyval = $PSItem -split "\s*=\s*", 2 + if ($keyval[0] -and $keyval[1]) { + $val = $keyval[1] + + # Remove extraneous quotations around a string value. + if ("'""".Contains($val.Substring(0,1))) { + $val = $val.Substring(1, $val.Length - 2) + } + + $pyvenvConfig[$keyval[0]] = $val + Write-Verbose "Adding Key: '$($keyval[0])'='$val'" + } + } + } + return $pyvenvConfig +} + + +<# Begin Activate script --------------------------------------------------- #> + +# Determine the containing directory of this script +$VenvExecPath = Split-Path -Parent $MyInvocation.MyCommand.Definition +$VenvExecDir = Get-Item -Path $VenvExecPath + +Write-Verbose "Activation script is located in path: '$VenvExecPath'" +Write-Verbose "VenvExecDir Fullname: '$($VenvExecDir.FullName)" +Write-Verbose "VenvExecDir Name: '$($VenvExecDir.Name)" + +# Set values required in priority: CmdLine, ConfigFile, Default +# First, get the location of the virtual environment, it might not be +# VenvExecDir if specified on the command line. +if ($VenvDir) { + Write-Verbose "VenvDir given as parameter, using '$VenvDir' to determine values" +} else { + Write-Verbose "VenvDir not given as a parameter, using parent directory name as VenvDir." + $VenvDir = $VenvExecDir.Parent.FullName.TrimEnd("\\/") + $VenvDir = $VenvDir.Insert($VenvDir.Length, "/") + Write-Verbose "VenvDir=$VenvDir" +} + +# Next, read the `pyvenv.cfg` file to determine any required value such +# as `prompt`. +$pyvenvCfg = Get-PyVenvConfig -ConfigDir $VenvDir + +# Next, set the prompt from the command line, or the config file, or +# just use the name of the virtual environment folder. +if ($Prompt) { + Write-Verbose "Prompt specified as argument, using '$Prompt'" +} else { + Write-Verbose "Prompt not specified as argument to script, checking pyvenv.cfg value" + if ($pyvenvCfg -and $pyvenvCfg['prompt']) { + Write-Verbose " Setting based on value in pyvenv.cfg='$($pyvenvCfg['prompt'])'" + $Prompt = $pyvenvCfg['prompt']; + } + else { + Write-Verbose " Setting prompt based on parent's directory's name. (Is the directory name passed to venv module when creating the virutal environment)" + Write-Verbose " Got leaf-name of $VenvDir='$(Split-Path -Path $venvDir -Leaf)'" + $Prompt = Split-Path -Path $venvDir -Leaf + } +} + +Write-Verbose "Prompt = '$Prompt'" +Write-Verbose "VenvDir='$VenvDir'" + +# Deactivate any currently active virtual environment, but leave the +# deactivate function in place. +deactivate -nondestructive + +# Now set the environment variable VIRTUAL_ENV, used by many tools to determine +# that there is an activated venv. +$env:VIRTUAL_ENV = $VenvDir + +if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) { + + Write-Verbose "Setting prompt to '$Prompt'" + + # Set the prompt to include the env name + # Make sure _OLD_VIRTUAL_PROMPT is global + function global:_OLD_VIRTUAL_PROMPT { "" } + Copy-Item -Path function:prompt -Destination function:_OLD_VIRTUAL_PROMPT + New-Variable -Name _PYTHON_VENV_PROMPT_PREFIX -Description "Python virtual environment prompt prefix" -Scope Global -Option ReadOnly -Visibility Public -Value $Prompt + + function global:prompt { + Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) " + _OLD_VIRTUAL_PROMPT + } +} + +# Clear PYTHONHOME +if (Test-Path -Path Env:PYTHONHOME) { + Copy-Item -Path Env:PYTHONHOME -Destination Env:_OLD_VIRTUAL_PYTHONHOME + Remove-Item -Path Env:PYTHONHOME +} + +# Add the venv to the PATH +Copy-Item -Path Env:PATH -Destination Env:_OLD_VIRTUAL_PATH +$Env:PATH = "$VenvExecDir$([System.IO.Path]::PathSeparator)$Env:PATH" + +# SIG # Begin signature block +# MIIaVgYJKoZIhvcNAQcCoIIaRzCCGkMCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDq2sTPEIJ8JE5n +# msRhacE7nmlm6ccumO/BwpdDqNYl5KCCFBgwggPuMIIDV6ADAgECAhB+k+v7fMZO +# WepLmnfUBvw7MA0GCSqGSIb3DQEBBQUAMIGLMQswCQYDVQQGEwJaQTEVMBMGA1UE +# CBMMV2VzdGVybiBDYXBlMRQwEgYDVQQHEwtEdXJiYW52aWxsZTEPMA0GA1UEChMG +# VGhhd3RlMR0wGwYDVQQLExRUaGF3dGUgQ2VydGlmaWNhdGlvbjEfMB0GA1UEAxMW +# VGhhd3RlIFRpbWVzdGFtcGluZyBDQTAeFw0xMjEyMjEwMDAwMDBaFw0yMDEyMzAy +# MzU5NTlaMF4xCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3Jh +# dGlvbjEwMC4GA1UEAxMnU3ltYW50ZWMgVGltZSBTdGFtcGluZyBTZXJ2aWNlcyBD +# QSAtIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsayzSVRLlxwS +# CtgleZEiVypv3LgmxENza8K/LlBa+xTCdo5DASVDtKHiRfTot3vDdMwi17SUAAL3 +# Te2/tLdEJGvNX0U70UTOQxJzF4KLabQry5kerHIbJk1xH7Ex3ftRYQJTpqr1SSwF +# eEWlL4nO55nn/oziVz89xpLcSvh7M+R5CvvwdYhBnP/FA1GZqtdsn5Nph2Upg4XC +# YBTEyMk7FNrAgfAfDXTekiKryvf7dHwn5vdKG3+nw54trorqpuaqJxZ9YfeYcRG8 +# 4lChS+Vd+uUOpyyfqmUg09iW6Mh8pU5IRP8Z4kQHkgvXaISAXWp4ZEXNYEZ+VMET +# fMV58cnBcQIDAQABo4H6MIH3MB0GA1UdDgQWBBRfmvVuXMzMdJrU3X3vP9vsTIAu +# 3TAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnRoYXd0 +# ZS5jb20wEgYDVR0TAQH/BAgwBgEB/wIBADA/BgNVHR8EODA2MDSgMqAwhi5odHRw +# Oi8vY3JsLnRoYXd0ZS5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0EuY3JsMBMGA1Ud +# JQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIBBjAoBgNVHREEITAfpB0wGzEZ +# MBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMTANBgkqhkiG9w0BAQUFAAOBgQADCZuP +# ee9/WTCq72i1+uMJHbtPggZdN1+mUp8WjeockglEbvVt61h8MOj5aY0jcwsSb0ep +# rjkR+Cqxm7Aaw47rWZYArc4MTbLQMaYIXCp6/OJ6HVdMqGUY6XlAYiWWbsfHN2qD +# IQiOQerd2Vc/HXdJhyoWBl6mOGoiEqNRGYN+tjCCBKMwggOLoAMCAQICEA7P9DjI +# /r81bgTYapgbGlAwDQYJKoZIhvcNAQEFBQAwXjELMAkGA1UEBhMCVVMxHTAbBgNV +# BAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMTAwLgYDVQQDEydTeW1hbnRlYyBUaW1l +# IFN0YW1waW5nIFNlcnZpY2VzIENBIC0gRzIwHhcNMTIxMDE4MDAwMDAwWhcNMjAx +# MjI5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29y +# cG9yYXRpb24xNDAyBgNVBAMTK1N5bWFudGVjIFRpbWUgU3RhbXBpbmcgU2Vydmlj +# ZXMgU2lnbmVyIC0gRzQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi +# Yws5RLi7I6dESbsO/6HwYQpTk7CY260sD0rFbv+GPFNVDxXOBD8r/amWltm+YXkL +# W8lMhnbl4ENLIpXuwitDwZ/YaLSOQE/uhTi5EcUj8mRY8BUyb05Xoa6IpALXKh7N +# S+HdY9UXiTJbsF6ZWqidKFAOF+6W22E7RVEdzxJWC5JH/Kuu9mY9R6xwcueS51/N +# ELnEg2SUGb0lgOHo0iKl0LoCeqF3k1tlw+4XdLxBhircCEyMkoyRLZ53RB9o1qh0 +# d9sOWzKLVoszvdljyEmdOsXF6jML0vGjG/SLvtmzV4s73gSneiKyJK4ux3DFvk6D +# Jgj7C72pT5kI4RAocqrNAgMBAAGjggFXMIIBUzAMBgNVHRMBAf8EAjAAMBYGA1Ud +# JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBzBggrBgEFBQcBAQRn +# MGUwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVjLmNvbTA3 +# BggrBgEFBQcwAoYraHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20vdHNzLWNh +# LWcyLmNlcjA8BgNVHR8ENTAzMDGgL6AthitodHRwOi8vdHMtY3JsLndzLnN5bWFu +# dGVjLmNvbS90c3MtY2EtZzIuY3JsMCgGA1UdEQQhMB+kHTAbMRkwFwYDVQQDExBU +# aW1lU3RhbXAtMjA0OC0yMB0GA1UdDgQWBBRGxmmjDkoUHtVM2lJjFz9eNrwN5jAf +# BgNVHSMEGDAWgBRfmvVuXMzMdJrU3X3vP9vsTIAu3TANBgkqhkiG9w0BAQUFAAOC +# AQEAeDu0kSoATPCPYjA3eKOEJwdvGLLeJdyg1JQDqoZOJZ+aQAMc3c7jecshaAba +# tjK0bb/0LCZjM+RJZG0N5sNnDvcFpDVsfIkWxumy37Lp3SDGcQ/NlXTctlzevTcf +# Q3jmeLXNKAQgo6rxS8SIKZEOgNER/N1cdm5PXg5FRkFuDbDqOJqxOtoJcRD8HHm0 +# gHusafT9nLYMFivxf1sJPZtb4hbKE4FtAC44DagpjyzhsvRaqQGvFZwsL0kb2yK7 +# w/54lFHDhrGCiF3wPbRRoXkzKy57udwgCRNx62oZW8/opTBXLIlJP7nPf8m/PiJo +# Y1OavWl0rMUdPH+S4MO8HNgEdTCCBTAwggQYoAMCAQICEAQJGBtf1btmdVNDtW+V +# UAgwDQYJKoZIhvcNAQELBQAwZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lD +# ZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGln +# aUNlcnQgQXNzdXJlZCBJRCBSb290IENBMB4XDTEzMTAyMjEyMDAwMFoXDTI4MTAy +# MjEyMDAwMFowcjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ +# MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hB +# MiBBc3N1cmVkIElEIENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +# ggEPADCCAQoCggEBAPjTsxx/DhGvZ3cH0wsxSRnP0PtFmbE620T1f+Wondsy13Hq +# dp0FLreP+pJDwKX5idQ3Gde2qvCchqXYJawOeSg6funRZ9PG+yknx9N7I5TkkSOW +# kHeC+aGEI2YSVDNQdLEoJrskacLCUvIUZ4qJRdQtoaPpiCwgla4cSocI3wz14k1g +# GL6qxLKucDFmM3E+rHCiq85/6XzLkqHlOzEcz+ryCuRXu0q16XTmK/5sy350OTYN +# kO/ktU6kqepqCquE86xnTrXE94zRICUj6whkPlKWwfIPEvTFjg/BougsUfdzvL2F +# sWKDc0GCB+Q4i2pzINAPZHM8np+mM6n9Gd8lk9ECAwEAAaOCAc0wggHJMBIGA1Ud +# EwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUF +# BwMDMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGln +# aWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5j +# b20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MIGBBgNVHR8EejB4MDqgOKA2 +# hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290 +# Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRB +# c3N1cmVkSURSb290Q0EuY3JsME8GA1UdIARIMEYwOAYKYIZIAYb9bAACBDAqMCgG +# CCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2VydC5jb20vQ1BTMAoGCGCGSAGG +# /WwDMB0GA1UdDgQWBBRaxLl7KgqjpepxA8Bg+S32ZXUOWDAfBgNVHSMEGDAWgBRF +# 66Kv9JLLgjEtUYunpyGd823IDzANBgkqhkiG9w0BAQsFAAOCAQEAPuwNWiSz8yLR +# FcgsfCUpdqgdXRwtOhrE7zBh134LYP3DPQ/Er4v97yrfIFU3sOH20ZJ1D1G0bqWO +# WuJeJIFOEKTuP3GOYw4TS63XX0R58zYUBor3nEZOXP+QsRsHDpEV+7qvtVHCjSSu +# JMbHJyqhKSgaOnEoAjwukaPAJRHinBRHoXpoaK+bp1wgXNlxsQyPu6j4xRJon89A +# y0BEpRPw5mQMJQhCMrI2iiQC/i9yfhzXSUWW6Fkd6fp0ZGuy62ZD2rOwjNXpDd32 +# ASDOmTFjPQgaGLOBm0/GkxAG/AeB+ova+YJJ92JuoVP6EpQYhS6SkepobEQysmah +# 5xikmmRR7zCCBkcwggUvoAMCAQICEAM+1e2gZdG4yR38+Spsm9gwDQYJKoZIhvcN +# AQELBQAwcjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcG +# A1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTExMC8GA1UEAxMoRGlnaUNlcnQgU0hBMiBB +# c3N1cmVkIElEIENvZGUgU2lnbmluZyBDQTAeFw0xODEyMTgwMDAwMDBaFw0yMTEy +# MjIxMjAwMDBaMIGDMQswCQYDVQQGEwJVUzEWMBQGA1UECBMNTmV3IEhhbXBzaGly +# ZTESMBAGA1UEBxMJV29sZmVib3JvMSMwIQYDVQQKExpQeXRob24gU29mdHdhcmUg +# Rm91bmRhdGlvbjEjMCEGA1UEAxMaUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24w +# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqvaRLsnW5buglHGWx2sRM +# CMpqt+gflMjw9ZJPphvbE+ig/u8dPiJpVfIvkvN7V/ncnDrtKn67nbh8ld/fSodW +# IRbG6bLZFYbSdyJTZ36YyrOOVoBZJk0XS7hFy/IMmiQRXRFQ6ojkIbnM8jdb25Do +# uJSTccJhbqSkfXvsDlPenD8+jw7woSskafVqdqq0ggKr33JLGsxp3/aE8wFF/o11 +# qHt/sc+fWCRJJMCh6PK6oXmH4HSojj4krn5Uu/Prn1VNsBYmxhqSTFnFVZikW/gp +# 5BJLCijQPMy+YRGxPM29UExaG706uIk2D5B8WZ/3rNVO73dxn6vvEyltfJ8g4YqE +# cxpG5nyKG5YjHeAj1YcMVfp8EpHz4eWF2RqIERYixdGjL4RBTIrvNSz4Wo6jaxFi +# 21uzwxMX1gMoVnDI+Of1af6AsZ3k1QRXI28P1BUYES03u/Hztt24lQHwXgPKUSwy +# 1lN+PD9q7oCY6ead4rlRypIm7BHJloY2TvLeqPTq63H4dNOoeCL3vlSnF/KvACqS +# i+hkRYFVKm+S7w9WGQFdwuY17owQeUWJoyiIAMB4qZflEVGQ35WuZgZODjNqPF90 +# d4hjxO8t/jy1N+adAl33yB4lC//TU1TL8XG7CoC5ORp7Pk2XUvE/QKlMeGCHM7gV +# EPiK1PbCpOHiOmiPD1BmewIDAQABo4IBxTCCAcEwHwYDVR0jBBgwFoAUWsS5eyoK +# o6XqcQPAYPkt9mV1DlgwHQYDVR0OBBYEFPwqv37Uvqzzgpykz3siATu4jwfyMA4G +# A1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzB3BgNVHR8EcDBuMDWg +# M6Axhi9odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLWNzLWcx +# LmNybDA1oDOgMYYvaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJl +# ZC1jcy1nMS5jcmwwTAYDVR0gBEUwQzA3BglghkgBhv1sAwEwKjAoBggrBgEFBQcC +# ARYcaHR0cHM6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAIBgZngQwBBAEwgYQGCCsG +# AQUFBwEBBHgwdjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t +# ME4GCCsGAQUFBzAChkJodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl +# cnRTSEEyQXNzdXJlZElEQ29kZVNpZ25pbmdDQS5jcnQwDAYDVR0TAQH/BAIwADAN +# BgkqhkiG9w0BAQsFAAOCAQEAS3WhLbVfRrGJp8+PJj6+ViqNYq5S79gW5hYgSrqJ +# FFoVps0OGP1EEVAX9omITmaytAQ58APr/qBVIf3WVlYGqDo0R4b1P1JduIA+8n0I +# RYWx2RdSuNtaG8Ke5nuSpS5TkEC6YjVBFuliBkvdQD6JleSaNsaHWWfytSFYjFsF +# gvhKDaeqkHjinsJQViQ+P8xvBTaC8FXaleOPlZqyShm2wAIy/mDjYE2hUuhECL56 +# /qzTs8634m0dEibzuVPK5zzCHSzBM9TCSwpstTVl2P0Kmq3Nee5UTTDnR7Em9FIr +# dW3iD7S+KCkjeo+YN2mR/37gy/LRcw1yqu2HDbRH4+QiUzGCBZQwggWQAgEBMIGG +# MHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsT +# EHd3dy5kaWdpY2VydC5jb20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJl +# ZCBJRCBDb2RlIFNpZ25pbmcgQ0ECEAM+1e2gZdG4yR38+Spsm9gwDQYJYIZIAWUD +# BAIBBQCggdAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIB +# CzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIDwkNFE0J7lFqDFWlO8g +# a0Vg8TqicqZe2fbuhTmOCdCDMGQGCisGAQQBgjcCAQwxVjBUoFKAUABCAHUAaQBs +# AHQAOgAgAFIAZQBsAGUAYQBzAGUAXwBtAGEAcwB0AGUAcgBfAHYAMwAuADgALgAx +# AF8AMgAwADEAOQAxADIAMQA4AC4AMAAxMA0GCSqGSIb3DQEBAQUABIICACbwmgd+ +# doVwLf3DbJEz47aQT3LANL6bGZ3AfE192LY2+l3aO125tMGK0NdnrU3F7oTRTIrF +# sdOm2+OstYBdLbB48RGYslZmPbxQu7u4QBBBi/YhggMLlokM9JL+8HM8SqLRiG76 +# 0B/ilq9T1MteBnft14afBSleIpgB+ce0VKNL8gPGORWvnd6A/smkkquhPlmBDUvG +# wX8qZFHS6qywahdOwANMviQpswQ3YUG5jWXi8AX6GNeWnxXx6Asx5f//74Gqo6a7 +# OFA/VmmsVaEuTyDF7ll+GlrGn77T9bcgk5KaaVv6dxrbgaik49I7Qa1nGSvVHwjX +# XB652tpfHxXnajO7Qz3w3iOOddAanVTIEcQDbCejtSiqgcKPE1R2+c+wJ1HRaKZ7 +# yM77l1s8gK8zKi9xUdvASWiFiJ2An5FcenkjTg3adAmhmIPkNwVvSZmUdRLPXAxf +# Y/H0y+8IEblQ4MfbV4tuc//gI/hrgfTlfq2/45KG0TQ7/iPwSmEcBQFKBixF5bxS +# 6u9kpB7pj2N9A8J2ttWnC5qVxTd7PH+pTy0vSEpXlRQCb7++jjJfroPWbJM+/X1g +# 5PRl5f0Ya1hpYxy56yBz2bBANoVuaFfDWDPmcBKva7Hqgw/OI3vZu3RqCs7HXdGw +# tf7bFzEMYKzgmDnb90ouWZAR9q5PzB5VGtA7oYICCzCCAgcGCSqGSIb3DQEJBjGC +# AfgwggH0AgEBMHIwXjELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENv +# cnBvcmF0aW9uMTAwLgYDVQQDEydTeW1hbnRlYyBUaW1lIFN0YW1waW5nIFNlcnZp +# Y2VzIENBIC0gRzICEA7P9DjI/r81bgTYapgbGlAwCQYFKw4DAhoFAKBdMBgGCSqG +# SIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTE5MTIxODIzMTcx +# MlowIwYJKoZIhvcNAQkEMRYEFH0jwh7PemYBuyfNXIYTFCAb+YspMA0GCSqGSIb3 +# DQEBAQUABIIBAElndo5LcPp3QeHraYmNpNphu0C2yEvJkknWL7BrO0bC2q2q+C/e +# HtRIX8F8nh/2q4MBUzH1pKY+KUdJlP47R6vgOfGtOPcAwFWuevZYDZe6YDATLXvK +# Qdysm/Fm9DSM3HesLRkEthtzNVQxMjO+/1AQb6I4/dvJrmUyVE67m1L5S7B8Ezot +# Y0MQdjZDUMV2tSwLoUnddBkQG3PxPkJoZlpC54rzVKOuoXUUOpvjLau9EAsIUH2K +# S7IwltXcdLL/GY2g3Sto8Jqyjl1Qcky4FqBGH3tyaNOtLl31uDZlDpbttLnZQKWf +# CIKBmWknNrTzvZuH8fZcLiNY7dobJicoWEY= +# SIG # End signature block diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate" new file mode 100644 index 0000000..b25847e --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate" @@ -0,0 +1,76 @@ +# This file must be used with "source bin/activate" *from bash* +# you cannot run it directly + +deactivate () { + # reset old environment variables + if [ -n "${_OLD_VIRTUAL_PATH:-}" ] ; then + PATH="${_OLD_VIRTUAL_PATH:-}" + export PATH + unset _OLD_VIRTUAL_PATH + fi + if [ -n "${_OLD_VIRTUAL_PYTHONHOME:-}" ] ; then + PYTHONHOME="${_OLD_VIRTUAL_PYTHONHOME:-}" + export PYTHONHOME + unset _OLD_VIRTUAL_PYTHONHOME + fi + + # This should detect bash and zsh, which have a hash command that must + # be called to get it to forget past commands. Without forgetting + # past commands the $PATH changes we made may not be respected + if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r + fi + + if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then + PS1="${_OLD_VIRTUAL_PS1:-}" + export PS1 + unset _OLD_VIRTUAL_PS1 + fi + + unset VIRTUAL_ENV + if [ ! "${1:-}" = "nondestructive" ] ; then + # Self destruct! + unset -f deactivate + fi +} + +# unset irrelevant variables +deactivate nondestructive + +VIRTUAL_ENV="G:\내 드라이브\멋사\Backend-session\Backend\[2주차]\yaeran\hw2venv" +export VIRTUAL_ENV + +_OLD_VIRTUAL_PATH="$PATH" +PATH="$VIRTUAL_ENV/Scripts:$PATH" +export PATH + +# unset PYTHONHOME if set +# this will fail if PYTHONHOME is set to the empty string (which is bad anyway) +# could use `if (set -u; : $PYTHONHOME) ;` in bash +if [ -n "${PYTHONHOME:-}" ] ; then + _OLD_VIRTUAL_PYTHONHOME="${PYTHONHOME:-}" + unset PYTHONHOME +fi + +if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then + _OLD_VIRTUAL_PS1="${PS1:-}" + if [ "x(hw2venv) " != x ] ; then + PS1="(hw2venv) ${PS1:-}" + else + if [ "`basename \"$VIRTUAL_ENV\"`" = "__" ] ; then + # special case for Aspen magic directories + # see http://www.zetadev.com/software/aspen/ + PS1="[`basename \`dirname \"$VIRTUAL_ENV\"\``] $PS1" + else + PS1="(`basename \"$VIRTUAL_ENV\"`)$PS1" + fi + fi + export PS1 +fi + +# This should detect bash and zsh, which have a hash command that must +# be called to get it to forget past commands. Without forgetting +# past commands the $PATH changes we made may not be respected +if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then + hash -r +fi diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate.bat" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate.bat" new file mode 100644 index 0000000..0ec635e --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/activate.bat" @@ -0,0 +1,33 @@ +@echo off + +rem This file is UTF-8 encoded, so we need to update the current code page while executing it +for /f "tokens=2 delims=:." %%a in ('"%SystemRoot%\System32\chcp.com"') do ( + set _OLD_CODEPAGE=%%a +) +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" 65001 > nul +) + +set VIRTUAL_ENV=G:\내 드라이브\멋사\Backend-session\Backend\[2주차]\yaeran\hw2venv + +if not defined PROMPT set PROMPT=$P$G + +if defined _OLD_VIRTUAL_PROMPT set PROMPT=%_OLD_VIRTUAL_PROMPT% +if defined _OLD_VIRTUAL_PYTHONHOME set PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME% + +set _OLD_VIRTUAL_PROMPT=%PROMPT% +set PROMPT=(hw2venv) %PROMPT% + +if defined PYTHONHOME set _OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME% +set PYTHONHOME= + +if defined _OLD_VIRTUAL_PATH set PATH=%_OLD_VIRTUAL_PATH% +if not defined _OLD_VIRTUAL_PATH set _OLD_VIRTUAL_PATH=%PATH% + +set PATH=%VIRTUAL_ENV%\Scripts;%PATH% + +:END +if defined _OLD_CODEPAGE ( + "%SystemRoot%\System32\chcp.com" %_OLD_CODEPAGE% > nul + set _OLD_CODEPAGE= +) diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/deactivate.bat" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/deactivate.bat" new file mode 100644 index 0000000..1205c61 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/deactivate.bat" @@ -0,0 +1,21 @@ +@echo off + +if defined _OLD_VIRTUAL_PROMPT ( + set "PROMPT=%_OLD_VIRTUAL_PROMPT%" +) +set _OLD_VIRTUAL_PROMPT= + +if defined _OLD_VIRTUAL_PYTHONHOME ( + set "PYTHONHOME=%_OLD_VIRTUAL_PYTHONHOME%" + set _OLD_VIRTUAL_PYTHONHOME= +) + +if defined _OLD_VIRTUAL_PATH ( + set "PATH=%_OLD_VIRTUAL_PATH%" +) + +set _OLD_VIRTUAL_PATH= + +set VIRTUAL_ENV= + +:END diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/django-admin.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/django-admin.exe" new file mode 100644 index 0000000..a3216f3 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/django-admin.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install-3.8.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install-3.8.exe" new file mode 100644 index 0000000..fc7ee63 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install-3.8.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install.exe" new file mode 100644 index 0000000..fc7ee63 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/easy_install.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip.exe" new file mode 100644 index 0000000..e66cce0 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.10.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.10.exe" new file mode 100644 index 0000000..e66cce0 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.10.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.8.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.8.exe" new file mode 100644 index 0000000..e66cce0 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.8.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.exe" new file mode 100644 index 0000000..e66cce0 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pip3.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/python.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/python.exe" new file mode 100644 index 0000000..f609b93 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/python.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pythonw.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pythonw.exe" new file mode 100644 index 0000000..0a62940 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/pythonw.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/sqlformat.exe" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/sqlformat.exe" new file mode 100644 index 0000000..b7c13e0 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/Scripts/sqlformat.exe" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/pyvenv.cfg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/pyvenv.cfg" new file mode 100644 index 0000000..244e2fa --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/hw2venv/pyvenv.cfg" @@ -0,0 +1,3 @@ +home = C:\Users\yaera\AppData\Local\Programs\Python\Python38 +include-system-site-packages = false +version = 3.8.1 diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/manage.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/manage.py" new file mode 100644 index 0000000..8e7ac79 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/manage.py" @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.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/[4\354\243\274\354\260\250]/yaeran/liongram/media/heart-image.png" "b/[4\354\243\274\354\260\250]/yaeran/liongram/media/heart-image.png" new file mode 100644 index 0000000..4186b25 Binary files /dev/null and "b/[4\354\243\274\354\260\250]/yaeran/liongram/media/heart-image.png" differ diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/__init__.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/admin.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/admin.py" new file mode 100644 index 0000000..cabf6b3 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/admin.py" @@ -0,0 +1,29 @@ +from django.contrib import admin + +from .models import Post, Comment + +class CommentInline(admin.TabularInline): + model = Comment + extra = 5 + min_num = 3 + max_num = 5 + verbose_name = '댓글' + verbose_name_plural = '댓글' + +@admin.register(Post) +class PostModelAdmin(admin.ModelAdmin): + list_display = ('id', 'image', 'content', 'created_at', 'view_count', 'writer') + list_filter = ('created_at', ) + search_fields = ('id', 'writer_username') + search_help_text = '게시판 번호, 작성자 검색이 가능합니다.' + readonly_fields = ('created_at', ) + inlines = [CommentInline] + + actions = ['make_published'] + + def make_published(modeladmin, request, queryset): + for item in queryset: + item.content = '운영 규정 위반으로 인한 게시글 삭제 처리.' + item.save() + +# admin.site.register(Comment) \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/apps.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/apps.py" new file mode 100644 index 0000000..b18ed0d --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/apps.py" @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PostsConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'posts' diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0001_initial.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0001_initial.py" new file mode 100644 index 0000000..a0d1974 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0001_initial.py" @@ -0,0 +1,24 @@ +# Generated by Django 4.2.1 on 2023-05-11 07:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Post', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('image', models.ImageField(upload_to='', verbose_name='이미지')), + ('content', models.TextField(verbose_name='내용')), + ('created_at', models.DateTimeField(verbose_name='작성일')), + ('view_count', models.ImageField(upload_to='', verbose_name='조회수')), + ], + ), + ] diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0002_post_writer_alter_post_created_at_alter_post_image_and_more.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0002_post_writer_alter_post_created_at_alter_post_image_and_more.py" new file mode 100644 index 0000000..6ad813b --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0002_post_writer_alter_post_created_at_alter_post_image_and_more.py" @@ -0,0 +1,46 @@ +# Generated by Django 4.2.1 on 2023-05-11 07:17 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('posts', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='writer', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='post', + name='created_at', + field=models.DateTimeField(auto_now_add=True, verbose_name='작성일'), + ), + migrations.AlterField( + model_name='post', + name='image', + field=models.ImageField(blank=True, null=True, upload_to='', verbose_name='이미지'), + ), + migrations.AlterField( + model_name='post', + name='view_count', + field=models.ImageField(default=0, upload_to='', verbose_name='조회수'), + ), + migrations.CreateModel( + name='Commnet', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('content', models.TextField(verbose_name='내용')), + ('created_at', models.DateTimeField(verbose_name='작성일')), + ('post', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='posts.post')), + ('writer', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0003_rename_commnet_comment.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0003_rename_commnet_comment.py" new file mode 100644 index 0000000..7f8b49d --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/0003_rename_commnet_comment.py" @@ -0,0 +1,19 @@ +# Generated by Django 4.2.1 on 2023-05-11 07:30 + +from django.conf import settings +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('posts', '0002_post_writer_alter_post_created_at_alter_post_image_and_more'), + ] + + operations = [ + migrations.RenameModel( + old_name='Commnet', + new_name='Comment', + ), + ] diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/__init__.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/migrations/__init__.py" new file mode 100644 index 0000000..e69de29 diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/models.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/models.py" new file mode 100644 index 0000000..252eef8 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/models.py" @@ -0,0 +1,18 @@ +from django.db import models +from django.contrib.auth import get_user_model + +User = get_user_model() + +# Create your models here. +class Post(models.Model): + image = models.ImageField(verbose_name='이미지', null=True, blank=True) + content = models.TextField('내용') + created_at = models.DateTimeField('작성일', auto_now_add=True) + view_count = models.ImageField('조회수', default=0) + writer = models.ForeignKey(to=User,on_delete=models.CASCADE, null=True, blank=True) + +class Comment(models.Model): + content = models.TextField(verbose_name='내용') + created_at = models.DateTimeField(verbose_name='작성일') + post = models.ForeignKey(to='Post', on_delete=models.CASCADE) + writer = models.ForeignKey(to=User,on_delete=models.CASCADE, null=True, blank=True) diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/cbv_view.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/cbv_view.html" new file mode 100644 index 0000000..8fc2f95 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/cbv_view.html" @@ -0,0 +1,14 @@ + + + + + + + Document + + + {% for object in object_list %} +

{{ object }}

+ {% endfor %} + + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_confirm_delete.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_confirm_delete.html" new file mode 100644 index 0000000..c248257 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_confirm_delete.html" @@ -0,0 +1,5 @@ +{% extends 'base.html' %} +{%block title%}삭제{%endblock %} +{% block content %} +

삭제 화면

+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_detail.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_detail.html" new file mode 100644 index 0000000..afec076 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_detail.html" @@ -0,0 +1,7 @@ +{% extends 'base.html' %} +{% block title %}글 상세{% endblock %} + +{% block content %} +

Post 상세 화면

+{% include 'index.html' %} +{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_form.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_form.html" new file mode 100644 index 0000000..690b89f --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_form.html" @@ -0,0 +1,5 @@ +{% extends 'base.html' %} +{%block title%}글 입력{%endblock %} +{% block content %} +

입력 화면

+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_list.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_list.html" new file mode 100644 index 0000000..bdfcd4e --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/posts/post_list.html" @@ -0,0 +1,5 @@ +{% extends 'base.html' %} +{%block title%}목록{%endblock %} +{% block content %} +

목록 화면

+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/view.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/view.html" new file mode 100644 index 0000000..e85a865 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/templates/view.html" @@ -0,0 +1,23 @@ + + + + + + + Document + + + 새로고침
+ +
+ + +
+ +
{% csrf_token %} + + +
+ + + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/tests.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/tests.py" new file mode 100644 index 0000000..7ce503c --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/tests.py" @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/urls.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/urls.py" new file mode 100644 index 0000000..603caf7 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/urls.py" @@ -0,0 +1,12 @@ +from django.urls import path +from .views import post_list_view, post_detail_view, post_create_view, post_update_view, post_delete_view + +app_name = 'posts' + +urlpatterns = [ + path('', post_list_view, name='post-list'), + path('create/', post_create_view, name='post-create'), + path('/', post_detail_view, name='post-detail'), + path('/edit/', post_update_view, name='post-update'), + path('/delete/', post_delete_view, name='post-delete'), +] \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/posts/views.py" "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/views.py" new file mode 100644 index 0000000..3ea1a06 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/posts/views.py" @@ -0,0 +1,102 @@ +from django.shortcuts import render, redirect, get_object_or_404 +from django.http import HttpResponse, JsonResponse +from django.views.generic.list import ListView +from django.contrib.auth.decorators import login_required + +from .models import Post + +def index(request): + post_list = Post.objects.all().order_by('-created_at') + context = { + 'post_list': post_list + } + return render(request, 'index.html', context) + +def post_list_view(request): + # post_list = Post.objects.all() + post_list = Post.objects.filter(writer = request.user) + context = { + 'post_list': post_list + } + return render(request, 'posts/post_list.html', context) + +def post_detail_view(request, id): + post = Post.objects.get(id=id) + context = { + 'post': post + } + return render(request, 'posts/post_detail.html', context) + +def post_create_view(request): + if request.method == 'GET': + return render(request, 'posts/post_form.html') + else: + image = request.FILES.get('image') + content = request.POST.get('content') + Post.objects.create( + image = image, + content = content, + writer = request.user + ) + return redirect('index') + +def post_update_view(request, id): + post = Post.objects.get(id=id) + if request.method == 'GET': + context = { + 'post': post + } + return render(request, 'posts/post_form.html', context) + elif request.method == 'POST': + image = request.FILES.get('image') + content = request.POST.get('content') + # Post.objects.create( + if new_image: + post.image.delete() + post.image = new_image + post.content = content + # writer = request.user + post.save() + # ) + return redirect('post_detail', post.id) + +def post_delete_view(request, id): + post = get_object_or_404(Post, id=id) + if request.method == 'GET': + context = { + 'post': post + } + return render(request, 'posts/post_confirm_delete.html', context) + else: + post.delete() + return redirect('index') + +# Create your views here. +def url_view(request): + print('url_view()') + data = {'code': '001', 'msg': 'OK'} + return HttpResponse('

url_view

') + +def url_parameter_view(request, username): + print('url_parameter_view()') + print(f'username: {username}') + print(f'request.GET: {request.GET}') + return HttpResponse(username) + +def function_view(request): + print(f'request.method: {request.method}') + + if request.method == 'GET': + print(f'request.GET: {request.GET}') + elif request.method == 'POST': + print(f'request.POST: {request.POST}') + return render(request, 'view.html') + +class class_view(ListView): + model = Post + # ordering = ['-id'] + template_name = 'cbv_view.html' + +def function_list_view(request): + object_list = Post.objects.all().order_by('-id') + return render(request, 'cbv_view.html', {'object_list': object_list}) diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/index.css" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/index.css" new file mode 100644 index 0000000..a5034fc --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/index.css" @@ -0,0 +1,113 @@ +.container { + display: flex; + flex-direction: column; + max-width: 425px; +} + +body { + font-family: 'Noto Sans KR', sans-serif; + margin: 0 auto 60px auto; +} + +main { + background-color: #FAFAFA; +} + +/* Font */ +.material-icons.md-18 { + font-size: 18px; +} + +.material-icons.md-24 { + font-size: 24px; +} + +.material-icons.md-36 { + font-size: 36px; +} + +.material-icons.md-48 { + font-size: 48px; +} + +/* Bottom Menu */ +.bottom-menu-group { + display: flex; + height: 60px; + align-items: center; + justify-content: space-around; + background-color: #FFFFFF; +} + +/* Card */ +.card-list { + margin: 10px 0; + background-color: #FFFFFF; +} + +.card__header { + display: flex; + align-items: center; + margin: 15px 0; + padding: 0 5px; +} + +.card__user { + display: flex; + justify-items: center; + align-items: center; +} + +.card__user-image { + margin: 0 5px; +} + +.card__user-name { + font-weight: bold; + margin: 0 5px 0 0; +} + +.card__body { + margin: 10px 0; +} + +.card__image { + height: 450px; + width: 100%; + margin: 5px 0; + object-fit: cover; +} + +.card__btn-group { + display: flex; + justify-content: space-between; + margin: 5px 0; + padding: 0 5px; +} + +.card__btn { + margin: 0 5px; +} + +.card_content { + display: flex; + flex-direction: column; + padding: 0 5px; +} + +.card__like-num { + font-weight: bold; +} + +.card__main-text { + margin: 10px 0; +} + +.card__comment-group > li { + margin: 10px 0; +} + +.card__created-at { + font-weight: lighter; + font-size: 0.8rem; +} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/reset.css" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/reset.css" new file mode 100644 index 0000000..bafcd52 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/css/reset.css" @@ -0,0 +1,60 @@ +/* http://meyerweb.com/eric/tools/css/reset/ + v2.0 | 20110126 + License: none (public domain) +*/ + +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; +} + + a, a:hover, a:focus, a:active { + text-decoration: none; + color: inherit; + } + + a { + color: inherit; /* blue colors for links too */ + text-decoration: inherit; /* no underline */ +} + + a { color: inherit; } \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/account_circle_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/account_circle_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..2edae3e --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/account_circle_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/bookmark_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/bookmark_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..0fbf284 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/bookmark_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/edit_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/edit_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..7e190c3 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/edit_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/favorite_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/favorite_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..ccd13f3 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/favorite_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/home_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/home_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..542676a --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/home_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/mode_comment_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/mode_comment_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..d708d64 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/mode_comment_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/search_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/search_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..21d329f --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/search_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/send_FILL0_wght400_GRAD0_opsz48.svg" "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/send_FILL0_wght400_GRAD0_opsz48.svg" new file mode 100644 index 0000000..5b391ca --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/static/icons/send_FILL0_wght400_GRAD0_opsz48.svg" @@ -0,0 +1 @@ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/base.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/base.html" new file mode 100644 index 0000000..a51ce09 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/base.html" @@ -0,0 +1,43 @@ +{% load static %} + + + + + + + + + {% block title %}{% endblock %} | 라이언그램 + + +
+ {% block content %} + {% endblock %} +
+
+ +
+ + \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/index.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/index.html" new file mode 100644 index 0000000..337b658 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/index.html" @@ -0,0 +1,52 @@ +{% extends 'base.html' %} +{% load static %} +{% block title %}홈{% endblock %} + +{% block content %} +
+
+
+ + {% if request.user == post.writer %} + 수정하기 + {% endif %} +
+
+ +
+
+
+ 좋아요 + 댓글 + 공유하기 +
+
+ 북마크 +
+
+
+ +
+

{{post.writer}}{{post.content}} + 더보기 +

+
+

댓글 0개 모두 보기

+
    +
  • +

    likelion.official댓글 내용...

    +
  • +
+

2023년 5월 11일

+
+
+
+
+
+
+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_confirm_delete.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_confirm_delete.html" new file mode 100644 index 0000000..9605688 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_confirm_delete.html" @@ -0,0 +1,14 @@ +{% extends 'base.html' %} +{%block title%}삭제{%endblock %} +{% block content %} +

삭제 화면

+
+ {% csrf_token %} +

삭제되면 데이터 없어짐

+

삭제하시겠습니까?



+ + 돌아가기 + +
+
+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_detail.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_detail.html" new file mode 100644 index 0000000..afec076 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_detail.html" @@ -0,0 +1,7 @@ +{% extends 'base.html' %} +{% block title %}글 상세{% endblock %} + +{% block content %} +

Post 상세 화면

+{% include 'index.html' %} +{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_form.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_form.html" new file mode 100644 index 0000000..826dd2f --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_form.html" @@ -0,0 +1,27 @@ +{% extends 'base.html' %} +{%block title%}글 입력{%endblock %} +{% block content %} +

입력 화면

+
+ {% csrf_token %} +
+ + {% if post.image %} +

현재: {{post.image}}

+

변경:

+ {% else %} + + {% endif %} +
+
+ + + {% if post %} + {{post.content}} + {% endif %} +
+
+ +
+
+{% endblock %} \ No newline at end of file diff --git "a/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_list.html" "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_list.html" new file mode 100644 index 0000000..c382077 --- /dev/null +++ "b/[4\354\243\274\354\260\250]/yaeran/liongram/templates/posts/post_list.html" @@ -0,0 +1,14 @@ +{% extends 'base.html' %} +{%block title%}목록{%endblock %} +{% block content %} +

목록 화면

+{% for post in post_list %} +
+ {{post.image}}
+ {{post.content}}
+ {{post.created_at}}
+ {{post.view_count}}
+ {{post.writer}}
+
+{% endfor %} +{% endblock %} \ No newline at end of file