๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ“๐Ÿ’ช/Django28

1์ฃผ์ฐจ 5๋ฒˆ์งธ (Kaggle ์‚ฌ์šฉ๋ฒ•, ๊ด‘๊ณ ๋ฐ์ดํ„ฐ ์˜ˆ์ธกํ•˜๊ธฐ) Kaggle ๋ฐ์ดํ„ฐ์…‹ ๋‹ค์šด๋กœ๋“œ ๋ฐฉ๋ฒ• 1. kaggle ํšŒ์›๊ฐ€์ž… 2. Account ํŽ˜์ด์ง€ ์ง„์ž… ๋ฉ”๋‰ด / Your Work / Account ๋กœ ๋“ค์–ด๊ฐ€๋ฉด API์— Create New API Token์ด ์žˆ๋‹ค. ํด๋ฆญํ•˜๋ฉด kaggle.json ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋Œ๊ณ ์˜ค๋ฉด ๋‚ด username๊ณผ key ๊ฐ’์ด ์žˆ๋‹ค! username๊ณผ key ๊ฐ’์„ ๋ณต์‚ฌํ•ด์„œ ํ•ด๋‹นํ•˜๋Š”๊ณณ์— ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๋ฉด ๋œ๋‹ค! ์ž์ฃผ ์“ฐ์ด๋‹ˆ๊นŒ username๊ณผ key ๊ฐ’์€ ์ž˜ ๋ฉ”๋ชจํ•ด๋‘์ž! 3. ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ์…‹์„ ๊ฒ€์ƒ‰ํ•ด์„œ ๋“ค์–ด๊ฐ€์ž (์˜ˆ: https://www.kaggle.com/ashydv/advertising-dataset) 4. copy api command ํด๋ฆญ 5. ์ฝ”๋“œ์…€์— ๋ถ™์—ฌ๋„ฃ๊ธฐํ•˜๊ธฐ (์•ž์— ! ๊ผญ ๋ถ™์—ฌ์ฃผ๊ธฐ) !kaggle datasets do.. 2022. 10. 10.
Admin 1. ๊ด€๋ฆฌ์ž ๊ณ„์ • ์ƒ์„ฑํ•˜๊ธฐ python manage.py createsuperuser Username (leave blank to use 'sizza'): suin Email address: suin@naver.com Password: Password (again): 2. admin.py์— model ์ถ”๊ฐ€ from django.contrib import admin from foods.models import Menu admin.site.register(Menu) 3. ๋„๋ฉ”์ธ/admin์œผ๋กœ ์ ‘์† ์ถ”๊ฐ€ํ•œ Menu ๋ชจ๋ธ ๋ณด์ธ๋‹ค 4. ๋ฐ์ดํ„ฐ ์ˆ˜์ •/์ถ”๊ฐ€/์‚ญ์ œ ํ™”๋ฉด์—์„œ ์ง์ ‘ ์ˆ˜์ •/์ถ”๊ฐ€/์‚ญ์ œ ๊ฐ€๋Šฅํ•˜๋‹ค. ๋‚ด์šฉ ๋ฐ”๊พธ๊ณ  save ๋ฒ„ํŠผ ๋ˆ„๋ฅด๋ฉด ์ˆ˜์ •๋œ๋‹ค 2022. 9. 27.
Model , Shell Model ์ž‘์„ฑํ•˜๊ธฐ 1. views.py์˜ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ํ•„๋“œ๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ์ƒ๊ฐํ•ด๋ณธ๋‹ค. 2. models.py ์ž‘์„ฑ ๋ชจ๋“  ๋ชจ๋ธ์€ ํด๋ž˜์Šค๋กœ ์ž‘์„ฑ๋˜๊ณ , ์žฅ๊ณ ์—์„œ ์ œ๊ณตํ•˜๋Š” model์„ ๋ฐ›์•„์™€์•ผํ•œ๋‹ค. from pydoc import describe from django.db import models class Menu(models.Model): # ์ƒ์† name = models.CharField(max_length=50) # charfield๋Š” ์ €์žฅํ•  ์ตœ๋Œ€๊ธธ์ด๊ฐ€ ํ•„์ˆ˜์ธ์ˆ˜ description = models.CharField(max_length=100) price = models.IntegerField() img_path = models.CharField(max_length=255) def __str_.. 2022. 9. 27.
django ์—๋ŸฌํŽ˜์ด์ง€ ์ƒํƒœ์ฝ”๋“œ(status code) : ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋˜์—ˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ๋Š” ์ฝ”๋“œ. 3์ž๋ฆฌ ์ˆซ์ž๋กœ ๋˜์–ด์žˆ๊ณ , 5๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค. 1XX : ์š”์ฒญ์„ ๋ฐ›์•„์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ 2XX : ์š”์ฒญ ๊ฒฐ๊ณผ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๋ ค์คŒ ex) 200 : ์š”์ฒญ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฒฐ๊ณผ๊ฐ€ ์ •์ƒ์ด๋ผ๋Š” ์ •์ƒ์ผ ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐ›๋Š” ์ƒํƒœ์ฝ”๋“œ 204 : ์ •์ƒ ์ฒ˜๋ฆฌ ๋˜์—ˆ์ง€๋งŒ, ์„œ๋ฒ„์— ๋ณด๋‚ด์ค„ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์„ ๋•Œ ๋ฐ›๋Š” ์ƒํƒœ์ฝ”๋“œ 3XX : Redirection, ์š”์ฒญ์„ ์™„๋ฃŒํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ ๋™์ž‘์ด ํ•„์š”ํ•˜๋‹ค 301 : ์š”์ฒญํ•œ ํŽ˜์ด์ง€๊ฐ€ ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋กœ ์˜ฎ๊ฒจ์กŒ๋‹ค. (์š”์ฒญํ•œ ์ž์›์ด ์ƒˆ๋กœ์šด ์ฃผ์†Œ๋กœ ์˜ฎ๊ฒจ์ง) 304 : ์š”์ฒญํ•œ ํŽ˜์ด์ง€๊ฐ€ ๋งˆ์ง€๋ง‰ ์š”์ฒญ ์ดํ›„ ์ˆ˜์ •๋˜์ง€ ์•Š์•„์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์—†๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ(๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ›์•˜๋˜ ์ž์› ์‚ฌ์šฉ) 4XX.. 2022. 9. 27.
๋™์  ์›นํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ ๊ณ„์† ๋ฐ”๋€Œ๋Š” ๋‚ ์งœ ๋งŒ๋“ค์–ด์ฃผ๊ธฐ 1. food/views.py today์— ๋‚ ์งœ๋ฅผ ๋‹ด์•„์„œ ์‚ฌ์ „ํ˜•์œผ๋กœ context๋ผ๋Š” ๋ณ€์ˆ˜์— ๋‹ด๊ณ , context ๋ณ€์ˆ˜๋ฅผ render ํ•จ์ˆ˜์˜ ์„ธ๋ฒˆ์งธ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„˜๊ฒจ์ค€๋‹ค. 2. index.html์— view์—์„œ ๋„˜๊ฒจ๋ฐ›์€ ๊ฐ’ ๋„ฃ๊ธฐ 2022. 9. 26.
์ •์ ๊ฒฝ๋กœ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ templates ๊ฐ€์ง€๊ณ  ์˜ฌ ๋•Œ ๊ผญ ์ด๋Ÿฐ ์ƒŒ๋“œ์œ„์น˜ ๊ตฌ์กฐ๋กœ ๊ฐ€์ง€๊ณ  ์™€์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์ง€๊ณ ์™€์„œ templates์„ ์ˆ˜์ •ํ•ด์ค˜์•ผํ•œ๋‹ค. 1. ์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ ์‚ฌ์šฉ ๋ช…์‹œํ•ด์ฃผ๊ธฐ html ํŒŒ์ผ ๋งจ ์œ„์— ์ ์–ด๋‘๊ธฐ {% load static %} 2. ์ •์  ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๋ฅผ statitc ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•ด์„œ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. # ์ •์  ํŒŒ์ผ ๊ฒฝ๋กœ ์„ค์ •ํ•˜๊ธฐ 2022. 9. 26.
ํ…œํ”Œ๋ฆฟ ์–ธ์–ด, ํ…œํ”Œ๋ฆฟ ์ƒ์† ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜ : ์šฐ๋ฆฌ๊ฐ€ ์ง€์ •ํ•œ ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ {{ ๋ณ€์ˆ˜๋ช….์†์„ฑ }} ํ…œํ”Œ๋ฆฟ์ด ๋ Œ๋” ๋  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ง€์ •ํ•ด ์ค€ ๊ฒฐ๊ณผ๋กœ ๋ณ€ํ™˜ view์—์„œ ๋„˜๊ฒจ ๋ฐ›์€ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ ex) codeit={ title:"django", version : 1.0} -> {{ codeit.title }} ํ…œํ”Œ๋ฆฟ ํ•„ํ„ฐ : ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜๋ฅผ ํŠน์ • ํ˜•์‹์œผ๋กœ ๋ณ€ํ™˜ {{ ๋ณ€์ˆ˜๋ช… | ํ•„ํ„ฐ }} ex) {{ codeit|upper }} ์€ codeit์ด๋ผ๋Š” ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜์— upper ํ•„ํ„ฐ ์ ์šฉํ•ด์„œ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ : ํ…œํ”Œ๋ฆฟ ์ž‘์„ฑ์— ๋กœ์ง์„ ์‚ฌ์šฉ {% ํƒœ๊ทธ %} {% endํƒœ๊ทธ %} ex) {% for %}{% endfor %}, {% if %} ๋“ฑ๋“ฑ ๋”๋ณด๊ธฐ {% tag %} ํ…œํ”Œ๋ฆฟ ํƒœ๊ทธ๋Š” ํ…œํ”Œ๋ฆฟ์„ ์ž‘์„ฑํ•  ๋•Œ ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ ๋“ฑ์˜ ๋กœ์ง.. 2022. 9. 26.
ํ๋ฆ„ ์ •๋ฆฌ ์ชฝ์ง€์‹œํ—˜์œผ๋กœ ํ๋ฆ„ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด์ž! ๋”๋ณด๊ธฐ ์ชฝ์ง€์‹œํ—˜ Django ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์‹คํ–‰์‹œ์ผœ ์ ‘์†ํ•ด๋ณด๊ธฐ ์˜ค๋Š˜์˜ ๋ชฉํ‘œ - ํŒŒ์ด์ฐธ์˜ ํ”„๋กœ์ ํŠธ ์ž๋™ ์ƒ์„ฑ ๋ฐ ํ”„๋กœ์ ํŠธ ์‹คํ–‰ ๊ธฐ๋Šฅ ์—†์ด ๋ช…๋ น์–ด๋กœ๋งŒ ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ ์‚ฌ์šฉํ•  ๋ช…๋ น์–ด python -m venv venv : ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ƒ์„ฑํ•˜๊ธฐ venv\\scripts\\activate : (windows)๊ฐ€์ƒ ํ™˜๊ฒฝ ์ ‘์†ํ•˜๊ธฐ source ./venv/bin/activate : (mac) ๊ฐ€์ƒ ํ™˜๊ฒฝ ์ ‘์†ํ•˜๊ธฐ pip install django : django ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ django-admin startproject $ํ”„๋กœ์ ํŠธ์ด๋ฆ„ . : ํ˜„์žฌ ๊ฒฝ๋กœ์— ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑํ•˜๊ธฐ python manage.py startapp $์•ฑ์ด๋ฆ„ : ์›ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์•ฑ ๋งŒ๋“ค๊ธฐ 1. ํ”„.. 2022. 9. 26.
5์ฃผ์ฐจ_3๋ฒˆ์งธ_GitHub์— ์˜ฌ๋ฆฌ๊ธฐ 1. ์ฝ”๋“œ ์ •๋ฆฌํ•˜๊ธฐ 2. github repository ๋งŒ๋“ค๊ธฐ 3. github์™€ ๋‚ด ํ”„๋กœ์ ํŠธ ์—ฐ๋™ํ•˜๊ธฐ ์ฝ”๋“œ ์ •๋ฆฌํ•˜๊ธฐ github์— ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฆฌ๊ธฐ ์ „์— ์‚ญ์ œํ•˜๊ณ  ์ˆ˜์ •ํ•ด์ค˜์•ผํ•˜๋Š” ๊ฒƒ๋“ค์ด ์žˆ๋‹ค 1. db.sqlite3 ์‚ญ์ œ 2. ๊ฐ ํด๋”์˜ migrations ํด๋”์— __init__.py๋งŒ ๋‚จ๊ธฐ๊ณ  ์ง€์šฐ๊ธฐ user, tweet, restaurant ํด๋” ์•ˆ์— migrations ์ฐพ๊ณ  ๊ทธ ์•ˆ์— init ๋งŒ ๋‚จ๊ธฐ๊ณ  ์ง€์šฐ๊ธฐ ๋งŒ์•ฝ ์ง€์šฐ์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•„๋ฌด๋ฆฌ ๋ฐ”๊ฟ”๋„ ์ ์šฉ์ด ๋˜์ง€ ์•Š์„๊ฒƒ 3. myspartasns์˜ settings.py ์ˆ˜์ •ํ•˜๊ธฐ ์•„๋ž˜์˜ ์ฝ”๋“œ์ฒ˜๋Ÿผ ์ˆ˜์ •ํ•ด์ฃผ์ž DEBUG = False ALLOWED_HOSTS = ["*"] github repository ๋งŒ๋“ค๊ธฐ github์™€ ๋‚ด ํ”„๋กœ์ ํŠธ.. 2022. 9. 25.
5์ฃผ์ฐจ_2๋ฒˆ์งธ_django taggit(ํƒœ๊ทธ๋‹ฌ๊ธฐ) Django taggit ์„ค์น˜ํ•˜๊ธฐ 1. ์žฅ๊ณ  ํƒœ๊ทธ ๋ชจ๋“ˆ ๋‹ค์šด๋ฐ›๊ธฐ pip install django-taggit pip install django-taggit-templatetags2 2. ์žฅ๊ณ ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ธฐ myspartasns/settings.py์— ์ถ”๊ฐ€ํ•ด์ฃผ๊ธฐ ... ์ƒ๋žต INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'tweet', 'user', 'restaurant', 'taggit.apps.TaggitAppConfig', 't.. 2022. 9. 25.
5์ฃผ์ฐจ_1๋ฒˆ์งธ_๊ธฐ๋Šฅ ๋‹ค๋“ฌ๊ธฐ 1. ํšŒ์›๊ฐ€์ž… ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ 2. ๋กœ๊ทธ์ธ ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ 3. ๋นˆ ๊ธ€์“ฐ๊ธฐ ๋ฐฉ์ง€ 4. ์นœ๊ตฌ ํƒญ ๋กœ๊ทธ์ธ์‹œ์—๋งŒ ๋ณด์ด๊ฒŒ ํ•˜๊ธฐ 1. ํšŒ์›๊ฐ€์ž… ๋นˆ์นธ ์ž…๋ ฅ์‹œ ์˜ค๋ฅ˜ ์ด์œ  ์•Œ๋ ค์ฃผ๊ธฐ ํšŒ์›๊ฐ€์ž…์—์„œ ๋นˆ์นธ์œผ๋กœ ๋กœ๊ทธ์ธ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ๋œฌ๋‹ค ValueError๋Š” ์ž…๋ ฅ๊ฐ’์ด ์ž˜๋ชป๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค! The given username must be set ์ด๋ผ๊ณ  ๋‚˜์˜ค๋Š”๋ฐ user/views.py์—์„œ ํ™•์ธํ•ด๋ณด์ž ํšŒ์›๊ฐ€์ž…์ด๋‹ˆ sign_up_view๋ฅผ ๋ณด์ž elif request.method == 'POST': username = request.POST.get('username', None) password = request.POST.get('password', None) password2 = requ.. 2022. 9. 25.
4์ฃผ์ฐจ_3๋ฒˆ์งธ_์นœ๊ตฌ ๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ UserModel์— Follower ์ถ”๊ฐ€ํ•˜๊ธฐ 1. user/models.py ์ˆ˜์ • #user/models.py from django.db import models from django.contrib.auth.models import AbstractUser from django.conf import settings # Create your models here. class UserModel(AbstractUser): class Meta: db_table = "my_user" bio = models.CharField(max_length=256, default='') follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee'.. 2022. 9. 25.
728x90